欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。
根据你描述的现象,可以拆成两个独立的问题来看:
1. target user is invalid 报错的直接原因
这个错误表示个推服务端认为目标 cid 无效。结合知识库中类似案例,最常见的原因是:
- cid 来源环境不匹配:如果你是在 HBuilderX 标准基座(或浏览器直接预览)获取的 cid,却用正式包/自定义基座的 appid 去推送,个推会判定该 cid 不属于当前应用,从而报
target user is invalid。
- 映射表脏数据:如果之前测试时往
opendb-device、uni-id-device 等表写入过测试 cid,而当前实际设备已重新安装或清空数据,服务端按旧映射推送时也会报此错。
建议先验证:用当前 Web 端获取到的 cid,直接在云函数里写死 push_clientid 测试推送(不经过 user_id 映射),看是否还报同样的错。如果写死 cid 能推通,说明问题出在 uni-id-device 或 opendb-device 表的映射关系上,需要检查登录后是否正确上报了 push_clientid(参考 uni-id-co 的 setPushCid 方法)。
2. WebSocket 连接 wss://wshzn.gepush.com:5223/nws 失败
这个域名是 uni-push 2.0 Web 端用于保持长连接、接收在线消息的服务地址。一个月前正常、现在突然失败,可能的原因包括:
- 网络环境变化:公司网络、防火墙、代理或浏览器安全策略(如混合内容拦截、wss 被拦截)导致无法建立 WebSocket 连接。
- 浏览器限制:部分浏览器对非标准端口(5223)的 wss 连接有限制,或页面本身是通过 http 加载导致 wss 被拦截。
- 服务空间/应用配置变更:虽然你确认配置未改,但建议检查 uni-push 后台是否意外关闭了 Web 推送通道,或应用状态异常。
建议排查步骤:
- 换网络环境(如手机热点)和浏览器(Chrome 无痕模式)测试,排除本地网络拦截。
- 检查浏览器控制台是否有更详细的错误码(如 403、502、证书错误等)。
- 确认当前页面协议是 https,且没有内容安全策略(CSP)拦截 wss 连接。
- 如果 WebSocket 始终无法连接,Web 端在线推送会失效,但离线推送(通过个推 restapi 直接下发)理论上仍可到达——不过 Web 端没有真正的"离线"概念,所以 WebSocket 断开基本等于 Web 推送不可用。
总结
target user is invalid 和 WebSocket 连接失败可能是两个独立问题:前者是 cid 有效性/映射问题,后者是网络或通道问题。建议先按第 1 点用写死 cid 的方式验证推送链路本身是否通畅,再集中排查 WebSocket 连接环境。
如果确认 cid 有效且网络无拦截,问题仍复现,建议携带 HBuilderX 版本、服务空间提供商(阿里云/腾讯云/支付宝云)、浏览器控制台完整报错截图,到 DCloud 社区 发帖或提交工单进一步排查。