HarmonyOS鸿蒙Next中正常的PUSH消息如何存储?
HarmonyOS鸿蒙Next中正常的PUSH消息如何存储?
当前情况分析
push-type=0(REST API推送)
- 系统直接发通知
- APP前台时可监听并记录
- APP未运行时无法记录
push-type=6(后台消息)
- 可接收后自行提示和记录
- 支持代理写入(非实时)
- 需唤醒APP处理
push-type=2(扩展消息)
- 可短暂拉起进程
- 同时实现通知和记录
- 但有申请限制
期望解决方案
- 方案A:push-type=0时,APP不启动也能记录消息
- 方案B:push-type=6时能实时发出提示
备注:
- push-type=2方案需要拉起进程,资源消耗较大
- 后台任务方式有每日拉起次数限制
所以还有哪些方案我可以考虑?
更多关于HarmonyOS鸿蒙Next中正常的PUSH消息如何存储?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
其实主要目的不是拉起进程,而是存储消息,以统计送达成功率。如果本地不存储,就要开启app从服务器拉取历史消息。拉取的消息和之前推送收到的不一定相符。
理想状态是type=0时,系统能像6一样可以走代理写入。这样我就不用拉起进程了。
更多关于HarmonyOS鸿蒙Next中正常的PUSH消息如何存储?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
push-type = 0推送通知消息:
应用在前台时,应用通过pushService.receiveMessage接收到通知消息,自行处理业务逻辑。
应用不在前台时,只能手机通知栏接收到消息,应用由于进程不存在,接收不到消息。
业务场景适用于通知栏消息推送及通知栏拉起应用。
push-type = 6后台消息:
应用在前台时,将消息内容传给应用,自行处理业务逻辑。
应用不在前台时,由于进程不存在,缓存消息,等待应用启动后再传给应用。
业务场景适用于内容不频繁更新的场景,不会显示通知、播放铃声或改变应用角标。
对于楼主,想要应用进程不存在,也存储push消息,业务场景什么样的呢?
如果应用进程不存在,也允许push消息拉起应用进程,存储消息,这样会对系统带来很大影响,增加耗电量,隐私安全也会存在问题。
在HarmonyOS Next中,PUSH消息通过分布式数据管理框架存储。系统提供DataShareExtensionAbility作为跨应用数据共享方案,消息内容以键值对形式存入分布式数据库。消息元数据自动同步至可信设备,底层使用端到端加密传输。持久化存储采用分层设计:高频访问数据存于内存数据库,完整记录写入分布式文件系统。消息索引基于分布式软总线构建,支持毫秒级跨设备检索。消息生命周期与设备账号绑定,用户注销后自动清除。
在HarmonyOS Next中处理PUSH消息存储的优化方案建议:
- 对于push-type=0的情况:
- 可以利用HarmonyOS的分布式数据管理能力,通过设置系统级的数据观察者,将推送消息自动同步到本地数据库
- 使用持久化订阅功能,通过系统服务将推送消息持久化存储,即使APP未运行也能记录
- 对于push-type=6的实时性优化:
- 结合使用HarmonyOS的原子化服务特性,将消息处理模块设计为轻量级FA
- 利用系统提供的后台代理通知机制,通过设置高优先级通道实现准实时提醒
- 替代方案建议:
- 考虑使用HarmonyOS的公共事件机制,注册系统级公共事件订阅
- 利用WantAgent实现延迟处理,平衡资源消耗和实时性需求
- 对非即时性消息可采用系统提供的代理存储API,由系统统一管理
这些方案都能在保证系统资源合理使用的前提下,较好地满足消息存储和实时性需求。