こんにちはメッセージを取得することができますアンドロイドのXMPPクライアントを行うにはどのような方法がある私はXEP-0184がピシャリであることを読まなく、通常ピシャリはアンドロイドで動作していない(または私はできません確認(XEP-0184)を受信それは)常にSASL認証の例外があります。SmackでXMPP XEP-0184「メッセージ配信確認書」を使用するにはどうすればよいですか?
答えて
スマックはSMACK-331でXEP-0184のサポートを受けました。スマート< 4.1をAndroidのすぐ下に使用することはできません。スマック4.1(またはそれ以上)が必要です。
あなたはDeliveryReceiptManagerのjavadocの中スマックのXEP-0184 APIの詳細を読むことができます。
はいこれは通常のスマックで動作します。
Gradleの依存関係
compile "org.igniterealtime.smack:smack-android:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
compile "org.igniterealtime.smack:smack-extensions:4.1.0" // <-- XEP-0184 classes
あなたが接続する前に(XMPPTCPConnectionすなわち準備)ワイヤーアップメッセージを送信するときは、配信確認
DeliveryReceiptManager.getInstanceFor(mConnection).addReceiptReceivedListener(new ReceiptReceivedListener() {
@Override
public void onReceiptReceived(String fromJid, String toJid, String deliveryReceiptId, Stanza stanza) {
Log.d(TAG, "onReceiptReceived: from: " + fromJid + " to: " + toJid + " deliveryReceiptId: " + deliveryReceiptId + " stanza: " + stanza);
}
});
を得るときのハンドラを、 MessageReceiptRequestを含めるようにしてください。
すべての今を行って
Chat chat;
if (StringUtils.isNullOrEmpty(threadId)) {
chat = getChatManager().createChat(to);
Log.d(TAG, "sendMessage: no thread id so created Chat with id: " + chat.getThreadID());
} else {
chat = getChatManager().getThreadChat(threadId);
Log.d(TAG, "sendMessage: thread id was used to continue this chat");
}
Message message = new Message(to);
message.addBody("EN", messageText);
String deliveryReceiptId = DeliveryReceiptRequest.addTo(message);
chat.sendMessage(message);
Log.d(TAG, "sendMessage: deliveryReceiptId for this message is: " + deliveryReceiptId);
、あなたはdeliveryReceiptIdは、上記Chat.sendMessage(メッセージ)コードにして得られたので、送信されたメッセージは、他の側で受信した場合に知ることができonReceiptReceivedコールバックによって記録されます以前に設定した
'autoAddDeliveryReceiptRequests()'を呼び出すことによって自動配信確認要求を有効にしたので、「メッセージを送信するときは必ずMessageReceiptRequestをインクルードする」という必要はありません。 – Flow
は、DeliveryReceiptManager.getInstanceFor(mConnection)への冗長な呼び出しを削除することで修正されました。autoAddDeliveryReceiptRequests(); – fr1550n
なぜ複数のLOCを落とすことができたときに1つのLOCを落としましたか? – Flow
私はxabberのようなメッセージ確認私のプログラムを見ていないasmackを使用する場合、私はasmackにXEP-0184を有効にする必要がありますか?そしてもし私がそうしなければ、どうやってそれを見つけられないのか教えてください。 – Mathew1990
私は今、それが正常に動作javadocのリンク – Flow
を追加したが、私はそのように手動で確認を受信送信する必要がありました: \t \t受信したパケット=新しいMessage(); \t \t received.addExtension(new DeliveryReceipt(packet.getPacketID())); \t \t received.setTo(packet.getFrom()); \t \t connection.sendPacket(received); 私は本当に理由はわかりませんが、DeliveryReceiptManagerはxml配信確認要求があることを検出しません。 DeliveryReceiptManager.hasDeliveryReceiptRequest(packet)はfalseを返します。 – Mathew1990