Hallo, gibt es eine Möglichkeit, android xmpp Client zu tun, die Nachricht empfangen Empfangsbestätigung erhalten (XEP-0184) Ich lese, dass es XEP-0184 in Smack ist aber normale Smack funktioniert nicht mit Android (oder ich kann nicht tun Sie es) gibt es immer SASL Authentifizierung Ausnahme.Wie kann ich XMPP XEP-0184 "Message Delivery Receipts" mit Smack nutzen?
Antwort
Smack erhielt Unterstützung für XEP-0184 mit SMACK-331. Sie können Smack < 4.1 nicht direkt unter Android verwenden, Sie brauchen Smack 4.1 (oder höher).
Sie können mehr über Smacks XEP-0184 API im Javadoc von DeliveryReceiptManager lesen.
Ja, das funktioniert mit normalen Smack.
Gradle Abhängigkeiten
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
Bereiten Sie die XMPPTCPConnection dh bevor Sie connect() verdrahten ein Handler, wenn Sie eine Übermittlungsbestätigung
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);
}
});
erhalten, wenn Sie eine Nachricht senden, Stellen Sie sicher, dass Sie eine MessageReceiptRequest
enthaltenChat 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);
alles getan
Jetzt können Sie sagen, wenn eine gesendete Nachricht von der anderen Seite empfangen worden ist, weil die deliveryReceiptId im Chat.sendMessage (Message) Code erhalten wird oben durch den onReceiptReceived Rückruf angemeldet sein früher eingerichtet.
"Wenn Sie eine Nachricht senden, stellen Sie sicher, dass Sie eine MessageReceiptRequest einschließen" ist nicht erforderlich, da Sie automatische Empfangsbestätigungsanforderungen durch Aufrufen von 'autoAddDeliveryReceiptRequests()' aktiviert haben. – Flow
behoben durch Entfernen des redundanten Aufrufs an: DeliveryReceiptManager.getInstanceFor (mConnection).autoAddDeliveryReceiptRequests(); – fr1550n
Warum haben Sie ein LOC gelöscht, obwohl Sie mehrere fallen gelassen haben könnten? – Flow
- 1. Senden XMPP (Smack) Nachricht
- 2. Android, Openfire, Smack, XMPP
- 3. GCM XMPP Server mit Smack 4.1.0
- 4. Keine Latenzzeit mit xmpp (smack - openfire)?
- 5. Wiederverbindung zu xmpp Server mit Smack
- 6. Wie kann ich benutzerdefinierte Attribute (nick) in meinem XMPP Nachricht Tag hinzufügen, in Smack 4.1
- 7. XMPP Smack API RosterListener + Datenbank Änderung
- 8. xmpp mit Openfire-Client-Verbindung verloren plötzlich mit smack 4.1
- 9. XMPP-Client mit Smack 4.1 geben NullPointerException während der Anmeldung
- 10. XMPP "Stream: Fehler (Konflikt)" bei der Anmeldung mit (a) Smack
- 11. Android Hintergrund Service für Smack (XMPP) Chat-Anwendung
- 12. Smack XMPP Fehler beim Erstellen neuer Benutzer: verboten - Auth
- 13. Stripe API - Receipts Listing
- 14. Fehler beim Verbinden von MUC-Raum in XMPP (smack)
- 15. Wie kann ich meinen Spring.net Webservice nutzen?
- 16. Wie kann ich besser lesbare Versprechen nutzen?
- 17. Wie verwende ich Smack 4.2 zum Verbinden mit ejabberd?
- 18. Wie bekomme ich meine öffentliche IP von XMPP Bind Nachricht?
- 19. Wie erstellt man eine SSL-Verbindung mit der Smack XMPP-Bibliothek?
- 20. Ich möchte zusätzliche Parameter mit Nachricht von Smack-API-Client in Ejabberd
- 21. Ich kann den Anwesenheitsstatus meines Benutzers mit Smack nicht ändern
- 22. So erhalten Sie eine Nachricht ohne createChat für Android XMPP Chat Smack api
- 23. Überprüfen Sie, ob ein Benutzer auf dem Server in XMPP mit (a) Smack
- 24. XEP-0080 User Location in Smack Bibliothek
- 25. Erstellen neuer Benutzer mit Smack 4.2.0-Beta1 auf Ejabberd wirft XMPP Ausnahme: verboten - auth
- 26. Offline-Nachricht nicht retrive von Smack API 4.1.6 von Xmpp MongooseIM Server
- 27. Der Versuch, sich mit Smack in den XMPP-Server einzuloggen führt zu SASL "nicht autorisiert"
- 28. Login kann nicht in Smack und Openfire funktionieren
- 29. Konnte Apache Vysper XMPP Server von Android nicht mit Smack 4.1 verbinden
- 30. Android Smack funktioniert nicht mehr
Wenn ich asmack benutze, habe ich keine Nachrichtenbestätigung gesehen, Programme wie xabber, sollte ich xep-0184 in asmack aktivieren? Und wenn ich sollte, sag mir, wie ich es nicht herausfinden kann. – Mathew1990
Ich habe einen Javadoc-Link hinzugefügt – Flow
Jetzt funktioniert es gut, aber ich musste Empfangsbestätigung manuell so senden: \t \t Paket empfangen = neue Nachricht(); \t \t received.addExtension (neues DeliveryReceipt (packet.getPacketID())); \t \t received.setTo (packet.getFrom()); \t \t connection.sendPacket (empfangen); Ich weiß wirklich nicht warum, aber DeliveryReceiptManager erkennt nicht, dass es in xml-Lieferempfangsbestätigung gibt. DeliveryReceiptManager.hasDeliveryReceiptRequest (Paket) gibt false zurück. – Mathew1990