3

Android アプリで aSmack を使用して、Desktop-Jabber-client からメッセージを受信して​​います。これは正常に機能し、(接続が適切に閉じられた後) Android 携帯がオフラインであっても、次回のログイン後にオフライン メッセージを受信します。

しかし、電話で機内モードに入るか、電話をシャットダウンして接続が突然閉じられるようにすると (オブジェクトを呼び出すことなくdisconnect()) Connection、電話は Desktop-Jabber-client の連絡先リストで「オンライン」のままになります。 while と i にメッセージを送信できます。ただし、これらのメッセージは届きません。電話がサーバーに再度ログインしても。これらのメッセージは失われます。

この問題を解決する方法を知っている人はいますか? チャットでメッセージを失うことはありません。:)

編集: テストコード
BroadcastReceiver を追加: http://pastebin.com/cFLzGXgy
サービス: http://pastebin.com/wLpQCQfT

1 つ目は、電話がネットワークに接続されるたびにサービス (2 番目の URL) を開始する BroadcastReceiver です。

PS: これは単なるテスト コードです。使用/テストする場合は、サーバー/ユーザー名/パスワードを変更する必要があります。

4

3 に答える 3

4

メッセージの到着時に、クライアント b からクライアント A に配信されたメッセージの送信を試みることができます。問題は、クライアント A がオフラインの場合 (接続が切断されていない場合)、配信された確認がユーザーがメッセージを受信するまで送信されず、クライアント B がメッセージを再送信できないことです。

于 2012-03-21T11:10:49.620 に答える
1

Smackxメッセージ イベントを使用してメッセージの受信確認を送信することを試みることができます 。これにより、メッセージが確実に配信されます。それ以外の場合は、修正措置を講じることができます。

于 2011-12-28T18:47:56.680 に答える
1

この問題は、接続が切断されたときに発生します。このメッセージを表示するには、「ストリーム管理」XEP-198 対応の接続が必要です。このブログを参照してください: http://op-co.de/blog/posts/XEP-0198/基本的に、スタンザの確認とストリームの再開が可能です。これはまさにケースでやりたいことです。 4.1 がリリースされます。

于 2014-12-24T08:25:15.317 に答える