我正在使用实施XEP-0313的XMPP服务器来检索对话历史记录。我只想提取每个对话的最后一条消息,以便我可以构建预览最后一条消息的最近对话列表。使用XEP-0313获取每次对话的最后一条消息?
我已经设法获取所有对话的所有消息,并基于该消息我可以构建列表,但这是数据的一大浪费,而不是一个选项。我不确定这是否是完成这项工作的正确延伸,所以如果有另一个延伸我应该看看,请指导我朝着正确的方向前进。
我正在使用实施XEP-0313的XMPP服务器来检索对话历史记录。我只想提取每个对话的最后一条消息,以便我可以构建预览最后一条消息的最近对话列表。使用XEP-0313获取每次对话的最后一条消息?
我已经设法获取所有对话的所有消息,并基于该消息我可以构建列表,但这是数据的一大浪费,而不是一个选项。我不确定这是否是完成这项工作的正确延伸,所以如果有另一个延伸我应该看看,请指导我朝着正确的方向前进。
您可以轻松完成的一件事是首先检索用户的名单,然后为每个联系人检索最新消息。
<iq from='[email protected]/balcony'
id='bv1bs71f'
type='get'>
<query xmlns='jabber:iq:roster'/>
</iq>
结果:
<iq id='bv1bs71f'
to='[email protected]/chamber'
type='result'>
<query xmlns='jabber:iq:roster' ver='ver7'>
<item jid='[email protected]'/>
<item jid='[email protected]'/>
</query>
</iq>
从或向[email protected]检索的最后一条消息:
<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>[email protected]</value>
</field>
</x>
<set xmlns='http://jabber.org/protocol/rsm'>
<max>1</max>
<before/>
</set>
</query>
</iq>
当然用户都可以在没有他们的阵容与人交谈,但在实践中,这在XMPP上非常罕见。
我对XMPP的经验非常有限,但根据我的理解,名单是您的“联系人列表”。我假设它不包括群聊,对吧?这意味着如果你参加一个群组聊天,它不会使用这种技术出现在对话历史记录中,这对我来说不够好。如果我的假设错误,请纠正我。 –
正确,你的名单是你的联系人名单。在我看来,大多数服务器实现并不存档群聊消息,而是假设群聊服务器自己公开MAM存档。这意味着获取最后一条消息很容易,但要发现用户所在的群组聊天会很难,除非他们全都加了书签。 – xnyhps
在我看来,我可能需要一个非标准的XMPP扩展来完成任务。考虑到我的用例必须非常普遍,并且XMPP是主导标准,我觉得有点令人惊讶。有人必须在我面前做到这一点。 –
我正在用xmpp开发一个android聊天应用程序。我已经成功实现了这一点,并且我能够发送和接收消息。我在设备上使用SQLite在内部存储聊天数据,但是一旦卸载应用程序,聊天数据就会被删除。所以我检查了XEP-0313可以保存服务器上的用户之间的聊天,并且我在从eJabberd服务器获取两个用户之间的聊天记录时遇到了问题。我已阅读关于XEP - 0313,但我不知道如何在我的Android应用程序中使用它。我正在使用Android Studio。谢谢 –
@Paritosh我不明白这与我的问题有什么关系。好像你只是想要我的帮助实施XEP-0313。我为iOS做了这样的工作,所以我不确定哪些库可用于Android,但对于iOS而言,我无法在当时找到此协议的实现,因此我必须自己实施。这是很多工作,但我不能说这很困难。这只是正常的开发工作。如果你需要别人来做你的开发工作,你应该聘请一个人。我目前无法使用,但如果你只需要帮助就可以开始,我想我可以找到时间。 –
嗨.. !!感谢回复。我现在已经在Android中成功实施了XEP - 0313。我只是想知道我们如何在Android中实现该库,因为获取历史记录的方法应与我们在Android和iOS中使用相同库的方法类似。我在末尾使用了MamManger来检索历史记录。 –