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になっている場合もあります。)

1
implementation files('libs/amazon-device-messaging-(バージョン).jar') 

この行を以下のように、provided に変更します。

1
provided files('libs/amazon-device-messaging-(バージョン).jar') 

マニフェストにパーミッションを追加する

AndroidManifest.xml を開き、以下のように編集します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:amazon="http://schemas.amazon.com/apk/res/android"      <---- 追加します。
   package="[パッケージ名]"
   android:versionCode="1"
   android:versionName="1.0">

  <!-- 以下の4行を追加します -->
  <permission android:name="[パッケージ名].permission.RECEIVE_ADM_MESSAGE" android:protectionLevel="signature" />
  <uses-permission android:name="[パッケージ名].permission.RECEIVE_ADM_MESSAGE" />
  <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />

  <!-- (中略) -->

  <application ...>
    <!-- ADM を有効にします。requiredをtrueにした場合、ADMが使用できない場合はアプリを起動できなくなります。-->
    <amazon:enable-feature android:name="com.amazon.device.messaging" android:required="false"/>

    <!-- (中略) -->
  </application>

</manifest>

受信サービスを記述する

トークン・プッシュメッセージを受信した際に起動するサービスを実装します。ADMMessageHandlerBase を継承したサービスを作成します。トークンの受信時に onRegistered が呼ばれますのでこの中でサーバーへの登録処理を行います。また、通知が受信されるとonMessageが呼ばれます。この中でNotificationクラスを使うなどしてユーザーに通知を提示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package jp.co.fenrir.pushsample;

import android.content.Intent;
import android.os.Bundle;

import com.amazon.device.messaging.ADMMessageHandlerBase;

public class ADMMessengerHandler extends ADMMessageHandlerBase {

    public ADMMessengerHandler(String s) {
        super(s);
    }

    @Override
    protected void onMessage(Intent intent) {
        // メッセージ受信時の動作

        // 通知ペイロードに含めたデータがextrasに入っています
        Bundle extras = intent.getExtras();
    }

    @Override
    protected void onRegistered(String registrationId) {
        // 登録完了時の処理を記述します
        // TODO registrationId (トークン) をサーバーへ送信します
    }

    @Override
    protected void onUnregistered(String registrationId) {
        // 登録解除時の処理を記述します
    }

    @Override
    protected void onRegistrationError(String errorMessage) {
        // 登録失敗時のエラー処理
    }
}

AndroidManifest.xml には以下のように記述して登録します。

1
<service android:name=".ADMMessengerHandler" android:exported="false" />

受信ハンドラクラスを作成する

ADM から受け取ったメッセージを受信サービスへ中継するインテントレシーバーを作成します。これは、ADMMessageReceiver を継承し、先ほど作成した ADMMessageHandlerBase の派生クラスをコンストラクタで指定します。

1
2
3
4
5
6
7
8
9
package jp.co.fenrir.pushsample;

import com.amazon.device.messaging.ADMMessageReceiver;

public class ADMMessageHandlerReceiver extends ADMMessageReceiver {
    public ADMMessageHandlerReceiver() {
        super(ADMMessengerHandler.class);
    }
}

AndroidManifest.xmlには以下のように記述して登録します。

1
2
3
4
5
6
7
8
<receiver android:name=".ADMMessageHandlerReceiver" 
    android:permission="com.amazon.device.messaging.permission.SEND">
    <intent-filter>
       <action android:name="com.amazon.device.messaging.intent.REGISTRATION" /> 
       <action android:name="com.amazon.device.messaging.intent.RECEIVE" /> 
       <category android:name="[パッケージ名]"/>
    </intent-filter>
</receiver>       

ご不明な点はありませんか?

機能の詳細、導入のご検討、お見積もり依頼などは、お気軽にお問い合わせください。
担当者から追ってご連絡いたします。

お問い合わせはこちら