嗨,有沒有辦法做android xmpp客戶端,它將能夠得到消息接收確認(XEP-0184)我讀到,有smack XEP-0184,但普通smack不工作與android(或我不能這樣做)始終存在SASL認證異常。如何在Smack中使用XMPP XEP-0184「信息傳遞收據」?
6
A
回答
14
Smack通過SMACK-331獲得了對XEP-0184的支持。你不能直接在Android下使用Smack < 4.1,你需要Smack 4.1(或更高版本)。
您可以在DeliveryReceiptManager的javadoc中閱讀更多關於Smack的XEP-0184 API。
11
是的這適用於普通的Smack。
搖籃依賴
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);
全部完成
現在,你可以知道什麼時候已經被對方收到發送消息,因爲在Chat.sendMessage(消息)代碼獲得deliveryReceiptId以上將被onReceiptReceived回調記錄早些時候設置。
相關問題
- 1. 如何使用Smack接收傳入的XMPP消息?
- 2. XMPP Smack無法收到消息
- 3. 收到消息時通知XMPP + Smack
- 4. smack xmpp庫Java
- 5. 如何接收消息,而無需使用createChat android XMPP聊天smack api
- 6. 如何在iOS中使用xmpp消息的收據?
- 7. 在android中使用xmpp + smack + openfire
- 8. 如何使用Smack從Android發送XMPP消息到GAE
- 9. JavaFX使用Smack API從Java回調(xmpp)
- 10. 在純XMPP上使用Apache ActiveMQ + XMPP進行消息傳遞
- 11. XMPP Smack - 正在修改的消息
- 12. xmpp pubsub不傳遞消息
- 13. 接收Smack的自定義XMPP節
- 14. Android,Openfire,Smack,XMPP
- 15. 使用AJAX傳遞信息
- 16. 使用javascript傳遞信息
- 17. 在Xcode中使用協議傳遞信息從彈出窗口傳遞信息
- 18. XMPP XEP 0333在SMACK中的實現
- 19. 如何在ios中使用XMPP接收脫機消息
- 20. 在應用程序中保持XMPP連接(使用smack)
- 21. 在GUI中傳遞信息
- 22. 如何僅使用Smack庫消耗XMPP服務器的一些聊天消息?
- 23. 在smack XMPP中發送Message.Type.normal android
- 24. 使用authToken驗證Google Talk(XMPP,Smack)
- 25. 傳遞信息
- 26. 如何使用Smack與Android Studio與Openfire XMPP服務器聯網
- 27. 如何使用java中的Smack XMPP庫處理TLS證書
- 28. 如何使用smack 4.1如何將信息查詢包發送到xmpp服務器?
- 29. xmpp(smack - openfire)無延遲時間?
- 30. 發送和接收IQ數據包ASMACK/SMACK Android的XMPP
當我使用asmack時,我沒有看到消息確認程序,如xabber,我應該在asmack中啓用xep-0184嗎?如果我應該告訴我我怎麼能找不到它。 – Mathew1990
我已添加javadoc鏈接 – Flow
現在它工作正常,但我不得不手動發送接收確認如下: \t \t Packet received = new Message(); \t \t received.addExtension(new DeliveryReceipt(packet.getPacketID())); \t \t received.setTo(packet.getFrom()); \t \t connection.sendPacket(received); 我真的不知道爲什麼,但DeliveryReceiptManager沒有檢測到有XML傳遞收據請求。 DeliveryReceiptManager.hasDeliveryReceiptRequest(數據包)返回false。 – Mathew1990