纯血鸿蒙 APK 离线 Push 收不到排查全记录(极光 + 华为通道)

背景

项目使用极光推送(JPush)集成各厂商离线通道。测试阶段,华为、荣耀、vivo、OPPO 均能正常收到服务端下发的离线 Push,但纯血鸿蒙设备上始终收不到推送,偶尔能看到角标出现,却没有通知弹出。

由于纯血鸿蒙上运行的是通过卓易通安装的 APK,走的依然是华为推送通道,因此排查方向锁定在华为通道配置上。


排查过程

第一步:联系极光技术支持

将推送请求日志提供给极光技术人员后,得到的结论是:

走了华为通道,也成功下发了,但为什么没有展示,需要找华为方面确认。

这说明极光侧下发没有问题,问题出在华为通道的接收或展示环节。


第二步:重新对照极光厂商集成文档逐项核查

排查了一天没有进展后,决定回到极光官方的厂商通道集成文档,从头过一遍配置项,发现了两个遗漏:

  1. 华为推送平台上未录入 APK 证书指纹 华为通道要求在开发者后台配置应用的 SHA-256 证书指纹,否则推送鉴权会静默失败。

  2. 华为厂商 SDK 版本与极光版本不匹配 项目中集成的华为推送 SDK 版本为 5.6.0,而当前使用的极光 SDK 版本为 6.0.1,两者存在版本偏差,需要升级华为侧 SDK 至极光文档要求的对应版本。

修复以上两项后重新触发推送,日志中出现了新的错误:

错误码 256 — 推送消息数量达到上限

第三步:定位华为消息分类问题

错误码 256 指向华为的消息分类机制。华为对推送消息按场景分类,不同分类有不同的每日推送配额。未正确配置分类的消息会被归入默认的低优先级通道,配额极低,很快就会触发上限。

华为消息分类官方文档: HMS Core 推送消息分类标准

检查华为推送平台后发现,项目此前已申请并配置了**“健康"分类,归属于"服务与资讯”**大类,审核状态正常。

问题在于:后端在调用极光推送 API 时,请求体中没有传递消息分类字段,导致华为侧将消息归入默认通道,触发配额限制。


第四步:修复并验证

与后端协商后,在推送请求中将华为消息分类字段设置为:

{
  "category": "HEALTH"
}

再次触发推送,纯血鸿蒙设备成功收到离线 Push 通知。


根因总结

问题 原因
推送下发但不展示 华为平台未录入 APK 证书指纹 + 华为 SDK 版本与极光不匹配
错误码 256(达到上限) 后端请求未传 category 字段,消息被归入默认低配额通道

修复清单

  1. 在华为推送平台(AppGallery Connect)的应用配置中,录入正确的 SHA-256 证书指纹
  2. 将华为推送 SDK 升级至极光当前版本(6.0.1)要求的对应版本。
  3. 后端推送请求中补充 category 字段,值与华为平台已审核通过的分类保持一致(本项目为 HEALTH)。

参考