阿里云首页 移动开发平台 mPaaS

华为推送

本文主要介绍华为推送的接入流程,主要包括以下步骤:

  1. 注册华为推送
  2. 接入华为推送
  3. 测试华为推送

注册华为推送

登录华为开发官网,注册账号并且开启推送服务。详情请参见 华为推送开启步骤

接入华为推送

推送 SDK 支持接入华为 HMS2 和 HMS5,但二者只能择其一接入。

  • HMS2 版本过旧,如果您是首次接入,推荐接入 HMS5。
  • 如果您是从 HMS2 升级到 HMS5,请先删除下文列出的 HMS2 AndroidManifest 配置。

接入华为推送 - HMS5.x 版本

  1. 添加 推送 - HMS5 组件,方式与添加推送 SDK 相同,参见 添加 SDK
    说明推送 - HMS5 组件仅包含适配代码,不包含 HMS SDK,请按照下文单独添加 HMS SDK 依赖。
  2. 在华为应用服务控制台下载配置文件 agconnect-services.json 并放置到应用主工程的 assets 目录下。
  3. 在项目根目录下的 build.gradle 文件中配置 HMS SDK 的 Maven 仓地址。
    1. allprojects {
    2. repositories {
    3. // 其他repo已省略
    4. maven {url 'https://developer.huawei.com/repo/'}
    5. }
    6. }
  4. 在主工程的 build.gradle 文件中添加 HMS SDK 依赖。

    1. dependencies {
    2. implementation 'com.huawei.hms:push:5.0.2.300'
    3. }
    • HMS SDK 版本会经常更新,最新版本号可以参考 HMS SDK 版本更新说明
    • 当前适配的版本为 5.0.2.300,如需使用更高版本,可自行修改,通常来说厂商 SDK 都会向下兼容,如不兼容可提交工单反馈适配新版的需求。
  5. 如需使用混淆,则要添加相关混淆配置:

接入华为推送 - HMS2.x 版本

  1. 添加 推送 - 华为2 组件,方式与添加推送 SDK 相同,参见 添加 SDK
    当前内置的 HMS2 SDK 版本为 2.5.2.201。
  2. 配置 AndroidManifest.xml (组件化方式在 Portal 工程中添加),并替换其中的 com.huawei.hms.client.appid 的值。

    1. <activity
    2. android:name="com.huawei.hms.activity.BridgeActivity"
    3. android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale"
    4. android:excludeFromRecents="true"
    5. android:exported="false"
    6. android:hardwareAccelerated="true"
    7. android:theme="@android:style/Theme.Translucent">
    8. <meta-data
    9. android:name="hwc-theme"
    10. android:value="androidhwext:style/Theme.Emui.Translucent" />
    11. </activity>
    12. <!--为了防止低版本 dex 崩溃,动态开启 provider,enabled 设置为 false-->
    13. <provider
    14. android:name="com.huawei.hms.update.provider.UpdateProvider"
    15. android:authorities="${applicationId}.hms.update.provider"
    16. android:exported="false"
    17. android:enabled="false"
    18. android:grantUriPermissions="true">
    19. </provider>
    20. <!-- value 的值“appid”用实际申请的应用 ID 替换,来源于开发者联盟网站应用的服务详情。注意,value 中的斜杠(\)及空格要保留。-->
    21. <meta-data
    22. android:name="com.huawei.hms.client.appid"
    23. android:value="\ your huawei appId" />
    24. <receiver
    25. android:name="com.huawei.hms.support.api.push.PushEventReceiver"
    26. >
    27. <intent-filter>
    28. <!-- 接收通道发来的通知栏消息,兼容老版本 PUSH -->
    29. <action android:name="com.huawei.intent.action.PUSH" />
    30. </intent-filter>
    31. </receiver>
    32. <receiver
    33. android:name="com.alipay.pushsdk.thirdparty.huawei.HuaweiPushReceiver"
    34. android:process=":push">
    35. <intent-filter>
    36. <!-- 必须,用于接收 TOKEN -->
    37. <action android:name="com.huawei.android.push.intent.REGISTRATION" />
    38. <!-- 必须,用于接收消息 -->
    39. <action android:name="com.huawei.android.push.intent.RECEIVE" />
    40. <!-- 可选,用于点击通知栏或通知栏上的按钮后触发 onEvent 回调 -->
    41. <action android:name="com.huawei.android.push.intent.CLICK" />
    42. <!-- 可选,查看 PUSH 通道是否连接,不查看则不需要 -->
    43. <action android:name="com.huawei.intent.action.PUSH_STATE" />
    44. </intent-filter>
    45. </receiver>
  3. 如需使用混淆,则要添加相关混淆配置:

测试华为推送

  1. 接入华为推送后,您可以在华为手机上启动应用并确保调用了初始化方法(参见 消息推送初始化),推送 SDK 会自动获取华为推送的厂商 token 并上报。
  2. 您可以在杀掉应用进程的情况下推送测试消息:
    • 如果仍然能收到消息,说明您的应用成功接入华为推送。
    • 如果不能收到消息,请按照下文进行问题排查。

排查问题

  1. 检查华为配置和参数是否和华为推送后台一致:
    • 接入 HMS2 请检查 AndroidManifest.xml 中相关配置是否添加, com.huawei.hms.client.appid 是否和华为推送后台一致。
    • 接入 HMS5 请检查 agconnect-services.json 是否存在,存放位置是否正确。
  2. 检查 mPaaS 控制台是否开启了华为通道(参见 配置华为推送通道),以及相关配置是否和华为推送后台一致。
  3. 查看 logcat 日志进行排查:
    1. 选择 push 进程,过滤 mPush.PushProxyFactory,检查是否存在以下日志:
      1. D/mPush.PushProxyFactory: found proxy com.mpaas.push.external.hms.Creator (HMS2)
      2. D/mPush.PushProxyFactory: found proxy com.mpaas.push.external.hms5.Creator (HMS5)
      若无,说明添加 推送 - 华为2推送 - HMS5 组件可能存在问题,请确认是否正确添加。
    2. 选择主进程,过滤 mHMS,检查是否获取到了华为推送的厂商 token,如出现以下日志(get token failed):
      检查华为 token
      说明获取华为厂商 token 失败,错误码参见 华为推送错误码
    3. 选择主进程,过滤 report channel token, 检查上报华为厂商 token 是否成功,如出现以下日志:
      1. report channel token error: xxxx
      说明上报厂商 token 失败,请检查 mPaaS 配置文件base64Code 是否有值,以及获取配置文件时上传的 apk 签名和当前应用是否一致。
  4. 如按以上步骤排查后仍无法解决问题,请提交工单或联系 mPaaS 支持人员。

其他问题

对 EMUI 和华为移动服务是否有版本限制

对 Emotion UI(简称 EMUI,是华为基于 Android 进行开发的情感化操作系统)和华为移动服务有版本限制,详细版本要求请参见 设备接收华为推送消息的条件

华为手机无法打印日志

在手机拨号界面输入 *#*#2846579#*#* 进入工程菜单 > 后台设置 > LOG 设置 > 选中 AP 日志。重启手机后,logcat 开始生效。