前回のiOSに続いて、今回はAndroid端末におけるプッシュ通知のデバッグ法を紹介します。Androidにおいてもプッシュ通知を送ったのに届かない、記載に何かミスがあると言ったことはよくあるので、まずローカルでテストしてみるとエラーの切り分けにつながるはずです。
前提条件
APIキーを設定し、データストアにデバイストークンが登録されていることとします。そこまでの流れ(GCMの設定やAndroidアプリ側でのコーディングなど)についてはプッシュ通知 (Android) : 基本的な使い方 | ニフティクラウド mobile backendを参照してください。
Rubyライブラリのインストール
Rubygemsで配信されているGCMというライブラリを使います。
gem install gcm
サンプルコード
以下のようなサンプルコードを書きます。
require 'gcm' API_KEY="YOUR_API_KEY" gcm = GCM.new(API_KEY) registration_ids = [ 'YOUR_DEVICE_TOKEN' ] option = { :data => {'message' => 'プッシュ通知のテスト'} } response = gcm.send_notification(registration_ids, option) if response[:body] puts JSON.parse(response[:body]) end
ここで、YOUR_API_KEYはmBaaSの管理画面で、アプリ設定のプッシュ通知より取得できます。
また、YOUR_DEVICE_TOKENはデータストアのInstallation、deviceTokenの欄から取得できますのでそれぞれ書き換えてください。
プッシュ通知を送信する
後はこのスクリプトを実行するだけです。
$ ruby push-android.rb {"multicast_id"=>7664310508036817667, "success"=>1, "failure"=>0, "canonical_ids"=>0, "results"=>[{"message_id"=>"0:1470302066740542%02027697f9fd7ecd"}]}
このようにsuccessが1となっていれば問題ありません。
例えばAPIキーが間違っていると次のようになります。
$ ruby push-android.rb json/common.rb:156:in `parse': 784: unexpected token at '<HTML> (JSON::ParserError) <HEAD> <TITLE>Unauthorized</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Unauthorized</H1> <H2>Error 401</H2> </BODY> </HTML> ' from json/common.rb:156:in `parse' from push-android.rb:14:in `<main>'
また、デバイストークンが不正な場合は次のようになります。
$ ruby push-android.rb {"multicast_id"=>5700894011667254369, "success"=>0, "failure"=>1, "canonical_ids"=>0, "results"=>[{"error"=>"InvalidRegistration"}]}
このようにしてローカルで試すことでエラーの確認がしやすくなります。何かおかしいと思った時にはローカルで試してみてください。