現在、SMACK API と Openfire を使用する際に直面している問題は、OfflineMessageManager を使用してサーバーからオフライン チャット メッセージを取得した後、特定のメッセージを削除できないことです。
このメソッドを使用して、メッセージのノードを取得します。ここで、offlineMessage は、取得するすべてのオフライン メッセージを保持する arrayList です。このノードは、stamps という名前の別の arrayList に保存されます。
((OfflineMessageInfo)offlineMessages.get(i)).getNode();
これは、オフライン メッセージの削除コードを実行する部分です。
omm.deleteMessages(stamps);
しかし、getMessageCount を実行すると、すべての offlineMessage がまだそこにあり、何も削除されないため、メソッドを参照して何か不足していないかを確認します。送信したパケットをログに記録し、受信した応答は、この Web サイトで言及されているものとまったく同じです。
すべてではなく特定のメッセージのみを削除する必要がある理由は、オフライン メッセージのダウンロード中に新しい受信メッセージがあり、自分のプレゼンスがまだ利用可能に設定されていないためです。すべてを削除することを選択した場合、それらの新しいメッセージはなくなります。削除しなかった場合、プレゼンスをオンラインに設定すると、取得したメッセージがあふれて重複が発生します。
編集済み:ちょうど今、null/random characterノードを渡すことを含むいくつかのテストを行い、サーバーはまだまったく同じ応答を返しました
06-26 15:00:53.276: D/debugger(24069): response : <iq id="remove_test" to="someone@something.com/Smack" type="result"></iq>
これはサーバー側の問題でしょうか?