全部产品
Search
文档中心

移动开发平台mPaaS:华为推送

更新时间:Jul 20, 2023

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

  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 仓地址。

    allprojects {
     repositories {
         // 其他repo已省略
         maven {url 'https://developer.huawei.com/repo/'}
     }
    }
  4. 在主工程的 build.gradle 文件中添加 HMS SDK 依赖。

     dependencies {
         implementation 'com.huawei.hms:push:5.0.2.300'
     }
    • HMS SDK 版本会经常更新,最新版本号可以参考 HMS SDK 版本更新说明

    • 当前适配的版本为 5.0.2.300,如需使用更高版本,可根据需求修改,通常来说厂商 SDK 都会向下兼容,如不兼容可加入钉钉群 41708565 反馈适配新版的需求。

  5. 如需使用混淆,则要添加相关混淆配置:

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

  1. 添加 推送 - 华为2 组件,方式与添加推送 SDK 相同,参见 添加 SDK 。 当前内置的 HMS2 SDK 版本为 2.5.2.201。

  2. 配置 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>
  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,检查是否存在以下日志:

      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 组件可能存在问题,请确认是否正确添加。

    2. 选择主进程,过滤 mHMS,检查是否获取到了华为推送的厂商 token,如出现日志get token failed:说明获取华为厂商 token 失败,错误码参见 华为推送错误码

    3. 选择主进程,过滤 report channel token, 检查上报华为厂商 token 是否成功,如出现以下日志:

      report channel token error: xxxx

      说明上报厂商 token 失败,请检查 mPaaS 配置文件base64Code 是否有值,以及获取配置文件时上传的 apk 签名和当前应用是否一致。

其他问题

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

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

华为手机无法打印日志

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