纯血鸿蒙 APK 离线 Push 收不到排查全记录(极光 + 华为通道)
背景
项目使用极光推送(JPush)集成各厂商离线通道。测试阶段,华为、荣耀、vivo、OPPO 均能正常收到服务端下发的离线 Push,但纯血鸿蒙设备上始终收不到推送,偶尔能看到角标出现,却没有通知弹出。
由于纯血鸿蒙上运行的是通过卓易通安装的 APK,走的依然是华为推送通道,因此排查方向锁定在华为通道配置上。
排查过程
第一步:联系极光技术支持
将推送请求日志提供给极光技术人员后,得到的结论是:
走了华为通道,也成功下发了,但为什么没有展示,需要找华为方面确认。
这说明极光侧下发没有问题,问题出在华为通道的接收或展示环节。
第二步:重新对照极光厂商集成文档逐项核查
排查了一天没有进展后,决定回到极光官方的厂商通道集成文档,从头过一遍配置项,发现了两个遗漏:
-
华为推送平台上未录入 APK 证书指纹 华为通道要求在开发者后台配置应用的 SHA-256 证书指纹,否则推送鉴权会静默失败。
-
华为厂商 SDK 版本与极光版本不匹配 项目中集成的华为推送 SDK 版本为
5.6.0,而当前使用的极光 SDK 版本为6.0.1,两者存在版本偏差,需要升级华为侧 SDK 至极光文档要求的对应版本。
修复以上两项后重新触发推送,日志中出现了新的错误:
错误码 256 — 推送消息数量达到上限
第三步:定位华为消息分类问题
错误码 256 指向华为的消息分类机制。华为对推送消息按场景分类,不同分类有不同的每日推送配额。未正确配置分类的消息会被归入默认的低优先级通道,配额极低,很快就会触发上限。
华为消息分类官方文档: HMS Core 推送消息分类标准
检查华为推送平台后发现,项目此前已申请并配置了**“健康"分类,归属于"服务与资讯”**大类,审核状态正常。
问题在于:后端在调用极光推送 API 时,请求体中没有传递消息分类字段,导致华为侧将消息归入默认通道,触发配额限制。
第四步:修复并验证
与后端协商后,在推送请求中将华为消息分类字段设置为:
{
"category": "HEALTH"
}
再次触发推送,纯血鸿蒙设备成功收到离线 Push 通知。
根因总结
| 问题 | 原因 |
|---|---|
| 推送下发但不展示 | 华为平台未录入 APK 证书指纹 + 华为 SDK 版本与极光不匹配 |
| 错误码 256(达到上限) | 后端请求未传 category 字段,消息被归入默认低配额通道 |
修复清单
- 在华为推送平台(AppGallery Connect)的应用配置中,录入正确的 SHA-256 证书指纹。
- 将华为推送 SDK 升级至极光当前版本(
6.0.1)要求的对应版本。 - 后端推送请求中补充
category字段,值与华为平台已审核通过的分类保持一致(本项目为HEALTH)。
参考
- 华为 HMS Core 推送消息分类标准
- 极光推送厂商通道集成文档(见极光官方开发者文档)