HarmonyOS 鸿蒙Next接入极光推送的相关问题

HarmonyOS 鸿蒙Next接入极光推送的相关问题 有没有大佬用过极光推送(第三方推送服务)的,Help me

开发中,要求使用极光推送。

遇到了一点问题。

当应用处于后台时,极光推送发送的通知消息,真机能接收到通知,但是由于极光推送在后台会自主断开长连接(极光服务器推送消息,中间走厂商通道),就不会触发接收消息的事件,导致相应业务不会进行。有没有什么办法能够订阅到通知内容或者能解决这个问题。尽量不要换一个推送服务。

8 回复

这个其实是极光 + 厂商通道的典型问题,你现在遇到的是:

“通知到了,但业务回调没触发”

原因不是你代码有问题,而是:

消息已经走“鸿蒙厂商通道”了
不是走极光长连接通道

———————— 极光在 HarmonyOS / Android 上其实有两套通道:

1、极光自建长连接通道 2、厂商系统通道(华为 Push Kit / 鸿蒙 Push)

—— 当 App 在前台时:

一般走:

极光长连接

这时候:

onMessage
onNotifyMessageArrived
onCustomMessage

这些都能收到。

———————— 但:

App 退后台后, 极光为了省电: 会主动断开长连接。

官方现在甚至明确提供了:

setBackgroundEnable()

配置后台是否保活。

———————— 然后通知就会:

自动切到:

鸿蒙厂商通道

也就是:

Push Kit

———————— 重点来了:

厂商通道下:

通知是:

系统直接展示

不会经过:

极光 SDK 消息回调

所以:

你看到:

  • 通知栏有消息
  • 但业务事件没触发

这是正常现象。

———————— 极光官方文档里已经写了:

onArrivedMessage
仅极光通道会触发
厂商通道暂不支持

———————— 所以:

你现在不能依赖:

通知到达事件

来做业务逻辑。

这是设计层面的问题。

————————

正确做法有几个:

方案1(推荐)

改成:

通知 + 自定义消息 双发

这是业内最常见方案。

例如:

  • 通知:走厂商通道
  • 数据:走自定义消息

这样:

前台时:

能收到业务回调

后台时:

至少:

通知不会丢

————————

方案2

点击通知时处理业务。

不要依赖:

通知到达

而是:

通知点击

HarmonyOS 极光支持:

setClickWant()

获取通知附带 extras。

例如:

let j = await JPushInterface.setClickWant(want)

然后:

从 extras 恢复业务

很多 IM / OA 都这么干。

————————

方案3(不太推荐)

强行后台保活极光长连接。

例如:

setBackgroundEnable(true)

但问题是:

HarmonyOS 后台管控比 Android 更严。

即使你保活:

  • 也可能被系统杀
  • 也可能被休眠
  • 也可能最终还是切厂商通道

所以:

不能完全依赖

————————

方案4(最稳定)

真正接入:

华为 Push Kit

然后:

  • 极光只做聚合
  • 真正业务监听走 Push Kit

因为:

鸿蒙厂商通道最终本质就是:

Push Kit

———————— 所以结论其实很简单:

你现在这个现象:

是极光厂商通道的正常行为
不是 Bug

后台后:

通知由系统托管
不会再走 SDK 回调

———————— 建议你:

不要把:

“通知到达”

作为业务触发入口。

而应该:

  • 点击通知时恢复业务
  • 或通知 + 数据双通道
  • 或服务端状态同步

这是推送系统里更稳定的架构。

更多关于HarmonyOS 鸿蒙Next接入极光推送的相关问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


大佬讲的很通透,我之前有想过方案2和方案3,但是要求就是不用点击通知就会处理业务。而方案3目前行不通,因为这个接口

setBackgroundEnable(true)

支持的SDK版本是1.3.5,而极光官方里支持鸿蒙的SDK只发布到1.3.1

当应用处于后台时,极光推送发送的通知消息,真机能接收到通知。这时手机端集成的极光SDK还和极光平台保持着长连接,所以可以收到通知。

当断开连接时,要想收到消息,需要走极光–>华为鸿蒙(厂商)–>手机端这个通道。在极光平台配置。

参考《厂商通道参数申请指南》这个配置下。

走厂商通道好像是不会进回调的

2楼那个能解决你的问题,先用着。这个方法需要配置的挺多的。

很显然鸿蒙是参照iOS的推送逻辑写的,而iOS的推送逻辑就是APP和系统只能收到推送消息,而无法自动唤醒APP执行逻辑事件。

你这条路走不通哦!

极光推送已推出鸿蒙Next专用SDK,基于ArkTS/TS开发。接入时需在工程中引入@jpush/react-native-harmony或原生鸿蒙SDK包,配置AppKey与华为推送通道。需在module.json5中声明推送权限,并在entry中初始化JPushInterface。注意鸿蒙Next不支持旧版Java桥接,务必使用官方提供的鸿蒙API。

在 HarmonyOS Next 上,极光推送的通知消息走的是华为推送服务(厂商通道),应用在后台时系统直接弹出通知栏提示,不会回调应用内的事件处理方法。要触发业务逻辑,应使用自定义消息(透传消息),这类消息不依赖厂商通道,即使在后台也会触发应用内回调(前提是应用进程存活或可被拉起)。具体做法:

  1. 在极光控制台发送消息时,选择「自定义消息」而非「通知」。
  2. 应用侧在 MyApplication 中设置消息接收器,实现 JCommonInterfaceonMessage 方法,从中解析自定义消息内容执行业务。

若业务要求必须用通知,可监听通知的点击事件:在 AbilityonNewWantonStart 中解析 Want 参数获取透传的附加字段,但仅限用户点击通知时触发。关键点:后台接收通知不走应用回调,改用自定义消息或点击唤起处理

回到顶部