先在https://dev.dcloud.net.cn/pages/app/push2 同一个appid下添加2个或以上的关联服务空间
通过一下代码发送push消息
const pushClient = uniCloud.getPushManager({
appId,
debug: false,
})
pushClient.sendMessage(pushParam) 产品分类: uniCloud/App
先在https://dev.dcloud.net.cn/pages/app/push2 同一个appid下添加2个或以上的关联服务空间
通过一下代码发送push消息
const pushClient = uniCloud.getPushManager({
appId,
debug: false,
})
pushClient.sendMessage(pushParam) 正常的应该是绑定的多个服务空间的时候uniCloud.getPushManager应该可以返回多个空间push客户端。
{"errCode":"uni-cloud-push-error-10001","errMsg":"token is invalid"} 在https://dev.dcloud.net.cn/pages/app/push2 绑定多个空间,无法使用第二个服务空间的push,会出现token is invalid错误
返回的错误结果:
{"errCode":"uni-cloud-push-error-10001","errMsg":"token is invalid"}
同一个appid可能会有两套服务空间或者在系统切换过渡到其他品牌的服务空间的时候会需要有两个,我的新用户在alipay的云空间,新用户在使用im的时候,会无法正常使用。
Ask小助手 - Ask社区AI助手
欢迎到专业群( uni-im技术交流群 ) 咨询,群中有相关专业的管理员和群友。
从 bug 反馈内容来看,问题的核心是在 dev.dcloud.net.cn 的 uni-push 配置页面中,为同一个应用(appid)绑定了多个服务空间后,调用 uniCloud.getPushManager 发送消息时,第二个服务空间无法正常工作,返回了 token is invalid 的错误。
反馈内容分析
uni-cloud-push-error-10001 和错误信息 token is invalid。动机也说明了是因为新老用户可能在不同服务空间,这在业务切换场景下是合理的。 uniCloud.getPushManager 默认是与当前 uni-app 项目所关联的服务空间进行交互的。如果开发者期望通过传入 appId 就能自动区分和调用不同服务空间的 push 服务,这个预期可能和当前的设计机制有出入。 uniCloud.getPushManager 应该可以返回多个空间push客户端”。这个预期需要商榷。根据知识库中关于“一个应用访问多个服务空间”的说明,uniCloud 是支持一个应用访问多个服务空间的,但需要通过 uniCloud.init 手动初始化不同的服务空间实例。然而,uniCloud.getPushManager 是否支持这种多实例模式,或者在 uni-push 的配置体系下,一个应用(appid)是否被设计为仅与一个主服务空间进行推送通信,是判断此 bug 是否成立的关键。 对问题的判断
根据知识库和 ask 社区的反馈:
uni-cloud-push-error-10001:根据知识库中的“返回码说明”,10001 明确表示“token错误/失效”。ask 社区中已有类似反馈(DCloud问答_178974),当时 DCloud 官方人员的回复是“push的token存储在opendb-tempdata表,一个 appid一条记录”。 因此,这很可能不是一个代码层面的“bug”,而是 uni-push 2.0 当前设计上对“一个 appid 绑定多个服务空间”的场景支持不完善。系统设计上,一个 appid 的推送服务是唯一关联到一个服务空间的,以确保推送通道的单一性和稳定性。
结论与建议
这个反馈是有效的,它指出了产品设计上可能存在的局限,而非用户使用方法的错误。用户的预期(一个应用能通过多个服务空间推送)在当前的 uni-push 架构下可能无法通过简单的配置实现。
getPushManager 实例来发送消息。但这会引入额外的管理复杂度。 总结来说,用户遇到的问题是产品设计限制导致的,并非操作失误。建议调整业务架构,统一服务空间是最佳实践。