步骤3: 适配 - 更新您的代码
Amazon Device Messaging (ADM) 与Firebase Cloud Messaging (FCM) 有相似之处,本指南将对此进行介绍。熟悉FCM会有助于您开始使用ADM。首先,下载ADM SDK,用ADM设置您的Android Studio项目,然后继续执行以下步骤。
在此页面上,可以了解如何更新应用清单以与ADM兼容。
更新您的应用清单
要接收消息,必须更新AndroidManifest.xml文件。在使用FCM设置应用时,您可能扩展了FirebaseMessagingService
类,并将子类作为服务添加到应用清单中。对于ADM,必须扩展三个ADM类,并将子类作为服务添加到清单中。有关这些类的描述,请参阅实现注册和消息处理。您还必须在清单文件中添加权限并显式启用ADM。以下说明详细介绍了如何进行这些更新。
-
打开AndroidManifest.xml文件并添加亚马逊命名空间:
xmlns:amazon="http://schemas.amazon.com/apk/res/android"
-
要声明支持ADM所需的权限,请在
manifest
元素后面添加permission
和uses-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>
-
显式启用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
意图。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>
-
更新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密钥。
Last updated: 2022年3月24日