从自定义 eJabberd 服务器检索聊天记录
Retrieve chat history from custom eJabberd server
我已经在我的 Android 应用程序中成功实现了一对一聊天。我使用 SQLite 将两个用户之间的聊天保存为应用程序数据库。但是当用户卸载应用程序时,这个聊天就会被删除。我需要知道的是如何在我的服务器上保存两个用户之间的聊天,这样每当用户重新安装应用程序或登录任何其他设备时,他都可以看到他以前的聊天。我在我的 ejabberd 服务器上启用了 mod_archive 和 mod_mam,我可以在应用程序中检索离线消息。谢谢
你需要关注 xep - 0136
http://xmpp.org/extensions/xep-0136.html
对于 smack,你需要通过以下方式获取它:
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();
}
}
我已经在我的 Android 应用程序中成功实现了一对一聊天。我使用 SQLite 将两个用户之间的聊天保存为应用程序数据库。但是当用户卸载应用程序时,这个聊天就会被删除。我需要知道的是如何在我的服务器上保存两个用户之间的聊天,这样每当用户重新安装应用程序或登录任何其他设备时,他都可以看到他以前的聊天。我在我的 ejabberd 服务器上启用了 mod_archive 和 mod_mam,我可以在应用程序中检索离线消息。谢谢
你需要关注 xep - 0136
http://xmpp.org/extensions/xep-0136.html
对于 smack,你需要通过以下方式获取它:
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();
}
}