我无法在 smack android 的 MessageListener 方法中接收离线消息

Posted

技术标签:

【中文标题】我无法在 smack android 的 MessageListener 方法中接收离线消息【英文标题】:I am not able to receive offline messages in MessageListener method in smack android 【发布时间】:2019-09-07 09:18:29 【问题描述】:

当我启用 setUseStreamManagementDefault 或 setUseStreamManagementResumptiodDefault 时,我无法在 ChatManagerListener 界面中接收离线消息。如果 setUseStreamManagementDefault 和 setUseStreamManagementResumptiodDefault 都被禁用,那么我能够接收离线消息,但我无法在 addStanzaAcknowledgedListener 中接收节确认。我想接收离线消息以及节确认我该怎么办?

我尝试使用 OfflineMessageManager,但无法接收离线消息。 我不想使用 OfflineMessageManager ,不使用 OfflineMessageManager 是否可以接收离线消息?

【问题讨论】:

【参考方案1】:

AFAIK 你必须使用 OfflineMessageManager。我没有找到其他方法。

OfflinemessageManager offlineMessageManager = new OfflineMessageManager(connection);
if (offlineMessageManager.supportsFlexibleRetrieval() && offlineMessageManager.getMessageCount() > 0) 

                List<String> messagesNodes = offlineMessageManager.getHeaders().stream()
                        .map(OfflineMessageHeader::getStamp)
                        .collect(Collectors.toList());
                offlineMessageManager.getMessages(messagesNodes)
                        .forEach(message -> 
                            System.out.println(String.format(offlineMessageOffline, message.getBody(), message.getFrom()));
                        );
                offlineMessageManager.deleteMessages();
            

也不需要在这段代码中做任何事情。 IncomingChatMessageListener会自动收听离线消息

【讨论】:

以上是关于我无法在 smack android 的 MessageListener 方法中接收离线消息的主要内容,如果未能解决你的问题,请参考以下文章

我无法在 smack android 的 MessageListener 方法中接收离线消息

Smack Android 客户端无法连接到 ejabberd 服务器

无法使用 Smack 4.1 从 Android 连接 apache vysper XMPP 服务器

SmackInitialization:无法确定 Smack 版本

无法在 android 上使用 igniterealtime smack 无法解析 xpp3:xpp3:1.1.4c

如何在 Android 的 Smack 中接收文件?