使用 smack 从消息存档 openfire 中获取最新对话

Posted

技术标签:

【中文标题】使用 smack 从消息存档 openfire 中获取最新对话【英文标题】:fetching newest conversation from message archive openfire using smack 【发布时间】:2013-07-29 15:40:53 【问题描述】:

大家好,我正在使用这些代码行通过 smack 获取对话列表

@Override
protected Void doInBackground(String... strings) 

    final ArrayList<UsersData> users 
        = UsersManager.getInstance().getUsers();

    int count = 0;
    while(count < users.size()) 

        try 
            Thread.sleep(500);
            final String jid 
                = users.get(count).getUserJID();

            IQ iq = new IQ() 

                @Override
                public String getChildElementXML() 
                    String list = "<list xmlns='urn:xmpp:archive'"+
                            "with='"+jid+"'>"+
                            "<set xmlns='http://jabber.org/protocol/rsm'>"+
                            "<max>30</max></set></list>";
                    return list;
                
            ;

            iq.setType(IQ.Type.GET);
            iq.setPacketID(jid+System.currentTimeMillis());

            service.getXmppConnection().sendPacket(iq);
            Log.v("XmppAsyncHistory", "IQ List sent!");

         catch (InterruptedException e) 
            e.printStackTrace();
        

        count++;
    

    return null;

我已添加我的 iq 提供程序。

        provider.addIQProvider("list", "urn:xmpp:archive", new ListIQProvider());

我得到这节来回复。

D/SMACK(11130): 10:34:30 PM RCV  (1096010080): 
<iq type="result" 
id="24@suitmedia1375112070174" 
to="17@suitmedia/Smack"><list xmlns="urn:xmpp:archive">
chat with="24@suitmedia" 
 start="2013-07-25T09:57:04.121Z"/>
<chat with="24@suitmedia"  
 start="2013-07-25T11:08:28.997Z"/>
<chat with="24@suitmedia" 
 start="2013-07-29T09:29:18.295Z"/>
<chat with="24@suitmedia" 
 start="2013-07-29T07:47:29.841Z"/>
<set  xmlns="http://jabber.org/protocol/rsm">
<first index="0">184</first><last>216</last>
<count>4</count></set></list></iq>

如您所见,它返回的不是最新的对话,而是分别从 25/07 到 29/07 中最旧的对话

我想问的是这些标签是什么意思? 184216 以及如何获取最近时间的对话列表顺序?

谢谢!

【问题讨论】:

【参考方案1】:

您应该在当前时间的“列表”元素中添加一个属性“结束”。 XML 将如下所示:

<iq type='get' xmlns='jabber:client'><list xmlns='urn:xmpp:archive' end='2014-05-28T08:48:56+08:00' with='somebody@somesite'><set xmlns='http://jabber.org/protocol/rsm'><max>10</max><before/></set></list></iq>

【讨论】:

以上是关于使用 smack 从消息存档 openfire 中获取最新对话的主要内容,如果未能解决你的问题,请参考以下文章

无法从 openfire 检索存档消息

使用 Smack 和 Openfire 发送/接收消息时遇到问题

如何使用 smack 和 openfire 获取 IOS 中每个聊天会话的最后一条消息?

无法通过 Smack API 使用 openfire 服务器发送/接收消息

如何使用 Smack 在 XMPP openfire 中了解打字状态

如何使用 Smack 在 XMPP openfire 中了解打字状态