【问题标题】:How to implement a list of chats with XMPP如何使用 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

标签: xmpp ejabberd


【解决方案1】:

但我找不到合适的方式来显示聊天列表

特定帐户入住(已加入)的房间列表:

$ ejabberdctl get_user_rooms user1 localhost
room1@muc.localhost
room2@muc.localhost

【讨论】:

  • 这对群聊来说是对的,但用户也可能有1-1的聊天。如何获取 1-1 聊天列表?
  • 您可以通过查看 MAM 存档了解用户已发送给另一个用户或从另一个用户收到了哪些消息。除此之外,服务器不会保留更多信息。
  • 嗯,这不好。假设我有 30 个聊天,这意味着我需要在启动应用程序上向 MAM 发出 30 个请求以呈现聊天列表屏幕。我想省略它。我想将其限制为启动应用程序上的几个请求,然后当用户进行特定聊天时 - 检查聊天聊天的 MAM。这样的事情有可能吗?
  • 这里有什么建议吗?
猜你喜欢
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多