【问题标题】:one to one chat history with open fire and smack一对一的聊天记录,带有开火和smack
【发布时间】:2018-12-12 16:49:57
【问题描述】:

我已经在我的系统中安装了 open fire,通过使用邮递员工具,我能够创建用户,并且通过使用 smack,我也可以将消息发送给其他用户.. 但问题是我不知道如何获取两个用户之间的聊天记录..这意味着如果我发送 from 和 to 用户名,我需要获取以前的聊天记录。 我可以在开火服务器中看到聊天记录->存档文件夹.. 但我不知道如何获取聊天记录。 是否有任何 Rest API 可用于获取两个用户之间的聊天记录..

请提供任何可能的解决方案

谢谢

这是我能看到的聊天记录

【问题讨论】:

  • 如果您使用的是MAM,那么您可以从MamManager 获取历史记录。请参阅This 和类似问题。
  • 感谢您的回复。但我没有在我的实现类中使用mammanager
  • mammanager 我猜是 Smack 4.2 的一部分。 MAM 插件可用于 openfire 。如果您进入 Open Fire 控制台中的插件,您将看到它为 Message Archive 。阅读xmpp.org/extensions/xep-0313.html

标签: java android openfire smack


【解决方案1】:

如果你想通过 smack 从 Openfire 获取聊天记录:

  1. 正如您已经完成的那样,通过在 Openfire 中安装 MonitoringService 插件来启用 MAM (XEP-0313)。

  2. 现在从 Openfire 服务器转到:服务器>存档>存档设置并选中“存档一对一聊天”和“存档群聊”并保存点击“更新设置”。

  3. 从现在开始,任何聊天都将保存在 Openfire 上。与某人开始新的聊天并重新安装您的 Android 应用。

  4. MAM 是“smack-experimental”的一部分。所以你必须将这一行添加到你的 Gradle 中:

    implementation 'org.igniterealtime.smack:smack-extensions:4.2.2'
    
  5. 其中一个成功连接和授权后,您可以逐页获取聊天记录,也可以根据需要使用此代码:

    MamManager manager = MamManager.getInstanceFor(connection);
    MamManager.MamQueryResult r = manager.mostRecentPage([userBareJID], [numberOfMessages]);
    if (r.forwardedMessages.size() >= 1) //printing first of them
    {
        Message message = (Message) r.forwardedMessages.get(0).getForwardedStanza();
        Log.i("mam", "message received" + message.getBody());
    }
    

【讨论】:

  • 能否请您也给我一些关于这个问题的建议::stackoverflow.com/questions/51682932/…
  • 我已经为您的宝贵回复投了票,但由于我赢得的声誉较低,因此不考虑我的投票
  • 您需要添加以下 gradle 依赖项以使用 MamManager 类“implementation "org.igniterealtime.smack:smack-experimental:4.2.2"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2016-10-23
  • 2014-03-06
  • 2020-12-10
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多