本章节介绍如何集成移动推送提供的华为厂商通道SDK。
本文适用于 Android SDK 3.x 和 4.x。厂商平台准备和控制台配置可以共用;SDK 依赖版本、日志和通知点击处理请按实际版本选择。4.x 的迁移差异请参见Android SDK 4.x升级指南。
准备工作
-
已经按照对应版本的接入文档(3.x:Android SDK接入(3.x);4.x:Android SDK接入(4.x))完成了移动推送SDK的接入。
-
已经在华为开发者联盟注册了应用,如果没注册请登录华为开发者联盟,注册您的应用。然后在应用信息中获取APP ID和Client Secret。

-
已经在华为开发者联盟配置SHA256证书指纹。如未配置请参见华为官方文档配置AppGallery Connect。
-
已经在EMAS控制台配置了推送密钥,如未配置,请登录EMAS移动推送控制台,设置您的华为推送密钥(AppID、AppSecret、默认回执ID),设置方法参见配置厂商通道密钥。
说明EMAS控制台配置华为推送参数时需要的AppSecret是华为开发者联盟应用信息的Client Secret。
第一步:将SDK添加到您的应用
3.2.0 及以上版本的厂商通道扩展包以 AAR 包提供,组件声明通过 Manifest 自动合并。
1.1 配置Maven仓库
下面分别介绍Gradle 7.0及以上推荐的dependencyResolutionManagement配置方式和Gradle 7.0以下推荐的allprojects配置方式。
1.1.1 dependencyResolutionManagement方式
在您的根级(项目级)Gradle 文件(<project>/settings.gradle)中,在dependencyResolutionManagement的repositories中添加Maven仓库地址。
dependencyResolutionManagement {
repositories {
maven {
url 'https://developer.huawei.com/repo/'
}
}
}
1.1.2 allprojects方式
在您的根级(项目级)Gradle 文件(<project>/build.gradle)中,在allprojects的repositories中添加Maven仓库地址。
allprojects {
repositories {
maven {
url 'https://developer.huawei.com/repo/'
}
}
}
1.2 添加SDK依赖
在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle)中,在dependencies中添加SDK依赖。
-
请阅读Android SDK版本说明,下载对应版本SDK或获取最新SDK配置信息。
-
华为推送的2.X版本SDK将于2021年9月30日下线。为了避免推送受到影响,请尽快升级推送SDK及华为厂商通道SDK到3.2.4版本及以上。
-
华为推送在2023年9月15日起对本地通知纳入每天通知条数的管控,请升级推送SDK到3.7.0及以上版本,请参见相关文档华为推送服务管控新规及适配。
请将以下示例中的 x.x.x 分别替换为发布说明中与主 SDK 配套的辅助通道 SDK 和厂商扩展包版本号。
dependencies {
implementation 'com.aliyun.ams:alicloud-android-third-push:x.x.x'
implementation 'com.aliyun.ams:alicloud-android-third-push-huawei:x.x.x'
}
第二步:配置使用SDK
2.1 配置AppID
在应用级的AndroidManifest.xml文件下的application节点下添加meta-data来配置AppID。
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="appid=您的华为AppID" />
2.2 SDK初始化
在 Application 中完成移动推送 SDK 初始化后,再初始化厂商通道 SDK。
通过如下方式进行初始化:
// 注册方法会自动判断是否支持华为系统推送,如不支持会跳过注册。
HuaWeiRegister.register(application);// 注册方法会自动判断是否支持华为系统推送,如不支持会跳过注册。
HuaWeiRegister.register(application)注册方法会自动判断是否支持华为系统推送,如不支持,则会跳过注册。
2.3 混淆配置
如果集成推送SDK的工程开启了代码混淆,需要添加以下厂商通道的ProGuard配置。
# 华为通道
-keep class com.huawei.** {*;}
-dontwarn com.huawei.**
第三步:接入验证
1 打开 SDK 日志(3.x/4.x)
在调试包中,先完成 PushServiceFactory.init,再执行以下日志配置,并将配置放在移动推送 register 和厂商通道注册之前。排查 4.x 底层连接问题时,请在启动注册前设置日志级别。
CloudPushService pushService = PushServiceFactory.getCloudPushService();
//仅适用于Debug包,正式包不需要此行
pushService.setLogLevel(CloudPushService.LOG_DEBUG); val pushService = PushServiceFactory.getCloudPushService()
//仅适用于Debug包,正式包不需要此行
pushService.setLogLevel(CloudPushService.LOG_DEBUG)setDebug(true) 用于开启接入组件和参数检查,不负责开启 DEBUG 日志;需要查看详细日志时,请显式调用 setLogLevel(CloudPushService.LOG_DEBUG)。
2 查看注册结果
SDK 4.x
以下日志关键字以 SDK 4.0.0 为例。在 Logcat 中按 TAG EMAS_PUSH 过滤,再按日志正文中的模块名和关键字定位。方括号中的模块名属于日志正文,不是独立 TAG。
在正文中查找 [HuaWeiRegister] onToken appId: 或 [HuaweiPushMessageService] onToken token:,并确认记录中的 token 非空。register begin 只表示开始注册。
如果出现 getToken failed. 或 onTokenError,请结合错误码和华为原生 SDK 日志排查。
取得有效厂商 token 后,请继续确认向 EMAS 的上报结果,并通过控制台或 OpenAPI 发送测试通知,验证展示和点击。
移动推送 SDK 日志使用 EMAS_PUSH;厂商原生 SDK、Android 系统和应用日志请按各自的 TAG 查询。
更多日志配置说明,请参见 Android SDK 4.x 日志配置。
SDK 3.x
以下日志关键字和截图适用于 SDK 3.x。
华为通道初始化成功,可以看到以下日志:

第四步:回执配置
请参见厂商通道消息回执最佳实践中的华为配置指引,完成回执配置。
使用辅助弹窗后,华为通道的到达率统计覆盖用户点击华为弹窗推送通知的场景,未点击部分暂未覆盖,您可在华为端设置消息回执,便于移动推送更好地统计推送数据。
开通回执需配置回调地址:https://amspush-ack.aliyuncs.com/hw/。
若配置了多个回调地址,需要将上述回调地址对应的配置设为默认回执,或者将回执ID配置到控制台的默认回执ID中。
后续步骤
SDK 3.x:厂商通道通知点击后的业务逻辑通过辅助弹窗处理,接入方式请参见辅助弹窗接入(3.x)。
SDK 4.x:仍需配置辅助弹窗 Activity 作为厂商通知点击的中转入口,业务处理改到 MessageReceiver.onNotificationOpened 或 AliyunMessageIntentService.onNotificationOpened,不再实现 onSysNoticeOpened 等旧版业务回调。请按辅助弹窗接入(4.x)完成点击处理。
Android SDK 4.x 中,MessageReceiver 和 AliyunMessageIntentService 的业务回调范围如下:
ACCS 自有通道和 FCM:支持消息接收(onMessage)、通知到达(onNotification)、通知点击(onNotificationOpened)、通知清除(onNotificationRemoved)等完整业务回调。
除 FCM 外的其他 Android 厂商通道:仅支持 onNotificationOpened(通知点击),不触发消息接收、通知到达、通知清除等其他回调。
-
使用移动推送进行厂商通道推送时(使用移动推送控制台或者OpenAPI进行推送时),服务端必须参考辅助弹窗文档进行服务端配置,若服务端参数不设置,不会给厂商通道进行推送。
厂商通道常见问题
按需获取厂商 Token(4.x)
从对应厂商扩展包 4.0.0 起,可通过 getToken 读取本地最近一次保存的华为 Token。此接口用于按需查询 Token,属于可选功能。
所属类:com.alibaba.sdk.android.push.huawei.HuaWeiRegister。
接口定义
public static String getToken(Context context);
参数:context(Context),传入有效的应用上下文,推荐使用 ApplicationContext。示例中的 context 为应用已获取的有效 Context。
返回值:String;本地未保存 Token 或 context 为 null 时返回 null,Kotlin 按 String? 处理。此接口读取本地缓存,不刷新 Token。Token 的上报结果请结合 SDK 上报日志和控制台设备信息检查。
代码示例
String token = HuaWeiRegister.getToken(context);
if (token == null || token.isEmpty()) {
// 尚未保存华为 Token,可在厂商通道取得并保存 Token 后再次查询。
} else {
// 按业务需要使用已保存的 token。
}val token: String? = HuaWeiRegister.getToken(context)
if (token.isNullOrEmpty()) {
// 尚未保存华为 Token,可在厂商通道取得并保存 Token 后再次查询。
} else {
// 按业务需要使用已保存的 token。
}