h***@126.com
h***@126.com
  • 发布:2026-08-27 11:30
  • 更新:2026-08-27 11:32
  • 阅读:16

unipush2.0,云函数 URL 我使用默认测试地址,在postman测试无效,无法收到在线/离线消息?

分类:uni-app

unipush2.0, URL 我使用默认测试地址,在postman测试无效,无法收到在线/离线消息。但是在dcloud 云平台下发推送通知,iOS app 可以正常接收到。这是为什么。

{
"push_clientid": "9bda40cd5079f99847d8c0f83fac138c",
"title": "8884444取完整内容的推送数据88",
"content": "88884444484",
"payload": {
"custom": "8888更新提示推送4444数据88",
"customTt": "8888888888请检查网络设444444置推送数据88",
}
"force_notification": true, // 关键:强制走通知栏
"options": {
"ios": {
"environment": "dev",
}
}
}

2026-08-27 11:30 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( 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 服务端推送消息

内容为 AI 生成,仅供参考

要回复问题请先登录注册