
Kindle Fireでの一般的な実装方法
Kindle Fire にアプリへプッシュ通知を実装し、プッシュトークンを得るための実装方法をご紹介します。
Kindle Fire では Amazon Cloud Messaging の SDK を導入する必要があります。
Amazon アプリ・ゲームサービス SDK のダウンロード
Amazon アプリ・ゲームサービス SDK のページへアクセスします。
ページからリンクされている「プログラム材料ライセンス規約」への同意が必要なのでご確認の上、Android 用の SDK をダウンロードします。
プロジェクトへライブラリの追加
ZIP ファイルを展開するとサービス事にSDKが含まれています。AmazonDeviceMessaging
ディレクトリにある amazon-device-messaging-(バージョン).jar
ファイルが必要となります。
このファイルを Android Studio のプロジェクトへ追加します。Project ウィンドウを[Project Files]モードに切り替え、app フォルダを選択し、[Show in Explorer]もしくは[Reveal in Finder]を選択して、app フォルダの実体を開きます。
次に、appフォルダ内にあるlibsフォルダに、amazon-device-messaging-(バージョン).jar
ファイルをコピーします。
Android Studio に戻ると、Project ウィンドウの app フォルダ以下に libs フォルダが追加され、amazon-device-messaging-(バージョン).jar
ファイルが追加されます。amazon-device-messaging-(バージョン).jar
ファイルを右クリックし、[Add As Library…]を選択します。
次に、Project ウィンドウを[Android]に切り替え、Gradle Scripts という項目からアプリの設定を開きます。ここで Project と書かれた方がプロジェクト全体の設定、Module: app と書かれた方がアプリの設定となります。以下の行を探します。(implementationではなく、compileになっている場合もあります。)
1implementation files('libs/amazon-device-messaging-(バージョン).jar')
この行を以下のように、provided に変更します。
1provided files('libs/amazon-device-messaging-(バージョン).jar')
マニフェストにパーミッションを追加する
AndroidManifest.xml を開き、以下のように編集します。
1<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:amazon="http://schemas.amazon.com/apk/res/android" <---- 追加します。
3 package="[パッケージ名]"
4 android:versionCode="1"
5 android:versionName="1.0">
6
7 <!-- 以下の4行を追加します -->
8 <permission android:name="[パッケージ名].permission.RECEIVE_ADM_MESSAGE" android:protectionLevel="signature" />
9 <uses-permission android:name="[パッケージ名].permission.RECEIVE_ADM_MESSAGE" />
10 <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />
11 <uses-permission android:name="android.permission.WAKE_LOCK" />
12
13 <!-- (中略) -->
14
15 <application ...>
16 <!-- ADM を有効にします。requiredをtrueにした場合、ADMが使用できない場合はアプリを起動できなくなります。-->
17 <amazon:enable-feature android:name="com.amazon.device.messaging" android:required="false"/>
18
19 <!-- (中略) -->
20 </application>
21
22</manifest>
受信サービスを記述する
トークン・プッシュメッセージを受信した際に起動するサービスを実装します。ADMMessageHandlerBase
を継承したサービスを作成します。トークンの受信時に onRegistered
が呼ばれますのでこの中でサーバーへの登録処理を行います。また、通知が受信されるとonMessage
が呼ばれます。この中でNotificationクラスを使うなどしてユーザーに通知を提示します。
1package jp.co.fenrir.pushsample;
2
3import android.content.Intent;
4import android.os.Bundle;
5
6import com.amazon.device.messaging.ADMMessageHandlerBase;
7
8public class ADMMessengerHandler extends ADMMessageHandlerBase {
9
10 public ADMMessengerHandler(String s) {
11 super(s);
12 }
13
14 @Override
15 protected void onMessage(Intent intent) {
16 // メッセージ受信時の動作
17
18 // 通知ペイロードに含めたデータがextrasに入っています
19 Bundle extras = intent.getExtras();
20 }
21
22 @Override
23 protected void onRegistered(String registrationId) {
24 // 登録完了時の処理を記述します
25 // TODO registrationId (トークン) をサーバーへ送信します
26 }
27
28 @Override
29 protected void onUnregistered(String registrationId) {
30 // 登録解除時の処理を記述します
31 }
32
33 @Override
34 protected void onRegistrationError(String errorMessage) {
35 // 登録失敗時のエラー処理
36 }
37}
AndroidManifest.xml には以下のように記述して登録します。
1<service android:name=".ADMMessengerHandler" android:exported="false" />
受信ハンドラクラスを作成する
ADM から受け取ったメッセージを受信サービスへ中継するインテントレシーバーを作成します。これは、ADMMessageReceiver
を継承し、先ほど作成した ADMMessageHandlerBase
の派生クラスをコンストラクタで指定します。
1package jp.co.fenrir.pushsample;
2
3import com.amazon.device.messaging.ADMMessageReceiver;
4
5public class ADMMessageHandlerReceiver extends ADMMessageReceiver {
6 public ADMMessageHandlerReceiver() {
7 super(ADMMessengerHandler.class);
8 }
9}
AndroidManifest.xmlには以下のように記述して登録します。
1<receiver android:name=".ADMMessageHandlerReceiver"
2 android:permission="com.amazon.device.messaging.permission.SEND">
3 <intent-filter>
4 <action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
5 <action android:name="com.amazon.device.messaging.intent.RECEIVE" />
6 <category android:name="[パッケージ名]"/>
7 </intent-filter>
8</receiver>