Ich bin mit dem Problem konfrontiert, Offline-Nachricht in Android-Apps mit Smack API von XMPP Mongoose Server abrufen. Wie im Code-Ablauf Versuchen Sie, die Offline-Nachricht wiederherzustellen, wenn sich der Benutzer beim xmpp mongoose Server anmeldet, bevor er die verfügbare Anwesenheit an den Mungo-Server sendet.Offline-Nachricht nicht retrive von Smack API 4.1.6 von Xmpp MongooseIM Server
Mit zwei verschiedenen Möglichkeiten versucht, offline Nachricht noch nicht in der Lage, funktionierende Lösung für die gleiche zu finden. Beide Methoden, die ich alle diese Dinge ausprobiert habe, werden unten mit Details erklärt.
Below Api verwenden wir für die XMPP-Verbindung und alle anderen Nebenstelle:
// Smack (XMPP-Client-Bibliothek)
Kompilierung 'org.igniterealtime.smack: Klatschenkleks android: 4.1.6'
Kompilierung 'org.igniterealtime.smack: Klaps-tcp: 4.1.6'
Kompilierung 'org.igniterealtime.smack: Klaps-im: 4.1.6'
kompilieren 'org.igniterealtime.smack: Klaps-android-Erweiterungen: 4.1.6'
Versuchte retrive offline Nachricht Mit offlineMessageManager
Im Folgenden finden Sie Code, die ich versucht offline Nachricht nach dem Login abrufen und vor verfügbar Präsenz Server
try {
Boolean isFelxibleRetrievalSupport = offlineMessageManager.supportsFlexibleRetrieval (mit);
Iterator i = (Iterator) offlineMessageManager.getMessages();
while (i.hasNext())
{Nachricht msg = i.next(); System.out.println ("Habe Text [" + msg.getBody() + "] aus [" + msg.getFrom() + "]");
} catch (XMPPException e)
{System.out.println ("Error Offline-Meldung."); e.printStackTrace(); }
catch (SmackException.NotConnectedException e)
{System.out.println ("Error Offline-Meldung Keine Verbindung."); e.printStackTrace(); }
catch (SmackException.NoResponseException e)
{System.out.println ("Error Offline-Meldung Nr Reponse."); e.printStackTrace(); }
Ausgabe Fall 1:
Im Folgenden finden Sie Detail Ausnahme, die, wenn sie über Code
I Exceptionausführen erzeugen bekam, wenn sie unter Codezeile auszuführen.
Iterator i = (Iterator) offlineMessageManager.getMessages();
Im Folgenden finden Sie Beschreibung Ausnahme, die, wenn sie über Leitung generieren
org.jivesoftware.smack.XMPPException $ XMPPErrorException ausführen: XMPPError: service-unavailable -
Ausgabe Fall 2 Abbrechen:
Wenn Überprüfung ist Flexible Offline-Nachricht von Android-Code mit Smack von Xmmp Mungo-Server unterstützt, so habe ich falschen Wert. Unten ist Code, den ich zum Testen benutzt habe.
Boolesch isFelxibleRetrievalSupport = offlineMessageManager.supportsFlexibleRetrieval();
Ausgabe Fall 3:
Wenn ich versuche, unterstützt Funktionen wie unter Verwendung von unten Methode Klaps Code abzurufen.
ServiceDiscoveryManager Manager = ServiceDiscoveryManager
.getInstanceFor (Verbindung);
Liste AllFetures = Manager.getFeatures();
Im Folgenden finden Sie Features-Liste, die ich retrived:
http://jabber.org/protocol/bytestreams,
Jabber: iq: Privatsphäre, urn: xmpp: ping,
http://jabber.org/protocol/commands,
Jabber: iq: version,
jabber: iq: last,
http://jabber.org/protocol/xdata-validate,
http://jabber.org/protocol/xhtml-im,
V-Card-temp,
http://jabber.org/protocol/chatstates,
urn: xmpp: Quittungen, urn: xmpp: Zeit,
http://jabber.org/protocol/xdata-layout,
http://jabber.org/protocol/muc ,
http://jabber.org/protocol/disco#items,
http://jabber.org/protocol/disco#info,
http://jabber.org/protocol/caps,
Jabber: x: data
Versuchte offline Nachricht Hörer Mit Paket von XMPP MongooseIM
unten an retreive ist Code Ich habe versucht, mit Paket-Listener von Smack API 4.1.6.
private statische endgültige StanzaFilter MESSAGE_PACKET_FILTER = neue OrFilter (StanzaTypeFilter.MESSAGE);
Konfiguration = XMPPTCPConnectionConfiguration.builder()
.setServiceName(SERVICE_NAME)
.setHost(KDevelopmentXMPPServer)
.setPort(PORT)
.setSendPresence(false)
.build();
// erzeuge Connection-Objekt von xmpp Verbindung mit konfigurierter Detail
Verbindung = new XMPPTCPConnection (Konfiguration);
connection.addAsyncStanzaListener (neu StanzaListener() {
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
Log.d("CheckPacket", "OfflineMEssage");
Message message = (Message) packet;
if (message != null) {
if (message.getBody() != null) {
Log.i("XMPPClient", "Got text [" + message.getBody()
+ "] from [" + message.getFrom() + "]");
}
}
}
}, MESSAGE_PACKET_FILTER);
connection.login (Benutzer, Passwort);
Vielen Dank im Voraus, mir bitte jemand für die besten helfen Lösung für mein kritische Thema zu arbeiten.
Sind Sie sicher, dass offline Nachricht Unterstützung (Modul mod_offline) in der Instanz von MongooseIM aktiviert? Es scheint nicht so. – erszcz
Hi erszcz, Ja, es ist möglich. In unseren iOS-Apps funktioniert das. aber Problem ist nur Android mit Smack API. –
Es würde Ihnen helfen, den Verkehr auf der XML-XMPP-Ebene zu überprüfen. Sie würden sehen, was Sie genau an Ihren Server senden und was der Server antwortet. –