- 你好,项目后端是传统服务器php+mysql,现在想引入unipush2.0,已开通unicloud。没引入uni-id-pages,还是自己原来的mysql用户id体系,看了下图的文档,有点迷茫。既然推送服务器底层只识别个推客户端id---push_clientid,且经测试,只要用户不卸载app,每次运行app在app.vue中通过uni.getPushClientId获得的push_clientid是不变的。
项目是用户间im即时通讯,显然是需要用户在登录状态才能收到消息,可基于push_clientid的推送可不管用户是不是已退出登录,这种情况下该如何处理用户退出后的消息推送逻辑啊?*
8***@qq.com
- 发布:2024-11-10 09:17
- 更新:2024-11-11 10:42
- 阅读:402
BoredApe - 有问题就会有答案。
如果使用的自己的服务器没有使用unicloud。推荐使用push1.0。直接使用个推RestAPI API向用户推送。
用户离线时,使用离线厂商推送。请参考文档:https://uniapp.dcloud.net.cn/unipush-v1.html#_1-2-%E5%BC%80%E9%80%9A%E7%A6%BB%E7%BA%BF%E5%8E%82%E5%95%86%E6%8E%A8%E9%80%81%E6%9C%8D%E5%8A%A1
个推文档请参考:https://docs.getui.com/getui/server/rest_v2/introduction/

8***@qq.com (作者)
已经开通unicloud了,主要开发一键登录功能也要用。
另外,现在不是用户离线,离线推送的离线只是应用后台运行或进程结束,但用户自身并没有退出登录。
现在主要是不知道怎么处理用户主动退出登录后的推送逻辑。我能想到的路线是:每次用户登录时,向数据库写入用户id和push_clientid的映射关系,用户退出登录时,同时删除该用户id对应的push_clientid记录。这样用户有消息接收时,通过用户id查询对应的push_clientid,如果能查询到,则php服务器调用unicloud云函数的uniPush.sendMessage方法(传参push_clientid),如果查询不到则返回。但总感觉这种方法比较low,应该不是正常路线,没有文档中写的校验token的过程。
2024-11-11 10:36
DCloud_uniCloud_JSON
回复 8***@qq.com: 你查 users 表时直接过滤 token 已经过期/无效 的用户。如果无效直接就返回了,无需查cid 和 uid的映射表
2024-11-25 16:03