2016-12-24 53 views
0

我已經在我的Android應用程序中成功實現了一對一聊天。我已經使用SQLite在應用程序數據庫中保存兩個用戶之間的聊天。但是當用戶卸載應用程序時,這個聊天會被刪除。我需要知道的是,我如何在我的服務器上保存兩個用戶之間的聊天,因此每當用戶重新安裝應用程序或登錄任何其他設備時,他都可以看到他以前的聊天記錄。我在我的ejabberd服務器上啓用了mod_archive和mod_mam,並且能夠在應用程序中檢索離線消息。由於從自定義eJabberd服務器檢索聊天記錄

+2

甚至我還停留在內部監督辦公室在同一地點:( – Gulshan

+0

@Paritosh我在iOS也有同樣的問題請讓我知道,如果你有它的答案 –

+0

@MaheshNarla我仍然陷在這裏,一旦我有一個完美的解決方案,我一定會讓你知道。 –

回答

3

您需要按照XEP - 0136

http://xmpp.org/extensions/xep-0136.html

對於揍你需要得到它的方式如下:

public void loadArchiveMessages(Jid jid, XMPPTCPConnection xmppTcpConnection){ 
     try { 
      MamManager mamManager=MamManager.getInstanceFor(xmppTcpConnection); 
      MamManager.MamQueryResult mamQueryResult = mamManager.queryArchive(jid); 
      List<Forwarded> forwardedMessages=mamQueryResult.forwardedMessages; 
      Iterator<Forwarded> forwardedIterator=forwardedMessages.iterator(); 
      while (forwardedIterator.hasNext()){ 
       Forwarded forwarded=forwardedIterator.next(); 
       Stanza stanza=forwarded.getForwardedStanza(); 
       if (stanza instanceof Message) { 
        String messageId=stanza.getStanzaId(); 
        xmppTcpConnection.processMessage((Message) stanza); 
       } 
      } 
     } catch (XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NotLoggedInException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NotConnectedException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NoResponseException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

嗨Jaspreet !!感謝您的回答。我試圖在我的應用程序中實現此代碼,但我無法解析Android Studio中的MamManager和Jid。我可以知道你在Forwarded類中使用的字符串嗎?請讓我知道我是否缺少任何東西。 –

+0

package org.jivesoftware.smackx.mam; UPVOTE請 –

+1

嗨Jaspreet .. !!再次感謝你的回覆。我在導入的庫中找不到這個軟件包。對不起,如果我在這裏問任何愚蠢的問題,但我是新的這個蹩腳的實施。是否有任何jar文件或更新版本的smack庫。我目前正在使用4.1.9版本。當我搜索更多關於從服務器檢索聊天記錄時,我遇到了一個新的過程,即將自定義IQ發送到服務器。你能否向我解釋一下你的方法與自定義智商部分有何不同。在這個過程中更多的指導是非常值得讚賞的。提前致謝。 –