本章节介绍当您自行接入厂商通道原生SDK时,如何使用移动推送需要的配置。
本文适用于 Android SDK 3.x 和 4.x。请根据实际使用的 SDK 版本,按照Android SDK接入完成主 SDK 初始化。
前言
除了使用EMAS已经提供的厂商通道SDK,您也可以自行接入厂商提供的通道SDK。
自行接入方式需要您完成厂商通道SDK的接入和初始化、厂商设备ID上报,以及消息接收处理,主要针对以下场景:
-
EMAS 提供的厂商通道 SDK 与应用中其他 SDK 发生依赖冲突。
-
EMAS未提供厂商通道某个SDK版本。
准备工作
-
已经按照Android SDK接入完成了移动推送SDK的接入。
第一步:将SDK添加到您的应用
在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle)中,在dependencies中添加SDK依赖。
-
请阅读Android SDK版本说明,依赖对应版本SDK。
dependencies {
implementation 'com.aliyun.ams:alicloud-android-third-push:x.x.x'
}
移动推送厂商通道SDK只支持maven方式依赖。
第二步:配置使用SDK
1 SDK初始化
请根据您要接入的厂商通道接入文档进行接入初始化。
2 上传厂商设备ID
在厂商通道初始化成功后,调用ThirdPushManager.reportToken()上传厂商设备ID:
/**
* 以华为为例
*
* @param context 上下文对象,建议传ApplicationContext
* @param thirdTokenKeyword 厂商设备ID的标识,下面做详细介绍
* @param token 厂商设备ID,厂商设备ID叫法不同,此处以token为统称
* @param thirdSdkVersion 实际集成的厂商原生Push SDK版本号,不是EMAS SDK版本号,无需自行添加厂商前缀
*/
ThirdPushManager.reportToken(context, ThirdPushReportKeyword.HUAWEI.thirdTokenKeyword, token, thirdSdkVersion);
3 注册厂商推送通知数据解码器
用户点击厂商推送通知后,辅助弹窗会接收处理推送数据,您需要注册对应的数据解码器。
// 如果是华为机型
ThirdPushManager.registerImpl(new HuaweiMsgParseImpl());
// 如果是荣耀机型
ThirdPushManager.registerImpl(new HonorParserImpl());
// 如果是小米机型
ThirdPushManager.registerImpl(new XiaoMiMsgParseImpl());
// 如果是vivo机型
VivoMsgParseImpl listener = new VivoMsgParseImpl();
listener.setContext(getApplicationContext());
ThirdPushManager.registerImpl(listener);
// 如果是OPPO机型
ThirdPushManager.registerImpl(new OppoMsgParseImpl());
// 如果是魅族机型
ThirdPushManager.registerImpl(new MeizuMsgParseImpl());
消息解码器支持HuaweiMsgParseImpl、HonorParserImpl、XiaoMiMsgParseImpl、OppoMsgParseImpl、VivoMsgParseImpl、MeizuMsgParseImpl。
4 处理厂商推送透传消息数据
在厂商通道接收到透传消息时,需要使用ThirdPushManager.onPushMsg把消息内容传到EMAS移动推送SDK进行处理。
/**
* 以华为为例
*
* @param context 上下文对象,建议传ApplicationContext
* @param thirdMsgKeyword 厂商消息的标识
* @param msgContent 厂商的消息内容
*/
ThirdPushManager.onPushMsg(context, ThirdPushReportKeyword.HUAWEI.thirdMsgKeyword, msgContent);
FCM 消息接收配置
自行接入 FCM 原生 SDK 时,除了上报 token,还需要实现 FirebaseMessagingService,在 onMessageReceived 中将 EMAS 消息交给移动推送 SDK 处理,并在 AndroidManifest.xml 中声明该 Service。
1 实现 FirebaseMessagingService
创建 MyFirebaseMessagingService,继承 FirebaseMessagingService。在 onNewToken 中上报 token;在 onMessageReceived 中读取 data 的 payload 字段,非空时通过 ThirdPushManager.onPushMsg 转交原始内容。FCM_SDK_VERSION 请填写实际集成的 firebase-messaging 版本号。
package com.example.push;
import android.text.TextUtils;
import com.alibaba.sdk.android.push.register.ThirdPushManager;
import com.alibaba.sdk.android.push.register.ThirdPushManager.ThirdPushReportKeyword;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
// 替换为应用实际集成的 firebase-messaging 版本号。
private static final String FCM_SDK_VERSION = "25.0.2";
@Override
public void onNewToken(String token) {
super.onNewToken(token);
ThirdPushManager.reportToken(getApplicationContext(),
ThirdPushReportKeyword.FCM.thirdTokenKeyword,
token, FCM_SDK_VERSION);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData() == null) {
return;
}
String payload = remoteMessage.getData().get("payload");
if (!TextUtils.isEmpty(payload)) {
ThirdPushManager.onPushMsg(getApplicationContext(),
ThirdPushReportKeyword.FCM.thirdMsgKeyword, payload);
}
}
}
如果应用已有 FirebaseMessagingService,请在现有 Service 的对应回调中补充上述逻辑,并保留原有业务处理。
2 在 AndroidManifest.xml 中声明 Service
在应用的 AndroidManifest.xml 的 application 节点中声明该 Service。将 android:name 替换为实际的 Service 类全名。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<service
android:name="com.example.push.MyFirebaseMessagingService"
android:process="@string/aliyun_accs_target_process"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>