const push = uniCloud.getPushManager({ appId: 'UNICFD7258' })
await push.sendMessage({
push_clientid: '已脱敏CID',
title: '待审批任务提醒',
content: '任务提交后已超过5分钟,请及时审批。',
force_notification: true
})
- 发布:31 分钟前
- 更新:15 分钟前
- 阅读:13
产品分类: uniCloud/支付宝小程序云
示例代码:
操作步骤:
- HarmonyOS正式签名App已集成uni-push 2.0,并成功获取CID。
- App通知、锁屏通知、横幅通知及休眠联网均已开启。
- 在DCloud uni-push控制台向该CID发送通知消息,App后台锁屏可立即收到。
- 云对象通过uniCloud.getPushManager({ appId }).sendMessage()向相同CID发送。
- 云端返回errCode=0、errMsg=success。
- App后台锁屏时没有通知;重新打开App后消息才出现。
- 已测试force_notification:true,并分别测试带/不带payload、badge、options,现象一致。
- HarmonyOS正式签名App已集成uni-push 2.0,并成功获取CID。
- App通知、锁屏通知、横幅通知及休眠联网均已开启。
- 在DCloud uni-push控制台向该CID发送通知消息,App后台锁屏可立即收到。
- 云对象通过uniCloud.getPushManager({ appId }).sendMessage()向相同CID发送。
- 云端返回errCode=0、errMsg=success。
- App后台锁屏时没有通知;重新打开App后消息才出现。
- 已测试force_notification:true,并分别测试带/不带payload、badge、options,现象一致。
预期结果:
云对象sendMessage返回成功后,应与DCloud控制台通知消息一致,在HarmonyOS后台锁屏状态立即显示系统通知。
云对象sendMessage返回成功后,应与DCloud控制台通知消息一致,在HarmonyOS后台锁屏状态立即显示系统通知。
实际结果:
后台锁屏不显示;重新打开App后才收到。云端只显示平台受理成功,无法获得HarmonyOS厂商通道失败原因。
后台锁屏不显示;重新打开App后才收到。云端只显示平台受理成功,无法获得HarmonyOS厂商通道失败原因。
bug描述:
一、问题概述
uni-push 2.0 在 HarmonyOS NEXT 正式签名 App 中,通过 DCloud uni-push 控制台向指定 CID 发送“通知消息”时,App 在后台锁屏状态可以立即显示系统通知。
但是,通过支付宝云 uniCloud 云对象调用 uniCloud.getPushManager().sendMessage() 向相同 CID 推送时,云端接口返回成功,HarmonyOS 后台锁屏状态却不显示通知;只有重新打开 App 后,消息才到达并显示。
该问题可以稳定复现。
二、开发及运行环境
- AppID:
__UNI__CFD7258 - 项目名称:
monthly-close-app-v2 - uni-push版本:
uni-push 2.0 - 云服务商:支付宝小程序云
- PC操作系统:Windows 10
- PC操作系统版本:
10.0.19044.7663 - HBuilderX版本:
5.24 正式版 - 项目创建方式:HBuilderX
- 客户端平台:HarmonyOS NEXT
- HarmonyOS版本:HarmonyOS 6.0.0
- 手机厂商:华为
- 手机型号:HUAWEI Pura X
- 前端框架:Vue3
- 页面类型:vue
- 打包方式:云端打包
- 安装包类型:正式签名包,非运行基座
- CID:
6903ee2450d0****7303382d8e41(公开内容已脱敏,完整CID可向管理员提供)
三、前置条件
- HarmonyOS正式签名App已经集成并开通uni-push 2.0。
- App可以正常取得CID并完成用户与设备绑定。
- 手机已经开启App通知权限。
- 锁屏通知、横幅通知和桌面角标均已开启。
- 静默通知已经关闭。
- 手机“休眠时始终保持网络连接”已经开启。
- App通过Home键退至后台,没有从最近任务中上划关闭,也没有被强行停止。
- 手机网络连接正常。
四、复现步骤
- 在HUAWEI Pura X手机中安装并启动正式签名App。
- 登录用户账号,并确认App成功获取CID。
- 将App通过Home键退至后台并锁屏。
- 在DCloud uni-push控制台,向该CID发送“通知消息”。
- 手机在后台锁屏状态可以立即收到并显示该系统通知。
- 改用支付宝云uniCloud云对象,通过
uniCloud.getPushManager({ appId }).sendMessage()向相同CID发送相同类型的通知。 - 云端返回
errCode=0、errMsg=success。 - App后台锁屏状态没有显示系统通知。
- 等待数分钟后仍然没有锁屏通知。
- 重新打开App后,刚才通过云对象发送的消息才到达并显示。
- 多次重复测试,现象一致。
五、最小复现代码
const push = uniCloud.getPushManager({
appId: '__UNI__CFD7258'
})
const result = await push.sendMessage({
push_clientid: '已脱敏CID',
title: '待审批任务提醒',
content: '任务提交后已超过5分钟,请及时审批。',
force_notification: true
})
console.log(result)
六、已经测试的参数组合
以下参数组合均已测试。云端均返回成功,但HarmonyOS后台锁屏状态均不展示通知:
push_clientid + title + content + payload + force_notification + badge + optionspush_clientid + title + content + payload + force_notificationpush_clientid + title + content + force_notification
其中已经分别测试:
- 保留及删除
payload - 保留及删除
badge - 保留及删除
options - 保留
force_notification: true - 对
push_clientid执行String(...).trim()
以上调整均未解决锁屏通知无法到达的问题。
七、云端执行结果
uniCloud定时云对象能够正常执行,业务通知记录也能够正常写入数据库。
日志统计如下:
notificationCreated=1
reminded=1
noDevice=0
noPushConfig=0
failed=0
sendMessage()返回:
errCode=0
errMsg=success
这说明uni-push平台已经受理请求,但无法确认HarmonyOS厂商离线通道是否真正接收并展示该通知。
八、实际结果
- DCloud uni-push控制台向该CID发送通知消息时,HarmonyOS后台锁屏可以立即显示系统通知。
- uniCloud云对象调用
getPushManager().sendMessage()时,接口返回成功,但后台锁屏不显示通知。 - 只有重新打开App后,消息才到达并显示。
- 云端没有返回HarmonyOS厂商通道失败原因。
九、预期结果
uniCloud云对象调用 getPushManager().sendMessage() 返回成功后,应当与DCloud uni-push控制台发送“通知消息”的效果一致:
- App处于后台时可以显示系统通知;
- 手机锁屏时可以立即显示锁屏通知;
- 不需要用户重新打开App才能收到消息。
十、请求协助
请协助:
- 查询该CID在测试时间对应的HarmonyOS厂商Device Token是否正常。
- 查询HarmonyOS厂商推送通道的实际下发结果和返回错误码。
- 确认支付宝云是否支持通过
uniCloud.getPushManager().sendMessage()向HarmonyOS发送厂商离线通知。 - 提供HarmonyOS厂商离线“通知消息”的正确
sendMessage()参数格式。 - 说明为什么DCloud控制台通知可以锁屏到达,而uniCloud云对象向同一CID推送只能在重新打开App后到达。
完整CID、准确测试时间、uniCloud RequestID及相关日志可以在仅管理员可见区域提供。
2 个回复
Ask小助手
感谢您提交详尽的 Bug 反馈。作为 DCloud 官方人员,我已对您提交的反馈内容进行了评审,并结合相关技术文档对问题进行了初步分析。以下是评审意见与排查建议:
1. Bug 反馈内容完整性评审
uniCloud云端 API 推送的不同表现,并提供了完整的机型、系统版本、HBuilderX 版本、打包方式及前置条件。这对于排查问题非常有帮助,官方人员完全可以看懂。2. Bug 是否成立及排查建议
根据您描述的现象:“云端返回成功,但后台锁屏不显示通知;重新打开 App 后消息才到达并显示”,这说明消息成功下达到了个推服务器,但在向 HarmonyOS 厂商通道下发时未生效,最终走了应用自身的在线 socket 透传通道(所以重新打开 App 才能收到)。
结合知识库中的历史对话与官方文档说明,在服务端通过
uniCloud.getPushManager().sendMessage()推送消息时,如果希望 HarmonyOS 在后台或锁屏状态下展示系统通知,必须正确传入与厂商通道相关的参数,明确告知系统走厂商离线通道。在历史交流中,官方人员曾明确指出:“在服务端推送消息的时候需要正确传入与厂商通道相关的参数,比如
category这种。没走厂商通道一定是你在参数中没有告诉它要走厂商通道。”针对您的代码,建议进行以下排查与调整:
调整
sendMessage参数配置您当前测试的参数组合中,缺少了针对鸿蒙厂商通道的特定配置。请尝试在
sendMessage中补充category以及针对鸿蒙的options参数:参数配置依据
根据 uni-push 服务端 options 参数文档 说明,
options参数用于实现部分厂商特定功能。同时,鸿蒙推送对消息分类(category)有严格要求,如果不传或传错,可能导致厂商通道拒绝下发离线通知。下一步建议
请调整上述参数后再次进行锁屏推送测试。如果依然无法在锁屏状态下显示,请通过 DCloud 官方工单系统提交您完整的 CID、准确的测试时间以及
uniCloudRequestID,以便官方后台工程师协助查询该 CID 在华为厂商通道的实际下发结果和返回错误码。z***@126.com (作者)
感谢回复。补充说明:
__UNI__CFD7258,完整 CID、测试时间和 RequestID 已填写在仅管理员可见区域。sendMessage()返回errCode=0、errMsg=success,但锁屏无法收到,重新打开 App 后才出现。Ask小助手建议增加:
由于该建议为 AI 生成,目前暂未直接用于生产代码。请 DCloud 推送工程师协助明确:
sendMessage()在 HarmonyOS NEXT 上触发厂商离线通知,category的官方参数类型究竟是字符串还是{ harmony: "im" }对象?im是否属于需要在华为侧申请或审核的消息分类?审批任务提醒应使用哪个合法分类?options.harmony的准确官方字段结构是什么?空的HW对象是否有实际作用?force_notification: true是否足以生成 HarmonyOS 离线通知?在获得准确参数格式前,希望不要仅以通用参数建议结案,因为控制台通知与云对象推送在同一 CID 上的表现确实不同。
要回复问题请先登录或注册
公告
更多>相关问题