代码之家  ›  专栏  ›  技术社区  ›  Paritosh Chaudhary

从自定义eJabberd服务器检索聊天历史记录

  •  2
  • Paritosh Chaudhary  · 技术社区  · 9 年前

    我已经在我的Android应用程序中成功实现了一对一聊天。我使用SQLite将两个用户之间的聊天保存为应用程序数据库。但当用户卸载应用程序时,此聊天将被删除。我需要知道的是如何在我的服务器上保存两个用户之间的聊天,这样,无论用户何时重新安装应用程序或登录任何其他设备,他都可以看到他以前的聊天记录。我已经在ejabberd服务器上启用了mod_archive和mod_ mam,我可以在应用程序中检索离线消息。谢谢

    1 回复  |  直到 9 年前
        1
  •  5
  •   Jaspreet Chhabra    9 年前

    您需要遵循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();
            }
        }