如何使用 XMPP 实现聊天列表
Posted
技术标签:
【中文标题】如何使用 XMPP 实现聊天列表【英文标题】:How to implement a list of chats with XMPP 【发布时间】:2018-08-29 20:11:31 【问题描述】:我有 Ejabberd 服务器和移动 ios/android 应用程序。
我想构建一个带有 2 个屏幕的简单聊天应用:
聊天列表 特定聊天消息的屏幕我对聊天列表实施有疑问。我使用XEP-0313: Message Archive Management 来存储聊天历史记录,它非常适合我的第二个屏幕 - 包含特定聊天消息的屏幕。
但我找不到合适的方式来显示聊天列表
我有一个想法,将所有用户的联系人(名册)+ 组房间合并然后显示,但用户没有与其所有联系人进行有效聊天,所以这不是一个正确的解决方案。
在聊天列表屏幕上显示最后一条消息文本以及每个聊天也很好。 因此,这是所有现代信使中的一个非常标准的功能。
是否可以使用任何 XEP?或者我可以以某种方式使用 Message Archive XEP
这里有一些想法Get last message of each conversation with XEP-0313?,但仍然没有答案
【问题讨论】:
你使用本地存储,比如 SQLite 数据库吗?聊天列表和当前聊天有什么区别?是时差还是其他原因? 我使用 SQLite,但我希望我的所有设备都可以访问它,因此我所有设备的聊天屏幕上都应该显示相同的数据。 @KenanBegić “在聊天列表和当前聊天之间”是什么意思。我们可以随意调用它,它只是所有用户聊天的列表 @Rubycon,这是一个很好的问题。您找到答案或解决方法了吗? @AtomicBoolean 我最终构建了一个外部 API 端点来获取所有内容并提供给用户。此端点可以访问 Ejabberd DB 【参考方案1】:但我找不到合适的方式来显示聊天列表
特定帐户入住(已加入)的房间列表:
$ ejabberdctl get_user_rooms user1 localhost
room1@muc.localhost
room2@muc.localhost
【讨论】:
这对群聊来说是对的,但用户也可能有1-1的聊天。如何获取 1-1 聊天列表? 您可以通过查看 MAM 存档了解用户已发送给另一个用户或从另一个用户收到了哪些消息。除此之外,服务器不会保留更多信息。 嗯,这不好。假设我有 30 个聊天,这意味着我需要在启动应用程序上向 MAM 发出 30 个请求以呈现聊天列表屏幕。我想省略它。我想将其限制为启动应用程序上的几个请求,然后当用户进行特定聊天时 - 检查聊天聊天的 MAM。这样的事情有可能吗? 这里有什么建议吗?以上是关于如何使用 XMPP 实现聊天列表的主要内容,如果未能解决你的问题,请参考以下文章
一旦我可以使用 XMPP 列出用户,我如何在这些用户之间实现聊天?