2015年9月15日火曜日

ニフティクラウド Timer の HTTP 機能を使ってみた

概要

ニフティクラウド Timer を使ってニフティクラウドmobile backend (以下、NCMB) に定期的にプッシュ通知を送信してみました

環境

  • ニフティクラウド Timer 20150915 時点
  • NCMB 20150915 時点
  • Ruby 2.2.0p0
  • Bundler 1.8.3

事前準備

今回は iOS に対してプッシュ通知を実施します
NCMB を使ってプッシュ通知を実施できる環境が必要なので、まだの方はこちらから設定してください
iOS は厳しいというかたは Android でもOKです
Android であれば公式を元にさらっとできると思います
iOS, Android どちらにせよ実機は必要です

また、ニフティクラウド Timer および NCMB を利用できるアカウントが必要になります
ぶっちゃけ事前準備が一番たいへんだと思います
また、ニフティクラウド Timer は有料のサービスとなります

curl 用のリクエストを作成する

このスクリプトを使って curl 用のリクエストを生成しましょう
ここで生成したリクエストをタイマーにコールされることで NCMB にプッシュ通知を登録します

  • cd work
  • git clone https://gist.github.com/ef34c3a0180961262607.git
  • cd ef34c3a0180961262607
  • vim post_push.rb
    • APPLICATION_KEY と CLIENT_KEY の部分を書き換えます
    • params の message を好きな文字に変えてください、これがプッシュ通知に表示されます
  • bundle install && bundle exec ruby post_push.rb

上記を実行すると標準出力に curl 用のコマンドが出力されます
このコマンドのヘッダ部分とボディ部分、そしてアクセスしている URL をメモしておきましょう

curl -X “POST” -H “Content-Type: application/json” -H “X-NCMB-Application-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” -H “X-NCMB-Timestamp: 2015-09-14T08%3A08%3A34.456Z” -H “X-NCMB-Signature: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy” -d ‘{“immediateDeliveryFlag”:true,”target”:[“ios”],”message”:”GoodMorning!”}’ https://mb.api.cloud.nifty.com/2013-09-01/push

タイマー作成

ニフティクラウド Timer のコンパネで作成します

まずタイマーを起動させる時間を設定します
時間の設定は cron っぽく設定できるので cron に慣れている方は cron をイメージするといいと思います
今回は毎日朝7:30にモーニングプッシュをするようにしてみましょう
名前は好きな名前を入力してください、ただよくわからないのですが後から変更できないので注意して入力してください
create_timer.png

次に実行するコマンドの設定です
ニフティクラウド Timer では HTTP をコールすることができます
タイプに「HTTP」を選択します
すると「メソッド」「ヘッダー」「ボディ」を設定する欄が表示されるので、それぞれ入力します
入力する内容は Ruby で作成した curl のリクエスト情報をそのまま入力します
config_request.png

タイマーが実行された際にメール通知を飛ばすこともできます
失敗したときと成功したときで出し分けすることができるようです
また、メールアドレスはカンマ区切りで複数指定することも可能です
必要であれば設定しましょう
config_mail.png

問題なければ確認画面に遷移してタイマーを作成しましょう
確認画面では料金も表示されるので金額を確認して「作成する」を押してください

これでタイマーの作成は完了です

試しに実行してみる

ニフティクラウド Timer では作成したタイマーを手動で実行することができるので、試しに実行してみます

作成したタイマーを選択してプルダウンから「リクエスト実行」を選択します
確認のダイアログが出るのでチェックをONにして実行してみましょう

実行結果を確認する

実行すると特に何も起きていないかのようにタイマーの一覧に戻ります
問題なく実行できているか確認してみましょう
タイマーの右に詳細を確認するボタンがあるのでクリックします
すると「実行履歴」というタブが表示されるので確認します
ここに success と出ていれば問題なく NCMB にリクエストすることができています
confirm_result.png

今回の場合 success になっていれば問題なく NCMB にプッシュが登録されていることになるので、端末にプッシュが届いていると思います
もし届いていない場合は NCMB 側のプッシュの設定に問題がある可能性があるので、プッシュの設定やアプリの設定を見なおしてみてください

トラブルシュート

実行履歴で failure になった場合のトラブルシュートを紹介します
まずこの情報からだと何が原因でエラーになったのかさっぱりわかりません
実はレスポンスの詳細を確認する方法があります(非公式だと思いますが)
Firefox や Chrome を使っている方であれば、ブラウザのデバックツール (Firebug or デベロッパーツール) を使ってみましょう
これのネットワークを確認すると describe-history-instances という URI でレスポンスを確認することができ、ここで StatusCode を確認することができました
ただ、レスポンスボディまで確認することはできなかったので、ステータスコードだけで原因を切り分ける必要があります

今回のように HTTP のタイマーを設定した場合は、まずタイマーを経由しないで直接 HTTP をコールしてみましょう
問題なく通ることが確認できたらタイマーに設定して試してみるといいと思います

最後に

使ってみて感じたのはやはり実行結果が詳細に見れないのが辛かったです
エラーの詳細がわからない状態だと、Try & Error を何度も繰り返して正解にたどり着く必要があり、かなり yac shaving というか無駄なことをしている感じがしました

サービス的には IFTTT と同系列だと思います
ニフティクラウド Timer を使うメリットとしては、タイマーのタイプにニフティクラウドを操作できるタイプが標準で備わっていたので、その辺りのシナジーがあるといったところでしょうか
IFTTT でニフティクラウドのAPIをコールすれば同じことができるとは思いますが

0 件のコメント:

コメントを投稿