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

标签 android xmpp chat ejabberd mod-archive-odbc

我已经在我的 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 - 从自定义 eJabberd 服务器检索聊天历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311186/

相关文章:

android - Qt on Android——C++代码是否在Dalvik虚拟机中运行

聊天服务器套接字

javascript - 了解带有回调的 JavaScript 代码

multithreading - 另一个 "Can' t 在未调用 Looper.prepare() 的线程内创建处理程序”主题

Android Kotlin Retrofit + SimpleXMLConverter ElementList 无法正确解析

android - 收集服务中的流

ios - 获取 XMPP 聊天记录 OpenFire

android - 如何使用 Smack 4.2 连接到 ejabberd?

ruby - Ruby 中 Blather for XMPP 的有效替代方案

node.js - 如何创建多个 Nodejs 套接字 io 服务器客户端?