欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
从你描述的现象看:DCloud 云平台下发能正常收到,说明客户端配置、push_clientid 本身都没问题,问题出在“Postman → 云函数 URL → sendMessage 传参”这一链路。建议按以下几点排查:
1. 你贴的请求体是非法 JSON
"payload": {...} 的右大括号后面缺少逗号;
- payload 内
"customTt" 后面多了一个逗号;
"environment": "dev" 后面也多了一个逗号。
云函数端解析失败或参数为 undefined 时,推送自然不会执行。请先改成合法 JSON 再测试。
2. 确认云函数内的参数解析方式
云函数 URL 化之后,Postman 以 POST JSON 提交的数据不在 event.push_clientid 上,而是在 event.body(字符串)里,需要在云函数中 JSON.parse(event.body) 之后再传给 uniPush.sendMessage()。如果你的云函数里写死参数能推通、Postman 传参就不行,基本就是这个问题。相关说明:uni-push 2.0 开通配置
3. force_notification: true 会导致在线时“监听不到”消息
根据 uni-push 2.0 文档:服务端传了 force_notification:true 后,应用在线时也会自动创建通知栏消息,此时 uni.onPushMessage 监听不到消息内容,只有当用户点击通知栏消息后,app 才能监听到(click 类型)。所以“在线收不到”请先确认系统通知栏有没有出现这条消息。参考:在线推送说明
4. options 中 environment 要与打包证书环境匹配
"environment": "dev" 表示走苹果 APNs 开发(sandbox)环境,只有用开发证书打包的 app 才能收到对应离线推送;如果你的 app 是生产证书打包,而云平台下发走的是生产环境,就会出现“云平台能收到、自己调 dev 环境收不到”的情况。请确认二者环境一致。
5. HBuilderX 4.31 的已知问题
HBuilderX 4.31 内置的 uni-push-cloud 扩展库存在 options 参数丢失 的问题,不能连接本地云函数调试,只能连接云端云函数才能正常使用,后续版本修复。如果你说的“测试地址”是本地运行云函数的调试地址,建议改为上传部署后走云端云函数(URL 化地址)测试。参考:uni-cloud-push API 入参说明
6. 最直接的定位手段:看云函数日志
在云函数里 console.log(event.body) 以及 sendMessage 的返回值,然后到 uniCloud 控制台查看日志:
- 日志里没有请求记录 → URL 或请求方式不对;
- 有日志但参数为 undefined → body 解析问题(对应第 2 点);
- 返回 successed_offline 但手机无通知 → 检查第 3、4 点(通知栏、dev/prod 环境)。
另外提醒:uni-push 2.0 的服务端推送只能在配置了 uni-cloud-push 扩展库的云函数中通过 uniPush.sendMessage() 执行,官方没有提供一个可直接 POST 推送数据的“默认测试地址”。你 Postman 调用的应当是你自己 URL 化的云函数,请确认该云函数里确实调用了 sendMessage 并正确透传了参数。参考:uni-push 2.0 服务端推送消息
1 个回复
Ask小助手 - Ask社区AI助手
从你描述的现象看:DCloud 云平台下发能正常收到,说明客户端配置、push_clientid 本身都没问题,问题出在“Postman → 云函数 URL → sendMessage 传参”这一链路。建议按以下几点排查:
1. 你贴的请求体是非法 JSON
"payload": {...}的右大括号后面缺少逗号;"customTt"后面多了一个逗号;"environment": "dev"后面也多了一个逗号。云函数端解析失败或参数为 undefined 时,推送自然不会执行。请先改成合法 JSON 再测试。
2. 确认云函数内的参数解析方式
云函数 URL 化之后,Postman 以 POST JSON 提交的数据不在
event.push_clientid上,而是在event.body(字符串)里,需要在云函数中JSON.parse(event.body)之后再传给uniPush.sendMessage()。如果你的云函数里写死参数能推通、Postman 传参就不行,基本就是这个问题。相关说明:uni-push 2.0 开通配置3. force_notification: true 会导致在线时“监听不到”消息
根据 uni-push 2.0 文档:服务端传了
force_notification:true后,应用在线时也会自动创建通知栏消息,此时uni.onPushMessage监听不到消息内容,只有当用户点击通知栏消息后,app 才能监听到(click 类型)。所以“在线收不到”请先确认系统通知栏有没有出现这条消息。参考:在线推送说明4. options 中 environment 要与打包证书环境匹配
"environment": "dev"表示走苹果 APNs 开发(sandbox)环境,只有用开发证书打包的 app 才能收到对应离线推送;如果你的 app 是生产证书打包,而云平台下发走的是生产环境,就会出现“云平台能收到、自己调 dev 环境收不到”的情况。请确认二者环境一致。5. HBuilderX 4.31 的已知问题
HBuilderX 4.31 内置的 uni-push-cloud 扩展库存在 options 参数丢失 的问题,不能连接本地云函数调试,只能连接云端云函数才能正常使用,后续版本修复。如果你说的“测试地址”是本地运行云函数的调试地址,建议改为上传部署后走云端云函数(URL 化地址)测试。参考:uni-cloud-push API 入参说明
6. 最直接的定位手段:看云函数日志
在云函数里
console.log(event.body)以及sendMessage的返回值,然后到 uniCloud 控制台查看日志:另外提醒:uni-push 2.0 的服务端推送只能在配置了
uni-cloud-push扩展库的云函数中通过uniPush.sendMessage()执行,官方没有提供一个可直接 POST 推送数据的“默认测试地址”。你 Postman 调用的应当是你自己 URL 化的云函数,请确认该云函数里确实调用了 sendMessage 并正确透传了参数。参考:uni-push 2.0 服务端推送消息要回复问题请先登录或注册
公告
更多>相关问题