2016-02-01 34 views
4

我正在使用實施XEP-0313的XMPP服務器來檢索對話歷史記錄。我只想提取每個對話的最後一條消息,以便我可以構建預覽最後一條消息的最近對話列表。使用XEP-0313獲取每次對話的最後一條消息?

我已經設法獲取所有對話的所有消息,並基於該消息我可以構建列表,但這是數據的一大浪費,而不是一個選項。我不確定這是否是完成這項工作的正確延伸,所以如果有另一個延伸我應該看看,請指導我朝着正確的方向前進。

+0

我正在用xmpp開發一個android聊天應用程序。我已經成功實現了這一點,並且我能夠發送和接收消息。我在設備上使用SQLite在內部存儲聊天數據,但是一旦卸載應用程序,聊天數據就會被刪除。所以我檢查了XEP-0313可以保存服務器上的用戶之間的聊天,並且我在從eJabberd服務器獲取兩個用戶之間的聊天記錄時遇到了問題。我已閱讀關於XEP - 0313,但我不知道如何在我的Android應用程序中使用它。我正在使用Android Studio。謝謝 –

+0

@Paritosh我不明白這與我的問題有什麼關係。好像你只是想要我的幫助實施XEP-0313。我爲iOS做了這樣的工作,所以我不確定哪些庫可用於Android,但對於iOS而言,我無法在當時找到此協議的實現,因此我必須自己實施。這是很多工作,但我不能說這很困難。這只是正常的開發工作。如果你需要別人來做你的開發工作,你應該聘請一個人。我目前無法使用,但如果你只需要幫助就可以開始,我想我可以找到時間。 –

+0

嗨.. !!感謝回覆。我現在已經在Android中成功實施了XEP - 0313。我只是想知道我們如何在Android中實現該庫,因爲獲取歷史記錄的方法應與我們在Android和iOS中使用相同庫的方法類似。我在末尾使用了MamManger來檢索歷史記錄。 –

回答

2

您可以輕鬆完成的一件事是首先檢索用戶的名單,然後爲每個聯繫人檢索最新消息。

<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上非常罕見。

+0

我對XMPP的經驗非常有限,但根據我的理解,名單是您的「聯繫人列表」。我假設它不包括羣聊,對吧?這意味着如果你參加一個羣組聊天,它不會使用這種技術出現在對話歷史記錄中,這對我來說不夠好。如果我的假設錯誤,請糾正我。 –

+0

正確,你的名單是你的聯繫人名單。在我看來,大多數服務器實現並不存檔羣聊消息,而是假設羣聊服務器自己公開MAM存檔。這意味着獲取最後一條消息很容易,但要發現用戶所在的羣組聊天會很難,除非他們全都加了書籤。 – xnyhps

+0

在我看來,我可能需要一個非標準的XMPP擴展來完成任務。考慮到我的用例必須非常普遍,並且XMPP是主導標準,我覺得有點令人驚訝。有人必須在我面前做到這一點。 –

相關問題