Neveregret
Neveregret
  • 发布:2024-08-15 09:55
  • 更新:2024-08-15 11:33
  • 阅读:218

uni im基于appid的消息推送机制,导致一些问题比较难处理

分类:uniCloud

首先承认uni im是个很好的产品,但也存在一些问题。由于uni im的推送基于appid,在需要推送消息的场景,包括但不限于不同appid应用的用户在同一群中聊天、添加好友、拉别人进群、自己进群、删除好友、同意添加为好友、收发im系统消息、群通知、创建群聊等等这些功能,在不同appid的应用之间实现这些功能,会有挺大的麻烦。比如以下场景很难实现:

业务场景类似拼多多,用户端可以跟商户端聊天,用户端的用户可以互相聊天。各端都需要实现离线推送能力。这个场景有以下解决方案,但都存在各自的问题:

1.用户端和商家端各自集成uni im,按照以上说的,由于是不同的appid,这个很难实现。
2.独立部署一个web版uni im,用户端和商户端通过webview接入这个im,应用在离线场景下,webview都没启动,这样肯定是无法实现离线推送能力。
3.独立部署一个uni im,让它的appid和商户端应用的appid相同,用户端和商户端通过webview接入这个im。这样存在两个问题,一个是只有商户端能收到离线消息,用户端收不到离线推送;另一个是用户端的用户登录到im后,相当于也登录了商户端,即用户在用户端注册后,也就获得了登录商户端的能力,这样虽然好像也不算什么大事,但不利于不同端用户隔离。

而其他的im产品貌似没有这个问题,核心根源在于uni im在执行推送消息相关的操作时,是基于appid的,即是区分应用的。uni im是个很好的产品,希望未来能解决这个问题,改变这个机制,使推送消息相关的操作跟appid无关。

2024-08-15 09:55 负责人:无 分享
已邀请:
DCloud_uniCloud_JSON

DCloud_uniCloud_JSON

从原理上就绕不开 appid,对手机厂商而言你必须告知,把消息发到哪个 App,appid 只是个标识,就算没有 appid 也得有包名之类的标识。

1.用户端和商家端各自集成uni im,按照以上说的,由于是不同的appid,这个很难实现。

答:文档部署步骤 10 明确说明了:如果你是2个不同appId的应用相互通讯(比如:淘宝的买家端和卖家端通讯)的场景,请打开聊天对话文件(路径:/uni_modules/uni-im/pages/chat/chat)搜索msg.appId = this.systemInfo.appId修改this.systemInfo.appId为相对的appId

2.独立部署一个web版uni im,用户端和商户端通过webview接入这个im,应用在离线场景下,webview都没启动,这样肯定是无法实现离线推送能力。

答:离线消息不是通过webview里面的 im 接收,应当直接当前 App 接收离线消息然后和webview通讯

3.独立部署一个uni im,让它的appid和商户端应用的appid相同,用户端和商户端通过webview接入这个im。这样存在两个问题,一个是只有商户端能收到离线消息,用户端收不到离线推送;另一个是用户端的用户登录到im后,相当于也登录了商户端,即用户在用户端注册后,也就获得了登录商户端的能力,这样虽然好像也不算什么大事,但不利于不同端用户隔离。

答:按上述 1 的做法把appId设置为相对的appId即可解决:两个 App 只有一个能接收离线消息的问题。
另外关于:“不利于不同端用户隔离”。这个理解错误:端 ≠ 代码放在一起打包,最终产品是在一起就是一个端。独立构件模式,这个模块在哪里就属于哪个端。看最终实际应用,而不是看代码文件夹在哪里。

  • Neveregret (作者)

    我看了看其他的im产品,它们并没有非要绑定appid这个问题,基于unipush的uni im如果无法绕开绑定appid的话,是不是unipush本身就无法很好的实现im呢?相比其他的im产品,这确实是个问题。

    另外,上述解决方法感觉并不能彻底解决以上问题,正如我帖子里说的,uni im中含有大量推送消息相关的操作,包括但不限于不同appid应用的用户在同一群中聊天、添加好友、拉别人进群、自己进群、删除好友、同意添加为好友、收发im系统消息、群通知、创建群聊等等这些功能,通过修改appid这种方式,细节太多了,改起来真的太难了。说个极端场景,如果是三个appid有通信需求,在当前绑定appid的机制下,几乎就没办法实现了。

    如果实在绕不开appid这个事,能否调研参考下其他im的设计思路,来实现uni im呢?

    这个问题不解决,感觉“多appid应用通信的同时实现离线推送”,始终会是个问题,并且这个需求其实挺广泛的,希望官方能够考虑一下,我也会持续支持并关注uni im

    2024-08-15 15:42

  • DCloud_uniCloud_JSON

    回复 Neveregret: 添加好友、拉别人进群、自己进群、删除好友、同意添加为好...这些功能,没有计划在不同 appid 中打通


    其他关于必须 appid是逻辑问题,并不是技术问题

    2024-08-16 11:31

要回复问题请先登录注册