技術と趣味の亜空間

主にゲームプログラミングとその周辺に関する記事を不定期で上げていきます

Amazon Device Messaging の JobService名には何を指定すれば良い?

Amazon Logo

概要

Amazonアプリストア専用のプッシュ通知サービス「Amazon Device Messaging」(ADM) の更新をする際にAndroidManifestのJobService名の指定について躓いた点をメモっておきます。
ちなみにADMはFireタブレットをサポートする際に利用するやつです。

JobService名の指定について

基本的には公式のドキュメントに従えば導入できますが説明不足の部分があり、それは
アプリの統合方法 に突然現れる、AndroidManifestに記載しないといけない以下の記述です。

 <service
     android:name="[JobService名]"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" />

これは ADMMessageHandlerJobBase を継承した自作クラスを指定します。
ここでJobService名を記載しますが、前後に解説はありません(後でリリースノートに記載されていることを発見。なんで更新履歴のページなんだ……。しかも内容を見ると自分で JobIntentService クラスを別途作成する必要がありそうな雰囲気ですが、その必要はないです)
また、Android StudioだとManifest上のシンタックスハイライトでエラーが表示されますが無視で大丈夫です。(気になるならignore設定すればよいかと)
このエラーで駄目なのかと思い、さらに無駄に時間を喰らってしまった…

公式ドキュメントのサンプルクラス名に従えば、最終的に以下のような命名になります。

 <service
     android:name=".MyADMMessageHandler"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" />

これで通知が飛ぶようになると思います。参考になれば幸いです。

おまけ

以下はADM実装で必要な部分を抽出したAndroidManifestや各種クラスです。
com.your.packagenameの部分やversionCode等は適宜各々のプロジェクトに合わせて修正していただければと。

AndroidManifest

MyADMMessageHandler.java

レシーバーから受け取ったプッシュ通知のデータを制御するハンドラークラスです。
MyADMLegacyMessageHandler.java は古いOSをサポートする際に必要ですが、実装内容は下記コードとほぼ同じ感じになると思います。
サンプルコードが公式ドキュメントの「アプリの統合方法」にて、「古いまたはアップデートされていないデバイスで下位互換を維持するためのバージョン」欄のタブを開くと書かれているのでここでは省略します。

MyADMReceiver.java

ハンドラーへ通知させるためのレシーバークラスです。

AmazonAmazon.co.jpおよびそれらのロゴは、Amazon.com, Inc.または その関連会社の商標または登録商標です。