在我的聊天应用程序中,我想在用户登录时获取离线消息(如果有人向他发送消息)。我在用户处于在线状态时收到通知,并且在用户登录后无法收到消息。我也查过了xmpp log cat。我能够在那里阅读离线消息,但我无法通知用户他/她的在线消息。
这是我在onStart服务中使用的监听器(服务立即在用户登录时启动)
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
final PacketCollector collector = connection.createPacketCollector(filter);
connection.addPacketListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
// TODO Auto-generated method stub
//notification(packet.getFrom());
packet = collector.nextResult();
Message message = (Message)packet;
senderName = packet.getFrom();
int alphaPOS = senderName.indexOf("@");
String subSenderName = senderName.substring(0,alphaPOS);
if(UserChatActivity.checkPresence==false){
notificationforChat(subSenderName+": "+message.getBody(),packet.getFrom().toString());
}
}
}, filter);
}
当用户在线时,此功能正常。但我希望一旦用户登录,他应该收到他的消息通知
谢谢
答案 0 :(得分:2)
您必须确保您的XMPP服务器支持XEP 0136,即XMPP的邮件存档扩展。
相同的扩展名将解释如何检索存档的消息。
对于ejabberd,您可以为此安装和配置the mod_archive extension。它会将消息保存到SQL后端。
答案 1 :(得分:0)
更改过滤器以过滤Message.class类型的消息而不是聊天消息,因为离线消息不是聊天类型(我不认为)
PacketFilter filter = new PacketTypeFilter(Message.class);
看看你怎么走。
实际上重读你的问题;你是说你可以看到在LogCat中收到的离线信息但是没有在屏幕上收到?你在哪里记录收到的消息?