在XMPP中获取离线消息



在我的聊天应用程序中,当用户登录时,我想获得离线消息(如果有人向他发送了消息)。当用户处于在线状态时,我会收到通知,并且在用户登录后无法获得消息。我还检查了XMPP日志猫。我能够在那里阅读离线消息,但我无法通知用户他/她的ofline mesages。

这是我在服务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);
    }

当用户在线时,这正常工作。但是我希望一旦用户登录他的消息,他的消息应通知他

谢谢

您必须确保XMPP服务器支持XEP 0136,XMPP的消息归档扩展。

同样的扩展名将解释如何检索存档的消息。

对于Ejabberd,您可以为此安装和配置MOD_ARCHIVE扩展名。它将将消息保存到SQL后端。

将过滤器更改为类型消息的过滤消息。

PacketFilter filter = new PacketTypeFilter(Message.class);

看看你的行为。

实际上阅读了您的问题;您是说可以在logcat中看到离线消息,但在屏幕上未收到?您在哪里记录收到的消息?

最新更新