手順3: 調整する - コードの更新
Amazon Device Messaging(ADM)とFirebase Cloud Messaging(FCM)には複数の共通点があります。この共通点については、このガイドで説明します。ADMの実装を始めるにあたっては、FCMについて理解を深めておくと役立ちます。まず、ADM SDKをダウンロードし、Android StudioプロジェクトにADMをセットアップしてから、以下の手順に進んでください。
このページでは、アプリのマニフェストを更新してADMに対応させる方法について説明します。
アプリのマニフェストの更新
メッセージを受信するには、AndroidManifest.xmlファイルを更新する必要があります。アプリにFCMをセットアップした際に、FirebaseMessagingService
クラスを拡張し、サブクラスをサービスとしてアプリのマニフェストに追加している可能性があります。ADMでは、3つのADMクラスを拡張し、サブクラスをサービスとしてマニフェストに追加する必要があります。各クラスの詳細については、登録とメッセージの処理の実装を参照してください。また、マニフェストファイルにパーミッションを追加して、明示的にADMを有効化することも必要です。以下の手順では、これらの更新を行う方法について詳しく説明します。
-
AndroidManifest.xmlファイルを開き、以下に記載されたAmazonの名前空間を追加します。
xmlns:amazon="http://schemas.amazon.com/apk/res/android"
-
ADMのサポートに必要なパーミッションを宣言するには、
permission
要素とuses-permission
要素をmanifest
要素の後に追加します。<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"> <!-- このパーミッションにより、ADMメッセージがほかのアプリにインターセプトされることがなくなります。 --> <permission android:name="[パッケージ名].permission.RECEIVE_ADM_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="[パッケージ名].permission.RECEIVE_ADM_MESSAGE" /> <!-- このパーミッションにより、ADMからのプッシュ通知をアプリが受信できるようになります。 --> <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" /> <!-- メッセージ受信時にプロセッサがスリープ状態になるのを防ぐため、ADMはWAKE_LOCKを使用します。 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> ... </manifest>
-
明示的にADMを有効化し、アプリにADMが必要(
android:required="true"
)か、ADMがなくても動作する(android:required="false"
)か宣言します。ここでandroid:required="false"
を指定した場合、ADMが利用できないときにアプリの機能が適切に制限されるようにする必要があります。マニフェストのapplication
ノードで、amazon:enable-feature
要素を追加します。... <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <!-- 明示的にADMを有効化し、アプリにADMが必要 (android:required="true")か、ADMがなくても動作する(android:required="false")かを宣言します。 ここでandroid:required="false"を指定した場合、ADMが利用できないときにアプリの機能が 適切に制限されるようにする必要があります。 --> <amazon:enable-feature android:name="com.amazon.device.messaging" android:required="true"/> ...
-
ADMから送信される
REGISTRATION
インテントとRECEIVE
インテントを処理するために、ブロードキャストレシーバーを宣言します。レシーバーは、プログラムではなくAndroidManifest.xmlファイルで定義する必要があります。amazon:enable-feature
の直後に、以下の要素を追加します。<!-- serviceタグとreceiverタグ内のname値は、パッケージで使用する 適切な名前に置き換えてください。 --> <service android:name="[JobService名]" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" /> <!-- これはADMの旧バージョンを使用しているデバイスで必要です --> <service android:name="[サービス名]" android:exported="false" /> <receiver android:name="[レシーバー名]" <!-- このパーミッションにより、ADMのみがアプリ登録ブロードキャストを送信できます。 --> android:permission="com.amazon.device.messaging.permission.SEND" > <!-- アプリがADMとやり取りを行うには、以下のインテントをリッスンする必要があります。 --> <intent-filter> <action android:name="com.amazon.device.messaging.intent.REGISTRATION" /> <action android:name="com.amazon.device.messaging.intent.RECEIVE" /> <!-- categoryタグ内のname値をアプリのパッケージ名に置き換えます。 --> <category android:name="[パッケージ名]" /> </intent-filter> </receiver>
-
AndroidManifest.xmlファイルの更新後、
ADMManifest.checkManifestAuthoredProperly()
を呼び出して、変更が適切かどうかを確認します。java.lang.NoClassDefFoundError: com.amazon.device.messaging.ADM
エラーが発生した場合は、マニフェストを調べて、手順3で指定された場所にamazon:enable-feature
要素が追加されていることを確認します。
以下のコードは、ADMに対応したAndroidManifest.xmlファイルの一例です。
<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" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" />
<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
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<amazon:enable-feature
android:name="com.amazon.device.messaging"
android:required="true"/>
<service
android:name="[JobService名]"
android:permission=“android.permission.BIND_JOB_SERVICE”
android:exported="false" />
<!-- これはADMの旧バージョンを使用しているデバイスで必要です -->
<service
android:name="[サービス名]"
android:exported="false" />
<receiver
android:name="[レシーバー名]"
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>
</application>
</manifest>
次のステップ
次の APIキーの取得と保存に進みます。
Last updated: 2022年3月24日