開発者コンソール

手順3: 調整する - コードの更新

手順3: 調整する - コードの更新
1. 検討する - オプションの確認 2. 選択する - ソリューションの特定 3. 調整する - コードの更新 4. 検証する - アプリのテスト 5. 公開する - アプリの申請

Amazon Device Messaging(ADM)とFirebase Cloud Messaging(FCM)には複数の共通点があります。この共通点については、このガイドで説明します。ADMの実装を始めるにあたっては、FCMについて理解を深めておくと役立ちます。まず、ADM SDKをダウンロードし、Android StudioプロジェクトにADMをセットアップしてから、以下の手順に進んでください。

このページでは、アプリのマニフェストを更新してADMに対応させる方法について説明します。

アプリのマニフェストの更新

メッセージを受信するには、AndroidManifest.xmlファイルを更新する必要があります。アプリにFCMをセットアップした際に、FirebaseMessagingServiceクラスを拡張し、サブクラスをサービスとしてアプリのマニフェストに追加している可能性があります。ADMでは、3つのADMクラスを拡張し、サブクラスをサービスとしてマニフェストに追加する必要があります。各クラスの詳細については、登録とメッセージの処理の実装を参照してください。また、マニフェストファイルにパーミッションを追加して、明示的にADMを有効化することも必要です。以下の手順では、これらの更新を行う方法について詳しく説明します。

  1. AndroidManifest.xmlファイルを開き、以下に記載されたAmazonの名前空間を追加します。

    xmlns:amazon="http://schemas.amazon.com/apk/res/android"
    
  2. 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>
    
  3. 明示的に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"/>
    ...
    
  4. 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>
    
  5. 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キーの取得と保存に進みます。