在XMPP中获取脱机消息

时间:2012-11-02 11:23:13

标签: android xmpp chat offline

在我的聊天应用程序中,我想在用户登录时获取离线消息(如果有人向他发送消息)。我在用户处于在线状态时收到通知,并且在用户登录后无法收到消息。我也查过了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);

    }

当用户在线时,此功能正常。但我希望一旦用户登录,他应该收到他的消息通知

谢谢

2 个答案:

答案 0 :(得分:2)

您必须确保您的XMPP服务器支持XEP 0136,即XMPP的邮件存档扩展。

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

对于ejabberd,您可以为此安装和配置the mod_archive extension。它会将消息保存到SQL后端。

答案 1 :(得分:0)

更改过滤器以过滤Message.class类型的消息而不是聊天消息,因为离线消息不是聊天类型(我不认为)

PacketFilter filter = new PacketTypeFilter(Message.class);

看看你怎么走。

实际上重读你的问题;你是说你可以看到在LogCat中收到的离线信息但是没有在屏幕上收到?你在哪里记录收到的消息?