有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

操作场景

移动推送跟进各厂商通道推送服务的更新进度,提供集成华为推送 HMS Core Push SDK 的插件依赖包供用户选择使用。
注意
华为推送只有在签名发布包环境下,才可注册厂商通道成功并通过厂商通道进行推送。
华为通道不支持抵达回调,支持点击回调。

在华为推送平台配置应用

获取密钥

1. 进入 华为开放平台
2. 注册和登录开发者账号,详情参见 账号注册认证(如果您是新注册账号,需进行实名认证)。
3. 在华为推送平台中新建应用,详情参见 创建应用(应用包名需跟您在移动推送平台填写的一致)。
4. 进入我的项目 > 项目设置 > 常规中的应用获取并复制APPID和Client Secret,填入 移动推送控制台 > App 推送管理 > 基础配置 > 华为官方推送通道栏目中。



配置 SHA256 证书指纹

获取 SHA256 证书指纹,并在华为推送平台中配置证书指纹,单击

保存。证书指纹获取可参见 生成签名证书指纹



获取华为推送配置文件

登录华为开放平台,进入我的项目 > 选择项目 > 项目设置,下载华为应用最新配置文件 agconnect-services.json。



打开推送服务开关

1. 在华为推送平台,单击全部服务>推送服务,进入推送服务页面。


2. 在“推送服务”页面,单击立即开通,详情请参见 打开推送服务开关



SDK 集成(二选一)

Android Studio Gradle 自动集成

Gradle 7.0 以下版本
Gradle 7.0 版本
Gradle 7.1 及以上版本
1. 在 Android 项目级目录 build.gradle 文件,buildscript > repositories & dependencies 下分别添加华为仓库地址和 HMS gradle 插件依赖:
buildscript {
repositories {
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'} // 华为 maven 仓库地址
}
dependencies {
// 其他classpath配置
classpath 'com.huawei.agconnect:agcp:1.6.0.300' // 华为推送 gradle 插件依赖
}
}
2. 在 Android 项目级目录 build.gradle 文件,allprojects > repositories 下添加华为依赖仓库地址:
allprojects {
repositories {
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'} // 华为 maven 仓库地址
}
}
1. 在 Android 项目级目录 build.gradle 文件,buildscript > repositories & dependencies 下分别添加华为仓库地址和 HMS gradle 插件依赖:
buildscript {
repositories {
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'} // 华为 maven 仓库地址
}
dependencies {
// 其他classpath配置
classpath 'com.huawei.agconnect:agcp:1.6.0.300' // 华为推送 gradle 插件依赖
}
}
2. 在 Android 项目级目录 settings.gradle 文件,dependencyResolutionManagement > repositories 下添加华为依赖仓库地址:
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'} // 华为 maven 仓库地址
}
}
1. 在 Android 项目级目录 build.gradle 文件,buildscript > dependencies 下添加 HMS gradle 插件依赖:
buildscript {
dependencies {
// 其他classpath配置
classpath 'com.huawei.agconnect:agcp:1.6.0.300' // 华为推送 gradle 插件依赖
}
}
2. 在 Android 项目级目录 settings.gradle 文件,pluginManagement & dependencyResolutionManagement > repositories 下分别添加华为依赖仓库地址:
pluginManagement {
repositories {
mavenCentral() // 此处请调整 mavenCentral() 在仓库配置列表最前置位置
google()
gradlePluginPortal()
maven {url 'https://developer.huawei.com/repo/'} // 华为仓,如果不集成华为可以不加
}
}
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'} // 华为 maven 仓库地址
}
}
1. 将从华为推送平台获取的应用配置文件 agconnect-services.json 拷贝到 app 模块目录下(请勿放在子模块下)。


2. 在 app 模块下 build.gradle 文件头部添加以下配置(请勿放在子模块 build.gradle 下):
// app 其他 gradle 插件
apply plugin: 'com.huawei.agconnect' // HMS SDK gradle 插件
android {
// app 配置内容
}
3. 在 app 模块下 build.gradle 文件内导入华为推送相关依赖:
dependencies {
// ... 程序其他依赖
implementation 'com.tencent.tpns:huawei:[VERSION]-release' // 华为推送 [VERSION] 为当前最新 SDK 版本号,版本号可在 Android SDK 发布动态 查看
implementation 'com.huawei.hms:push:6.7.0.300' // HMS Core Push 模块依赖包
}
说明
华为推送 hms:push 依赖自6.1.300起适配 Android 11预置 <queries> 标签,请注意升级 Android Studio 至3.6.1或更高版本、Android Gradle 插件至 3.5.4或更高版本,否则可能导致工程构建出错。
华为推送 [VERSION] 为当前最新 SDK 版本号,版本号可在 Android SDK 发布动态 查看。
移动推送 Android SDK 自1.2.1.3版本起正式支持华为推送 V5 版本,请使用1.2.1.3及以上版本的移动推送华为依赖以避免集成冲突问题。

Android Studio 手动集成

针对开发者内部构建环境无法访问华为 maven 仓库的情况,提供以下手动集成方法。
1. 下载 SDK 安装包
2. 打开 Other-Push-jar 文件夹, 导入 huaweiv5 推送相关依赖包,将全部 jar、aar 包复制到项目工程中。
3. 在 Android 项目级目录 build.gradle 文件,buildscript > dependencies下添加 HMS gradle 插件的依赖:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
// 其他 classpath 配置
classpath files('app/libs/agcp-1.4.1.300.jar') // 华为推送 gradle 插件依赖
}
}
4. 将从华为推送平台获取的应用配置文件 agconnect-services.json 拷贝到 app 模块目录下。


5. 在 app 模块下 build.gradle 文件头部添加以下配置:
// app 其他 gradle 插件
apply plugin: 'com.huawei.agconnect' // HMS SDK V4 gradle 插件
android {
// app 配置内容
}
6. 在 app 模块下 build.gradle 文件内导入华为推送相关依赖:
dependencies {
// ... 程序其他依赖
implementation files('libs/tpns-huaweiv5-1.2.1.1.jar') // 适用于 HMS Core 版本的 TPNS 插件
implementation fileTree(include: ['*.aar'], dir: 'libs') // HMS Core Push 模块依赖包
}
7. 在 manifest 文件 <application> </application> 标签内添加以下组件:
<application>
<service
android:name="com.huawei.android.hms.tpns.HWHmsMessageService"
android:exported="false">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>

启动华为推送

1. 在调用移动推送注册接口 XGPushManager.registerPush 前,开启第三方推送接口:
//打开第三方推送
XGPushConfig.enableOtherPush(getApplicationContext(), true);
2. 注册成功的日志如下:
V/TPush: [XGPushConfig] isUsedOtherPush:true
E/xg.vip: get otherpush errcode: errCode : 0 , errMsg : success
V/TPush: [XGPushConfig] isUsedOtherPush:true
I/TPush: [OtherPushClient] handleUpdateToken other push token is : IQAAAACy0PsqAADxfCrWG3kupbOraeAiYoo9n2B-bAfb2d--kctc8E_UnY_mrIdg9ionukZvC******dVD8GlJi_5-0rpskunnNMcat35HA other push type: huawei

代码混淆

1. 将以下混淆规则添加在 App 项目级别的 proguard-rules.pro 文件中。
-ignorewarnings
-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.agconnect.**{*;}
2. 如应用使用了 AndResGuard 插件,请在 AndResGuard 配置白名单中添加以下内容。如果未使用 AndResGuard 插件,则请忽略该步骤。
whiteList = [
"R.string.hms*",
"R.string.connect_server_fail_prompt_toast",
"R.string.getting_message_fail_prompt_toast",
"R.string.no_available_network_prompt_toast",
"R.string.third_app_*",
"R.string.upsdk_*",
"R.layout.hms*",
"R.layout.upsdk_*",
"R.drawable.upsdk*",
"R.color.upsdk*",
"R.dimen.upsdk*",
"R.style.upsdk*",
"R.string.agc*"
]
说明
更多混淆配置请参见 华为推送配置混淆脚本

高级配置(可选)

华为通道抵达回执配置

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



华为设备角标适配

华为设备支持设置应用角标,需要开发者申请应用内角标设置和设置应用启动类权限,详情请参见 角标适配指南 文档。

常见问题排查

华为推送注册错误码查询方法

华为推送服务接入过程配置要求较严格,若观察到如下类似日志则说明华为厂商通道注册失败,开发者可以通过以下方式获取华为推送注册错误码:
[OtherPushClient] handleUpdateToken other push token is : other push type: huawei
推送服务 debug 模式下,过滤关键字“OtherPush”或“HMSSDK” ,查看相关返回码日志(例如 [OtherPushHuaWeiImpl] other push huawei onConnect code:907135702),并前往 厂商通道注册失败排查指南 查找对应原因,获取解决办法。

通过华为通道下发的通知,为什么没有通知提醒?

根据 华为消息分类标准,华为推送服务将通知消息分为资讯营销、服务与通讯两大类别。资讯营销类消息的每日推送数量自2023年01月05日起根据应用类型对推送数量进行上限管理,服务与通讯类消息每日推送数量不受限,资讯营销类消息单个应用每日每设备通知推送数量默认为2/5条。若推送消息属于服务与通讯类型的,请前往华为开发平台 申请自分类权益,开发者自行对推送进行分类,推送时把自分类参数带下来即可。详情请参见 华为推送限制规则