【问题标题】:I am not able to receive offline messages in MessageListener method in smack android我无法在 smack android 的 MessageListener 方法中接收离线消息
【发布时间】:2019-09-07 09:18:29
【问题描述】:
当我启用 setUseStreamManagementDefault 或 setUseStreamManagementResumptiodDefault 时,我无法在 ChatManagerListener 界面中接收离线消息。如果 setUseStreamManagementDefault 和 setUseStreamManagementResumptiodDefault 都被禁用,那么我能够接收离线消息,但我无法在 addStanzaAcknowledgedListener 中接收节确认。我想接收离线消息以及节确认我该怎么办?
我尝试使用 OfflineMessageManager,但无法接收离线消息。
我不想使用 OfflineMessageManager ,不使用 OfflineMessageManager 是否可以接收离线消息?
【问题讨论】:
标签:
android
xmpp
ejabberd
smack
【解决方案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会自动收听离线消息