まめージェント

Android, GAE, AngularJSの技術ネタ中心。Twitter: @mame01112

GCM PushのInstanceIDListenerService (onTokenRefresh)を手動でテストする方法

GCMのPush通知を実装しているAndroidアプリであればトークンが切り替わったタイミングを知ることができる
InstanceIDListenerServiceを継承したクラスを作ると思いますが、
今回はそのテスト方法に関して。

そもそもの背景

InstanceIDListenerServiceのonTokenRefreshは、正式なドキュメントにもある通り、
"Called when the system determines that the tokens need to be refreshed"とのこと。
「システムがトークンを更新する必要があると判断した場合に呼ばれます」・・・っていつだ、という話なので、
今回、この部分のテストのコマンドを調べました。

また、そもそもGCM Pushをやる方法に関しては、別の記事で書こうと思います。

テストのやり方

Step 1: 準備

基本的にInstanceIDListenerServiceは、AndroidManifest内でandroid:exported="false"に設定しているはずなので、
(でないと、外部からこのサービスを叩けてしまう)
テストのときのみ、このandroid:exported="false"をandroid:exported="true"に切り替えます。
※本当はもう少しいい方法があるのかもしれませんが、僕はそのやり方を見つけられず・・・。

Step 2: テスト実行

コマンドは、adb shellで行います。
コマンドプロンプトから下記のコマンドを叩いてください。

db shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n com.your.package/com.your.package.to.InstanceIDListenerService

もちろん、com.your.packageはご自身のパッケージ名に変えてください。
com.your.package.to.InstanceIDListenerServiceの部分は、
InstanceIDListenerServiceまでのフルパッケージを記載するとうまくいきました。

以上、GCM PushのInstanceIDListenerServiceをテストする方法でした!