【问题标题】:Get last message of each conversation with XEP-0313?获取与 XEP-0313 的每次对话的最后一条消息?
【发布时间】:2016-05-09 20:46:26
【问题描述】:

我正在使用实现 XEP-0313 的 XMPP 服务器来检索对话历史记录。我想只获取每个对话的最后一条消息,以便构建您最近的对话列表以预览最后一条消息。

我已设法获取所有对话的所有消息,并以此为基础构建列表,但这是对数据的极大浪费,不是一种选择。我不确定这是完成此任务的正确扩展,因此如果我应该查看另一个扩展,请引导我朝着正确的方向前进。

【问题讨论】:

  • 我正在使用 xmpp 开发一个安卓聊天应用程序。我已经成功实现了这一点,并且能够发送和接收消息。我已经在设备上使用 SQLite 在内部存储了聊天数据,但是一旦卸载应用程序,聊天数据就会被删除。所以我检查了 XEP - 0313,它可以保存服务器上用户之间的聊天记录,我在从 eJabberd 服务器检索两个用户之间的聊天记录时遇到了问题。我已阅读有关 XEP - 0313 的信息,但我不知道如何在我的 android 应用程序中使用它。我正在使用安卓工作室。谢谢
  • @Paritosh 我看不出这与我的问题有什么关系。好像你只是想要我帮助实施 XEP-0313。我是为 iOS 做的,所以我不确定 Android 有哪些库可用,但是对于 iOS,我当时找不到这个协议的实现,所以我不得不自己实现它。这是很多工作,但我不能说这很困难。这只是正常的开发工作。如果您需要其他人来完成您的开发工作,您应该聘请其他人。我目前不在,但如果您只需要帮助开始,我想我可以找到时间。
  • 嗨..!!感谢回复。我现在已经在 Android 中成功实现了 XEP - 0313。我只是想知道我们如何在 Android 中实现该库,因为获取历史记录的方法应该与我们在 Android 和 iOS 中使用相同的库相似。我最后使用 Mammanger 来检索历史记录。
  • @ErikB 你找到合适的解决方案了吗?我在这里问类似的问题stackoverflow.com/questions/52085402/… 但仍然没有上帝的建议

标签: xmpp


【解决方案1】:

您可以轻松完成的一件事是首先检索用户的名单,然后为每个联系人检索最新消息。

<iq from='juliet@example.com/balcony'
    id='bv1bs71f'
    type='get'>
  <query xmlns='jabber:iq:roster'/>
</iq>

结果:

<iq id='bv1bs71f'
    to='juliet@example.com/chamber'
    type='result'>
   <query xmlns='jabber:iq:roster' ver='ver7'>
     <item jid='nurse@example.com'/>
     <item jid='romeo@example.net'/>
   </query>
 </iq>

从或发往nurse@example.com 检索最后一条消息:

<iq type='set' id='juliet1'>
  <query xmlns='urn:xmpp:mam:1'>
    <x xmlns='jabber:x:data' type='submit'>
      <field var='FORM_TYPE' type='hidden'>
        <value>urn:xmpp:mam:1</value>
      </field>
      <field var='with'>
        <value>nurse@example.com</value>
      </field>
    </x>
    <set xmlns='http://jabber.org/protocol/rsm'>
      <max>1</max>
      <before/>
    </set>
  </query>
</iq>

当然,用户可以与不在他们名单上的人进行对话,但实际上这在 XMPP 上非常罕见。

【讨论】:

  • 我在 XMPP 方面的经验非常有限,但据我了解,名册是您的“联系人列表”。我假设它不包括群聊,对吧?这意味着如果您参与群聊,使用此技术将不会显示在对话历史记录中,这对我来说还不够好。如果我的假设是错误的,请纠正我。
  • 正确,您的名册就是您的联系人列表。在我看来,大多数服务器实现都不会归档群聊消息,而是假设群聊服务器自己公开一个 MAM 归档。这意味着很容易获得最后一条消息,但要发现用户参加过哪些群聊则要困难得多,除非他们都被添加了书签。
  • 在我看来,我可能需要一个非标准的 XMPP 扩展来完成任务。考虑到我的用例一定很常见并且 XMPP 是主导标准,我觉得这有点令人惊讶。一定有人在我之前做过这件事。
  • @ErikB 最近在编写名为 MIX 的新群聊协议方面取得了一些进展:xmpp.org/extensions/xep-0369.html。我认为使用 MIX 会更容易使用您的用例。
  • @xnyhps 如果您这样做,您将不得不为您名册中的每个成员进行网络调用。如果我的名册上有 1000 人,并且每个网络调用需要 250 毫秒,那么 25 秒加上大量的网络使用。有没有办法批量做到这一点?
猜你喜欢
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多