我无法在 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 版本