//云函数中的代码
// 简单的使用
'use strict';
const { fail } = require("assert");
const uniPush = uniCloud.getPushManager({appId:"__UNI__EC57CCB"}) //注意这里需要传入你的应用appId
exports.main = async (event, context) => {
// 服务端请求
if(event.body){
let obj = JSON.parse(event.body);
if(!obj.title){
return{
code: -1,
message: '参数缺少title内容'
}
}
if(!obj.content){
return{
code: -1,
message: '参数缺少content内容'
}
}
return await uniPush.sendMessage({
"push_clientid": obj.push_clientid || '', //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid
"force_notification": true,
"title": obj.title || '听脑AI服务通知',
"content": obj.content || '任务处理完成,请点击查看!',
"settings": {
//消息有效期设置,单位毫秒,-1表示不设离线。默认是 2 小时,取值范围:-1 ~ 3 * 24 * 3600 * 1000(3天)之间
"ttl": 1 * 24 * 3600 * 1000,
},
"payload": {
"text": obj.record_id || ''
},
"category": {
"harmony":"MARKETING",
"huawei": "MARKETING",
"vivo":"ORDER"
},
"options":{
"XM": {
"/extra.channel_id": "130214"
},
"OP": {
"/channel_id": "channel_001",
"/category": "TODO",
"/notify_level": 1,
},
"HO": {
"/android/notification/importance": "LOW" //importance字段值为LOW:资讯营销类消息 ;importance字段值为NORMAL:服务与通讯类消息
},
"harmony": {
"/notification/importance": "NORMAL",
"/notification/category": "MARKETING",
"/notification/contentType": "NORMAL_TEXT",
"/notification/badgeNumber": "1",
"/notification/badge": "true" // 角标
}
},
request_id: String(Date.now()),
})
}else{
if(event.push_clientid){
return await uniPush.sendMessage({
"push_clientid": event.push_clientid || '', //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid
"force_notification": true,
"title": event.title || '标题',
"content": event.content || '内容',
"category": {
"harmony":"MARKETING",
"huawei": "MARKETING",
"vivo":"ORDER"
},
"options":{
"XM": {
"/extra.channel_id": "130214"
},
"OP": {
"/channel_id": "channel_001",
"/category": "TODO",
"/notify_level": 1,
},
"HO": {
"/android/notification/importance": "LOW" //importance字段值为LOW:资讯营销类消息 ;importance字段值为NORMAL:服务与通讯类消息
},
"harmony": {
"/notification/importance": "NORMAL",
"/notification/category": "MARKETING",
"/notification/contentType": "NORMAL_TEXT",
"/notification/badgeNumber": "1",
"/notification/badge": "true" // 角标
}
},
request_id: String(Date.now())
})
}else{
return {
code: -1,
message: '参数有误'
}
}
}
};
4 个回复
最佳回复
o***@aihuayan.com (作者)
1、按照文档配置云函数
2、运行本地云函数,测试本地云函数正常
3、修改云函数后必须右键上传修改后的云函数
4、重要配置:"options":{
"HW": {
"importance": "NORMAL",
"category": "MARKETING",
}
}
Ask小助手
鸿蒙Next平台使用uni-push需特殊配置。根据知识库,uni-push在鸿蒙平台需完成以下关键步骤:
厂商推送配置:必须按华为推送配置流程完成应用创建和回执配置,否则无法统计到达数据且离线推送失效。
权限配置:在
manifest.json勾选uni-push后,需通过harmony-permissions插件配置鸿蒙权限(如ohos.permission.INTERNET),因鸿蒙权限需在子模块中声明。版本兼容性:若使用uni-app x项目(推荐鸿蒙Next开发),需确认使用uni-push 2.0(参考uni-app x uni-push文档)。传统uni-app项目仅支持uni-push 1.0,可能存在兼容问题。
集成方式:wgt集成到原生鸿蒙工程时,需确保:
unpackage和harmony-configs目录后重新打包entry/src/main/ets/config.json中验证权限配置DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
打印 provider 是否正常?。https://uniapp.dcloud.net.cn/api/plugins/provider.html#getprovider
是功能完全不可用,还是某些功能不可用?
o***@aihuayan.com (作者)
我们的逻辑是:通过uni.getPushClicentId方法获取到cid之后,后端直接调用云函数push转化的url发送需要推送的消息,现在的问题是获取到cid之后,直接通过DCloud后台发送单个cid的消息,能收到推送,通过云函数push发送的消息收不到
2025-12-08 16:19
DCloud_UNI_OttoJi
回复 o***@aihuayan.com: 我看两回事,你的问题是 provider 找不到,还是没有问题只是询问云函数的写法?你代码是如何实现的,提供复现工程和操作步骤,提供更多信息,有助于定位和解答你的问题。
2025-12-08 17:01
o***@aihuayan.com (作者)
回复 DCloud_UNI_OttoJi: 我们没有调用getprovider方法,只是在uni代码中调用了uni.getPushClicentId获取到cid,然后将cid当成参数传给云函数接口实现的推送
2025-12-08 19:13
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: uni.onPushMessage((res) => {
console.log("收到推送消息:",res) //监听推送消息
})
是写在 App.vue 吗?
2025-12-08 19:59
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 是的,在App.vue中写的
2025-12-09 09:35
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,鸿蒙原生工程集成wgt资源文件,不走App.vue中的onLaunch方法,我们的uni.onPushMessage监听是在App.vue的onLaunch中的,所以没有推送,这个怎么修改比较好?
2025-12-09 11:00
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 鸿蒙原生工程直接参考:https://docs.getui.com/getui/mobile/harmonyos/vendor/vendor_open/
2025-12-09 12:05
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 好的,我先看看
2025-12-09 12:10
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,这个是直接集成个推原生的啊,不能修改uni中的某些逻辑,实现推送吗?我尝试了将uni.onPushMessage的监听放在index.vue(首页)的onLoad方法中,在线推送可以收到消息,离线推送不行,这样的修改会有什么影响吗?
2025-12-09 12:16
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 不是集成原生个推,是用原生写法实现
onPushMessage。你说在线推送正常、离线失效,大概率不是代码问题。先建空uni-app项目,按文档跑通uni-push(以确保离线推送配置/参数...没问题),再折腾鸿蒙原生工程集成。2025-12-09 13:26
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 好的,我先尝试一下,谢谢大佬
2025-12-09 13:33
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,我现在直接运行uni-app项目到鸿蒙next真机,在线推送可以收到推送消息,离线推送收不到,已经在:https://dev.dcloud.net.cn/pages/app/push2/thirdparty 这个地址中的"厂商推送设置",设置了鸿蒙next的client_id和鸿蒙JSON密钥文件内容,还需要配置什么?
2025-12-09 15:53
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 离线推送按文档一步一步实现,基本上都是哪里细节没注意引起的。
2025-12-09 16:08
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 请问具体是哪个文档?我是按照https://uniapp.dcloud.net.cn/unipush-v2.html 和https://docs.getui.com/getui/mobile/harmonyos/harmonyosstudio/ 配置的。
2025-12-09 16:54
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 还有一个 api 文档 https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/api.html 鸿蒙一般是category没有配置对引起离线推送失败
2025-12-09 20:15
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,还有哪里需要注意的吗?我看着文档又走了一遍流程,暂时没看到哪里没设置的,我们云函数代码中设置了category:
"category": { "harmony":"MARKETING", "huawei": "MARKETING", "vivo":"ORDER" }2025-12-10 09:53
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 你都传MARKETING了,鸿蒙怎么可能允许你离线推送
2025-12-10 17:04
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 不能使用MARKETING?那需要用什么?
2025-12-10 17:13
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,应该跟MARKETING没关系,我换成其他的传值,推送离线消息也是不行的,我从DCloud后台拿到devicetoken到AGC后台推送,是可以收到离线推送消息的
2025-12-10 17:23
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,你那里有没有鸿蒙Next推送相关的demo,能收到离线消息和在线消息。
2025-12-10 17:37
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 先别套业务,和文档示例一模一样跑通技术先,再去纠结你的业务逻辑
2025-12-10 19:04
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,我没明白你说的是什么意思,我现在没纠结业务,离线推送和在线推送就是技术方面的问题吧,因为我这里是公司项目,不方便给demo,推送相关的代码逻辑就只是在App.vue中的onLaunch获取到cid,云函数根据cid推送消息,云函数的代码我已经贴在下面的中了,现在就是在线消息可以收到推送,离线消息一直收不到推送
2025-12-10 19:21
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 如果大佬有demo的话,可以发给我一份,我对照着看一下是哪里没配置好。
2025-12-10 19:21
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 和文档示例一模一样跑通技术先。因为看你"harmony":"MARKETING",这块可能业务问题不允许离线推送。你就和我们文档中的写成一样。文档原文:例如:{"harmony":"EXPRESS", "huawei":"EXPRESS", "vivo":"ORDER"}。其中,harmony 与 huawei 的取值相同详情查看
2025-12-10 20:57
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 这个我之前就试过了,也是不行的
2025-12-11 09:37
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 我们这个是一直存在的项目,只是在之前的基础上加上了鸿蒙next的配置,iOS、Android、卓易通版本的推送都是可以的,只有鸿蒙next版本的不行
2025-12-11 09:45
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 这块没什么悬念,就是配对各种 key、证书、参数弄对,按文档走即可。目前所有这块遇到问题的最终都是哪里细节哪一步弄错了引起的,
2025-12-11 11:26
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 在DCloud后台------> uni-push 2.0 ------> 厂商通道配置中,"华为"和"鸿蒙next"的配置是不一样的,"华为"的配置还是以前卓易通版本的配置,"鸿蒙next"的配置是新建的鸿蒙版本的clicent_id和鸿蒙JSON密钥文件内容,这个配置对鸿蒙next的离线推送有影响吗?
2025-12-11 11:51
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 我就是按文档走的,文档内的一些截图的都是以前的了,有一些我也不确定,你知道的都有什么地方弄错会影响离线推送可以说一下吗?我检查一下。
2025-12-11 11:56
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 或者你给我贴一个你说的文档,我要明确的文档链接。
2025-12-11 12:19
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,我现在运行本地云函数推送,离线场景下可以收到消息;使用HTTP URL方式推送,离线场景下还是不能收到。请问这是什么原因?这两种场景有什么区别?
2025-12-17 17:57
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 没有任何区别,建议检查两个点:1. 确保上传到云端的云函数是最新的 2. 确保通过HTTP请求到云函数时,传递的参数是否正确,是否传了字符串没有转为对象;(到 unicloud web 控制台看此云函数的运行日志,记得打印数据的时候把类型也打出来);
2025-12-17 19:55
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: 大佬,请问:1、在哪里看最新版本云函数?2、此为HTTP 推送的日志数据:请求入参: {
"args": {
"path": "/",
"httpMethod": "POST",
"headers": {
"content-length": "225",
"x5-uuid": "8caff8f75d046b1f9949bc37cae597c9",
"x-client-ip": "116.62.78.94",
"x-forwarded-for": "116.62.78.94, 120.27.173.90, 39.96.119.212",
"platform": "{{Platform}}",
"accept": "/",
"authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NjM2MjU5OTUsInVzZXJfaWQiOjJ9.YijQM0aECOhb_T-MZEpj9ZtVObeDs3n0LT8mrbIKfFA",
"x-real-ip": "116.62.78.94",
"x-sinfo": "on",
"host": "fc-mp-94143704-b954-41a7-b9c8-80b8b5b4041c.next.bspapp.com",
"content-type": "application/json",
"x-forwarded-by": "172.28.195.32:80",
"accept-encoding": "gzip",
"user-agent": "Apifox/1.0.0 (https://apifox.com)"
},
"queryStringParameters": {},
"isBase64Encoded": false,
"body": "{\n \"force_notification\": true,\n \"push_clientid\": [\n \"c0af409e21d2e8d38ae67ec2e964be57\"\n ],\n \"title\": \"纪要生成无忧\",\n \"content\": \"聚焦关键事项,听脑AI 纪要,周末近在眼前!\",\n \"record_id\": 0\n}"
},
"requestId": "ac1cc3201766122706468183939"
}
请求响应状态: success
2025-12-19 13:44
o***@aihuayan.com (作者)
回复 DCloud_uniCloud_JSON: HTTP推送的消息,App离线情况下,通知栏没有显示;点击打开App后,通知栏就会显示。
2025-12-19 13:46
DCloud_uniCloud_JSON
回复 o***@aihuayan.com: 我通过 uni-im 联系你吧,实时沟通
2025-12-19 13:55
o***@aihuayan.com (作者)
要回复问题请先登录或注册
公告
更多>相关问题