华为通道 V2 接入

最近更新时间:2020-09-04 17:36:53

操作场景

华为推送通道是由华为官方提供的系统级推送通道。在华为手机上,推送消息能够通过华为的系统通道抵达终端,并且无需打开应用,即可收到推送。

注意:

  • 本文仅适用华为通道 V2 接入,V4 接入请参见 华为通道 V4 接入
  • 华为推送只有在签名发布包环境下,才可收到推送消息。
  • 华为手机中的移动推送服务,必须升级到2.5.3以上版本,否则华为通道会注册失败(依旧走移动推送 TPNS 的 TPNS 通道)。
  • 华为通道不支持抵达回调,支持点击回调(需要自定义参数),支持透传(忽略自定义参数,但不保证到达)。

操作步骤

获取密钥

  1. 进入 华为开放平台
  2. 注册和登录开发者账号,详情请参见 账号注册认证。(如果您是新注册账号,需进行实名认证)
  3. 在华为推送平台中新建应用,详情请参见 创建应用。(应用包名需跟您在移动推送 TPNS 填写的包名保持一致)
  4. 获取应用的 AppID 和 AppSecret,并且复制信息,填入控制台的应用配置 > 华为通道栏目中。

配置 SHA256 证书指纹

获取 SHA256 证书指纹方法,请参见 华为推送接入文档

集成步骤

AndroidStudio 集成方法

在 App 模块下的 build.gradle 文件内,完成移动推送 TPNS 所需要的配置后,再增加以下的华为节点:

  1. 配置华为 AppID,示例代码如下:

    manifestPlaceholders = [
      HW_APPID: "华为的APPID"
         ]
  2. 导入华为推送相关依赖,示例代码如下:

    implementation 'com.tencent.tpns:huawei:[VERSION]-release'//华为推送 [VERSION] 为当前 SDK 版本号,版本号可在 SDK 下载页查看
说明:

华为推送 [VERSION] 为当前 SDK 版本号,版本号可在 SDK 下载页 查看。

Eclipes 集成方法

  1. 下载 SDK 安装包
  2. 打开 Other-Push-jar 文件夹, 导入华为推送相关 jar 包,将 hw4tpns1.1.2.1.jar 导入项目工程中。
  3. Androidmanifest.xml 文件中,新增如下配置:
     <meta-data
             android:name="com.huawei.hms.client.appid"
             android:value="您的APPID(来自华为官网)" >
     </meta-data>
     <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>
     <provider
             android:name="com.huawei.hms.update.provider.UpdateProvider"
             android:authorities="应用包名.hms.update.provider"
             android:exported="false"
             android:grantUriPermissions="true" >
     </provider>
     <receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver" >
             <intent-filter>
                     <!-- 接收通道发来的通知栏消息,兼容老版本PUSH -->
                     <action android:name="com.huawei.intent.action.PUSH" />
             </intent-filter>
     </receiver>
     <!-- 注:华为push 需要的 end -->
  4. 在 AndroidManifest.xml 增加 Receiver, 配置如下:
    <receiver android:name="com.tencent.android.hwpush.HWPushMessageReceiver" >
    <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>

启动华为推送

在调用移动推送 TPNS XGPushManager.registerPush 前,开启第三方推送接口:

//打开第三方推送
XGPushConfig.enableOtherPush(getApplicationContext(), true);

注册成功的日志如下:

I/XINGE: [XGOtherPush] other push token is : 0865551032618726300001294600CN01 other push type: huawei
 I/XINGE: [a] binder other push token with accid = 2100274337  token = 17c32948df0346d5837d4748192e9d2f14c81e08 otherPushType = huawei otherPushToken = 0865551032618726300001294600CN01

代码混淆

-ignorewarning
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
-keep class com.huawei.android.hms.agent.**{*;}
说明:

混淆规则需要放在 App 项目级别的 proguard-rules.pro 文件中。

华为通道抵达回执配置

华为通道抵达回执需要开发者自行配置,您可参照 华为厂商通道回执配置指引 配置完成后,可在推送记录中查看华为推送通道的抵达数据。

华为设备角标适配

华为设备支持设置应用角标,需要开发者做以下操作:

  1. 申请应用内角标设置权限,具体实现在应用 AndroidManifest.xml 文件的 manifest 标签下添加以下权限配置:
    <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE "/>
  2. 设置应用启动类
    在管理台华为通道开启及参数配置处填写桌面图标对应的应用入口Activity类,如com.test.badge.MainActivity,如图所示:

    角标的用法可参考 角标适配指南 文档。
目录