3

私のチャットアプリケーションでは、ユーザーがサインインしたときにオフラインメッセージを取得したいと考えています (誰かが彼にメッセージを送信した場合)。ユーザーがオンライン状態のときに通知を受け取り、ユーザーがサインインした後にメッセージを取得できません。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);

    }

これは、ユーザーがオンラインのときに正常に機能します。しかし、ユーザーがログインしたら、メッセージを通知する必要があります

ありがとう

4

2 に答える 2

2

XMPP サーバーが、XMPPのメッセージ アーカイブ拡張機能であるXEP 0136をサポートしていることを確認する必要があります。

その同じ拡張子が、アーカイブされたメッセージを取得する方法を説明しています。

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 に答える