uni.onPushMessage((res) => {
const { type, data } = res;
// ── 1. 处理透传消息到达(App 在线时走个推通道,需客户端创建本地通知)──
if (type === "receive") {
const payload = this._parsePayload(data);
const title = data.title || payload.title;
const content = data.content || payload.content;
const badgeNum = Number(payload.badge) || 1;
const payloadStr =
typeof payload === "object" ? JSON.stringify(payload) : payload;
if (title && content) {
uni.createPushMessage({
title,
content,
icon,
payload,
});
}
}
});
云函数
'use strict';
const uniPush = uniCloud.getPushManager({
appId: "__UNI__"
})
exports.main = async (event) => {
let obj = JSON.parse(event.body)
const res = await uniPush.sendMessage({
"push_clientid": obj.cids,
"title": obj.title,
"content": obj.content,
"payload": obj.data,
"force_notification": false,
"category": {
"harmony":"WORK"
},
"options": {
"android": {
"HW": {
"/message/android/category": "WORK"
},
},
"harmony":{
"options":{
"HW":{
"/pushOptions/testMessage": true
}
}
},
},
"request_id": obj.request_id
})
return res
};
1 个回复
Ask小助手 - Ask社区AI助手
感谢您的反馈。针对您提交的 Bug 报告,作为 DCloud 官方人员,我从 uniCloud 后端架构与 uni-push 云端一体的角度对该问题进行了评审与分析,评审结果如下:
1. Bug 反馈内容完整性评审
uni.onPushMessage可监听到,但uni.createPushMessage无法创建”的现象,且指明了仅华为存在此问题,小米和 OPPO 正常。这对排查厂商通道差异非常有帮助。icon和payload变量未展示其取值来源,且未提供manifest.json中 push 模块及 App 包名等配置信息,在排查厂商通道问题时可能需要补充。category申请是否已通过审核?2. Bug 是否成立分析
结合知识库与 uniCloud 官方文档分析,该 Bug 大概率不成立,原因如下:
1. 透传消息与
force_notification参数机制根据 uni-push 服务端 API 文档,在您的云函数代码中设置了
"force_notification": false。这意味着服务端下发的是透传消息。此时,消息不会由系统通知栏直接展示,而是交由客户端的uni.onPushMessage监听。在监听事件的type === "receive"中,由开发者自行调用uni.createPushMessage创建本地通知。您描述的“在线监听可收到,但需自行创建”现象正是该机制设计的预期行为。2. 华为厂商通道对“应用在线”的处理差异
华为厂商通道(HMS Push)对应用在线时的透传消息处理策略与其他厂商(如小米、OPPO)存在差异。当 App 在线时,华为推送服务可能会拦截透传消息,导致 App 前端无法触发
receive事件,进而无法执行uni.createPushMessage。3.
category参数配置要求根据官方文档说明,华为通道对消息分类有严格要求。如果未配置
category或配置不当,会被认定为营销类别,从而受到限量推送或静默推送(静音且需下拉系统通知栏才可见)。请检查您的代码中"category": {"harmony":"WORK"}是否已在华为开发者后台申请并审核通过对应的权限。3. 替代方案与建议
如果您希望无论是离线还是在线状态,都能在华为手机系统通知栏直接显示消息,而无需依赖前端
uni.createPushMessage,建议修改云函数的推送参数:将
"force_notification": false修改为"force_notification": true。根据 uni-push 官方文档 说明,
force_notification设置为true时,无论是离线推送还是在线推送,服务端都会自动创建通知栏消息,无需客户端再手动调用uni.createPushMessage。建议您先尝试调整该参数验证效果。同时,请确保在 HBuilderX 中配置了华为厂商推送相关的证书和包名,并使用自定义基座或云打包进行测试。
要回复问题请先登录或注册
公告
更多>相关问题