开发者控制台

步骤3: 适配 - 更新您的代码

步骤3: 适配 - 更新您的代码
1. 探索 - 了解您的选项 2. 选择 - 寻找解决方案 3. 适配 - 更新您的代码 4. 验证 - 测试您的应用 5. 推送 - 提交您的应用

Amazon Device Messaging (ADM)与Firebase Cloud Messaging (FCM)有相似之处,本指南将对此进行介绍。熟悉FCM会有助于您开始使用ADM。首先,下载ADM SDK用ADM设置您的Android Studio项目,然后继续执行以下步骤。

在此页面上,可以了解如何更新应用清单以与ADM兼容。

更新您的应用清单

要接收消息,必须更新AndroidManifest.xml文件。在使用FCM设置应用时,您可能扩展了FirebaseMessagingService类,并将子类作为服务添加到应用清单中。对于ADM,必须扩展三个ADM类,并将子类作为服务添加到清单中。有关这些类的描述,请参阅实现注册和消息处理。您还必须在清单文件中添加权限并显式启用ADM。以下说明详细介绍了如何进行这些更新。

  1. 打开AndroidManifest.xml文件并添加亚马逊命名空间:

    xmlns:amazon="http://schemas.amazon.com/apk/res/android"
    
  2. 要声明支持ADM所需的权限,请在manifest元素后面添加permissionuses-permission元素。

    <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发送的REGISTRATIONRECEIVE意图。ADM要求在AndroidManifest.xml文件中定义该接收器,而不是以编程方式定义。在amazon:enable-feature后面添加以下元素。

     <!-- You must replace the names in the service and receiver tags
         适合您程序包的名称。 -->D
    
     <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 android:name="[您的程序包名称]" />
         </intent-filter>
     </receiver>
    
  5. 更新AndroidManifest.xml文件后,您可以通过调用ADMManifest.checkManifestAuthoredProperly()来确认这些更改是否适合ADM。

    如果收到java.lang.NoClassDefFoundError: com.amazon.device.messaging.ADM错误,请检查清单,确认已将amazon:enable-feature元素添加到步骤3中指定的位置。

以下代码是为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密钥