本文介绍华为推送的接入流程,主要包括以下三个步骤。
注册华为推送
登录华为开发官网,注册账号并且开启推送服务。详情请参见 华为推送开启步骤。
接入华为推送
推送 SDK 支持接入华为 HMS2 和 HMS5,但二者只能择其一接入。
HMS2 版本过旧,如果您是首次接入,推荐接入 HMS5。
如果您是从 HMS2 升级到 HMS5,请先删除下文列出的 HMS2
AndroidManifest
配置。
接入华为推送 - HMS5.x 版本
添加 推送 - HMS5 组件,方式与添加推送 SDK 相同,参见 添加推送 SDK 。
说明推送 - HMS5 组件仅包含适配代码,不包含 HMS SDK,请按照下文单独添加 HMS SDK 依赖。
在华为应用服务控制台下载配置文件
agconnect-services.json
并放置到应用主工程的assets
目录下。在项目根目录下的
build.gradle
文件中配置 HMS SDK 的 Maven 仓地址。allprojects { repositories { // 其他repo已省略 maven {url 'https://developer.huawei.com/repo/'} } }
在主工程的
build.gradle
文件中添加 HMS SDK 依赖。dependencies { implementation 'com.huawei.hms:push:5.0.2.300' }
HMS SDK 版本会经常更新,最新版本号可以参考 HMS SDK 版本更新说明。
当前适配的版本为 5.0.2.300,如需使用更高版本,可根据需求修改,通常来说厂商 SDK 都会向下兼容,如不兼容可加入钉钉群 41708565 反馈适配新版的需求。
如需使用混淆,则要添加相关混淆配置:
所有接入方式均需要添加 华为推送混淆规则。
如采用的是 AAR 接入方式,还需要 添加 mPaaS 混淆规则。
接入华为推送 - HMS2.x 版本
添加 推送 - 华为2 组件,方式与添加推送 SDK 相同,参见 添加 SDK 。 当前内置的 HMS2 SDK 版本为 2.5.2.201。
配置
AndroidManifest.xml
(组件化方式在 Portal 工程中添加),并替换其中的com.huawei.hms.client.appid
的值。<activity android:name="com.huawei.hms.activity.BridgeActivity" android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale" android:excludeFromRecents="true" android:exported="false" android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent"> <meta-data android:name="hwc-theme" android:value="androidhwext:style/Theme.Emui.Translucent" /> </activity> <!--为了防止低版本 dex 崩溃,动态开启 provider,enabled 设置为 false--> <provider android:name="com.huawei.hms.update.provider.UpdateProvider" android:authorities="${applicationId}.hms.update.provider" android:exported="false" android:enabled="false" android:grantUriPermissions="true"> </provider> <!-- value 的值“appid”用实际申请的应用 ID 替换,来源于开发者联盟网站应用的服务详情。注意,value 中的斜杠(\)及空格要保留。--> <meta-data android:name="com.huawei.hms.client.appid" android:value="\ your huawei appId" /> <receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver" android:exported="true" > <intent-filter> <!-- 接收通道发来的通知栏消息,兼容老版本 PUSH --> <action android:name="com.huawei.intent.action.PUSH" /> </intent-filter> </receiver> <receiver android:name="com.alipay.pushsdk.thirdparty.huawei.HuaweiPushReceiver" android:exported="true" android:process=":push"> <intent-filter> <!-- 必须,用于接收 TOKEN --> <action android:name="com.huawei.android.push.intent.REGISTRATION" /> <!-- 必须,用于接收消息 --> <action android:name="com.huawei.android.push.intent.RECEIVE" /> <!-- 可选,用于点击通知栏或通知栏上的按钮后触发 onEvent 回调 --> <action android:name="com.huawei.android.push.intent.CLICK" /> <!-- 可选,查看 PUSH 通道是否连接,不查看则不需要 --> <action android:name="com.huawei.intent.action.PUSH_STATE" /> </intent-filter> </receiver>
如需使用混淆,则要添加相关混淆配置:
如采用的是 AAR 接入方式,需要 添加 mPaaS 混淆规则。
如采用其他接入方式,则无需添加。
测试华为推送
接入华为推送后,您可以在华为手机上启动应用并确保调用了初始化方法(参见 消息推送初始化),推送 SDK 会自动获取华为推送的厂商 token 并上报。
您可以在杀掉应用进程的情况下推送测试消息:
如果仍然能收到消息,说明您的应用成功接入华为推送。
如果不能收到消息,请按照下文进行问题排查。
排查问题
检查华为配置和参数是否和华为推送后台一致:
接入 HMS2 请检查
AndroidManifest.xml
中相关配置是否添加,com.huawei.hms.client.appid
是否和华为推送后台一致。接入 HMS5 请检查
agconnect-services.json
是否存在,存放位置是否正确。
检查 mPaaS 控制台是否开启了华为通道(参见 配置华为推送渠道),以及相关配置是否和华为推送后台一致。
查看 logcat 日志进行排查:
选择 push 进程,过滤
mPush.PushProxyFactory
,检查是否存在以下日志:D/mPush.PushProxyFactory: found proxy com.mpaas.push.external.hms.Creator (HMS2) D/mPush.PushProxyFactory: found proxy com.mpaas.push.external.hms5.Creator (HMS5)
若无,说明添加 推送 - 华为2 或 推送 - HMS5 组件可能存在问题,请确认是否正确添加。
选择主进程,过滤
mHMS
,检查是否获取到了华为推送的厂商 token,如出现日志get token failed
:说明获取华为厂商 token 失败,错误码参见 华为推送错误码。选择主进程,过滤
report channel token
, 检查上报华为厂商 token 是否成功,如出现以下日志:report channel token error: xxxx
说明上报厂商 token 失败,请检查 mPaaS 配置文件 的
base64Code
是否有值,以及获取配置文件时上传的 apk 签名和当前应用是否一致。
其他问题
对 EMUI 和华为移动服务是否有版本限制
对 Emotion UI(简称 EMUI,是华为基于 Android 进行开发的情感化操作系统)和华为移动服务有版本限制,详细版本要求请参见 设备接收华为推送消息的条件。
华为手机无法打印日志
在手机拨号界面输入 *#*#2846579#*#* 进入工程菜单 > 后台设置 > LOG 设置 > 选中 AP 日志。重启手机后,logcat 开始生效。