文档开发者中心
我的
|

HarmonyOS 5

uniapp离线推送收不到

目前unipush的厂商推送配置鸿蒙next已配置,后端通过云函数正常发消息成功,但是离线收不到消息,只有打开app的时候才能收到消息,有没有排查问题的方向?
点赞
收藏
回复
5
分享
举报
浏览229 发布于2026-06-22 07:01广东
全部评论
最多点赞
最新发布
最早发布
|
技术支持
尊敬的开发者,您好,
关于您的反馈的问题已有开发者提出并采纳回复,可以参考uniapp收不到离线推送的消息


 
4楼回复于2026-06-23 01:28 来自广东

“打开 App 才收到”通常说明消息链路到了应用侧或厂商侧,但没有走成系统离线通知展示链路。建议先把 UniPush 封装和华为 Push Kit 原生能力拆开验证。

排查顺序:

1. 确认服务端发送的是通知类消息,不是只给前台处理的透传数据。

2. 确认包名、appId、证书指纹、Push Token 都来自当前鸿蒙包,不要混用 Android 配置。

3. 用最小原生 Demo 直接接华为 Push Kit 发一条离线通知,验证厂商通道本身是否正常。

4. 如果需要后台轻量处理,再看通知扩展能力;不要把必须前台运行的逻辑放在普通页面生命周期里。

5. 检查通知权限、通知渠道/分类、设备省电限制和应用是否被用户关闭通知。

如果原生 Push Kit 离线正常而 UniPush 不正常,问题就收敛到 UniPush 的鸿蒙适配层或服务端消息类型映射。

6楼回复于2026-06-25 00:20 来自四川

看看这个帖:

https://developer.huawei.com/consumer/cn/forum/topic/0202180873607282560

请参考连接中的写法:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/push-send-alert-V5#section8794131614597

1、设置actions参数完成点击消息进入应用内页示例(若skills中添加了uris参数,则uris内容需为空)。

2、skills中必须同时设置actions参数,actions参数为空。

3、module.json5文件中的skills标签下可以同时存在多个skill对象,每个对象对应一种能力。

若需要同时设置推送消息跳转能力和其他跳转能力(如NFC跳转、浏览器跳转等),需要在skills数组中创建不同的skill对象,分别映射对应的能力)。

5楼回复于2026-06-23 09:37 来自广东

我这边再补一个最小验证路径:先绕开 UniPush 的二次封装,确认华为 Push Kit 自身的“离线通知/通知扩展”链路是否正常。只在打开 App 后才收到,常见原因是服务端发成了透传/前台消息,或者端侧没有按通知扩展消息处理。

如果要后台收到后做轻量处理,可以加通知扩展能力:

import { RemoteNotificationExtensionAbility, pushCommon } from '@kit.PushKit';

import { hilog } from '@kit.PerformanceAnalysisKit';

export default class RemoteNotificationExtAbility extends RemoteNotificationExtensionAbility {

  async onReceiveMessage(info: pushCommon.RemoteNotificationInfo): Promise<pushCommon.RemoteNotificationContent> {

    hilog.info(0x0000, 'push', 'receive extension message');

    return {

      title: '新消息',

      text: '请打开应用查看详情',

      badgeNumber: 1,

      wantAgent: { abilityName: 'EntryAbility', parameters: { from: 'push' } }

    };

  }

}

同时让服务端先发 payload.notification,至少带 title/body;如果是通知扩展消息,要确认 push-type 与端侧扩展匹配。RemoteNotificationExtensionAbility 是独立轻量子进程,生命周期默认小于 10 秒,不能唤醒主进程或弹窗,所以不要在里面做重任务。依据:华为官方《发送通知消息》《RemoteNotificationExtensionAbility》。

展开全部
3楼回复于2026-06-22 08:52 来自湖北

这个现象建议先区分“前台在线消息”和“系统离线通知”。只在打开 App 时收到,通常说明 token/服务端发送链路基本通,但消息没有走系统离线展示链路,或者端侧只做了前台回调。

可以按下面顺序排查:

1. 端侧启动后记录 Push Kit token,确认 getToken 成功,并把最新 token 同步到后端。若 getToken 抛出非法应用身份、Push 权益未开通、网络不可用、设备不支持等错误,需要先处理 token 链路;token 更新后后端也要使用新 token。

2. 看 UniPush 厂商通道实际下发给华为侧的是“通知消息/远程通知”还是“透传数据”。如果是透传数据,只在应用进程存活或对应接收能力配置正确时才容易收到;如果目标是离线后系统通知栏展示,服务端 payload 要按通知消息发送,title/body、点击参数等字段要完整。

3. 端侧接收能力要和消息类型匹配:前台在线消息可用 pushService.receiveMessage(...) 验证;后台/扩展接收需要配置 PushExtensionAbility 或 RemoteNotificationExtensionAbility,并实现 onReceiveMessage。不要只用前台 receiveMessage 的结果来判断离线推送是否正常。

4. 检查通知开关和订阅状态。通知关闭时相关接口可能返回 Notification switch off,系统也不会展示通知;同时确认应用未被限制通知、后台运行或省电策略没有影响测试。

5. 做三组对比测试:App 前台、App 退到后台、进程被清理或锁屏。如果只有前台成功,重点看厂商通道 payload 类型、UniPush 华为通道配置是否真正生效,以及 HAP 中 Push 相关 extension 配置是否被打包进去;如果后台成功但清理后失败,再重点看消息类型是否为可离线展示的通知消息。

1楼回复于2026-06-22 07:17 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要提问题

了解社区公约,与您携手共创和谐专业的开发者社区。