如何使用 SMACK API (4.2.0 Beta1) 在 Openfire (Ver 4.0.3) 中保留用户(MultiUserChat)和聊天记录

How to persist users(MultiUserChat) and chat history in Openfire (Ver 4.0.3) using SMACK API (4.2.0 Beta1)

我已经成功创建了一个多用户聊天组,但是用户离线了,用户被从组中删除了,我想在用户下次登录时保存消息历史记录。我发现了一些以前的方法和推导如下

  1. 有几个旧答案,但 none 其中是基于新的 SMACK API 4.1.5+

  2. 使用 "Stream Management",但我不知道该做什么以及如何做,它如何帮助解决我的问题。

  3. 使用 PUBSUB 获取消息并传递给用户并显示用户的伪列表

我想知道最好和有效的方法或任何有助于实现我的结果的库。我是 XMPP 的新手,在 java

方面有 2 年以上的经验

注意:我正在寻找 whatsapp 群聊实施 到 kick/invite/providing_permissions 用户和 notifications/when 他离线的消息历史记录。

我一直在寻找这个,非常感谢任何帮助。 提前致谢。

我认为有两种选择:

您可以尝试阻止客户端无缝离开/断开连接或重新加入,这都非常困难,而且可能无法完全正确。

替代方案:Openfire MUC 实现可以配置为在参与者加入房间时发送整个历史记录(或可配置数量的最后条目)。这是检索在您加入之前发送的所有消息的粗略方法。

另一种选择是以另一种方式进入 MUC 房间的历史记录:我认为监视器插件将房间的历史记录保存到数据库中(或者至少应该这样做)。也许你可以利用这一点。如果一切都失败了,你可以创建你自己的插件,做类似的事情:拦截所有消息 to/from MUC 服务器端,将它们保存到数据库,并允许客户端以某种方式检索此历史记录。

对于任何解决方案,您都应该考虑到隐私。当您存储数据并使其可检索时,您应该仔细考虑谁将看到什么。

@hard-coder:您似乎是从客户端查看内容,而@guus 提出了服务器端解决方案。根据您的要求:whatsapp 群聊实施 服务器端解决方案将起作用,因为它不能在客户端完成。

WhatsApp 在 XMPP 之上具有 MUC 的自定义实现,因此您必须通过自定义在 Openfire Server 中开发它。或等待MIX在任何服务器中的实现:Openfire、Ejabberd、MongooseIM。

也看看MUC Light implemented by MongooseIM

如果您想要解决方案,您可以随时获得具有您想要的功能的 Ejabberd 或 MongooseIM 商业版。但它们是商业解决方案。

MUC 在 openfire 服务器中功能不全。并使用它来获取聊天记录:

在数据库中保存消息和群组名称,当连接到xmpp时,从数据库连接到所有群组