3

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

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

    }

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

谢谢

4

2 回答 2

2

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

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

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

于 2012-11-03T16:53:27.580 回答
0

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

PacketFilter filter = new PacketTypeFilter(Message.class);

看你怎么走。

实际上正在重新阅读您的问题;您是说您可以在 LogCat 中看到正在接收的离线消息,但在屏幕上看不到?您在哪里记录收到的消息?

于 2013-08-07T00:00:52.463 回答