【问题标题】:Retrieve chat history from custom eJabberd server从自定义 eJabberd 服务器检索聊天记录
【发布时间】:2017-05-09 17:37:36
【问题描述】:

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

【问题讨论】:

  • 即使我也同时卡在 ios 中:(
  • @Paritosh 我在 iOS 中也遇到了同样的问题,如果你得到了答案,请告诉我。
  • @MaheshNarla 我仍然坚持这一点,一旦我有一个完美的解决方案,我一定会让你知道。

标签: android xmpp chat ejabberd mod-archive-odbc


【解决方案1】:

你需要关注 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 Studio 中解析 MamManager 和 Jid。我可以知道您在 Forwarded 类中使用的字符串吗?如果我遗漏了什么,请告诉我。
  • 包 org.jivesoftware.smackx.mam;请投票
  • 嗨贾斯普雷特..!!再次感谢您的回复。我在导入的库中找不到这个包。对不起,如果我在这里问任何愚蠢的问题,但我是这个 smack 实施的新手。是否有任何 jar 文件或更新版本的 smack 库。我目前使用的是 4.1.9 版本。当我搜索更多关于从服务器检索聊天记录的信息时,我遇到了一个新过程,即将自定义 IQ 发送到服务器。您能否解释一下您的方法与自定义 IQ 部分有何不同。在此过程中提供更多指导将不胜感激。提前致谢。
  • 我正在使用:编译“org.igniterealtime.smack:smack-im:$smackVersion”编译“org.igniterealtime.smack:smack-android:$smackVersion”编译“org.igniterealtime.smack: smack-tcp:$smackVersion" 编译 "org.igniterealtime.smack:smack-experimental:$smackVersion" 编译 "org.igniterealtime.smack:smack-android-extensions:$smackVersion"
  • 你好 Jaspreet...!!现在我可以解决除 xmppTcpConnection.processMessage((Message) stanza); 之外的所有其他方法;有没有其他方法可以解决这个问题?谢谢
猜你喜欢
  • 2012-04-12
  • 2017-01-15
  • 2021-02-21
  • 2018-06-05
  • 2015-11-05
  • 2013-02-16
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多