2015-03-29 9 views
6

Ich verwende aSmack und Openfire für meine Chat-Anwendung. Ich kann Nachrichten sehr gut senden und empfangen. Openfire unterstützt die Offline-Nachrichtenübertragung, wenn der Empfänger offline ist, indem er die Nachricht speichert, bis er online ist.Wie wird eine XMPP-Nachricht gesendet, wenn der Absender offline ist?

Aber was zu tun, wenn Absender offline ist oder sein Internet zwischen Kommunikation fällt?

Gibt es eine API von aSmack/Smack, die die Nachricht speichert, bis das Internet wieder verfügbar ist?

Oder sollte ich meine Nachrichten über SQLite senden?

+0

Hallo @Sushant, ich bin auf das gleiche Problem, jede Hilfe –

+1

@AT_AB Ich am Ende mit gemeinsamen Einstellungen und sqlite. Speichern Sie den Empfängernamen in den freigegebenen Einstellungen, bevor Sie eine Nachricht an ihn senden. Anschließend werden alle nicht gesendeten Nachrichten von sqlite empfangen und an den Empfänger gesendet. Nach erfolgreichem Senden wird der Empfänger aus den freigegebenen Einstellungen entfernt. – Sushant

Antwort

2
aktiviert sind

Gut nach einer Weile zu antworten, aber vielleicht würde es doch jemanden in die richtige Richtung weisen.

Nach einer Weile suche ich, dass aSmack keinen Offline-Speicher zur Verfügung stellt.

Um Nachrichten zu senden, wenn der Absender offline ist, benötigen wir einen Offline-Speicher, um die Nachricht zu speichern, bis der Absender wieder online ist. Ich habe sqlite dafür verwendet, aber SharedPreferences wäre auch eine gute Option, wenn wir die Nachricht nach erfolgreichem Senden löschen müssen.

Beste Lösung, die ich folge ist, Nachricht in sqlite einfügen, speichern Sie es ID in shared preferences, Nachricht senden und ID aus shared preferences entfernen. In der Zwischenzeit, wenn die Internetverbindung unterbrochen wird oder die Nachricht aus irgendeinem Grund nicht gesendet werden konnte, haben wir ihre ID in gemeinsamen Voreinstellungen als Backup. Nachdem Sie online gegangen sind, können wir durch shared preferences gehen, um zu überprüfen, ob ihre Nachricht zum Senden aussteht.

+0

Ich denke, Sie sprechen nur über die Absender-Seite, was passiert, wenn der Empfänger offline ist und wenn der Empfänger online geht, erhält er/sie Nachrichten während seiner Offline-Periode? –

+1

@Ahesanali Momin XMPP Server hat diesen Fall hadles. Es speichert Nachrichten, wenn der Empfänger offline ist und liefert sie, wenn der Empfänger eine Verbindung zum Server herstellt. – Sushant

+0

Vielen Dank, Sie haben Recht. XMPP-Server macht es, wenn wir dieses Offline-Nachrichten-Plugin aktivieren. –

2

Wenn Sie mit openfire verbunden sind und das Internet ausgeschaltet ist, sind Sie immer noch online bei openfire, da Sie die Präsenz nicht ändern können, wenn das Internet ausgeschaltet ist.

Für diesen Einsatz Openfire http://xmpp.org/extensions/xep-0199.html

Wenn Benutzer app nicht Ping-Anfrage antwortet dann macht es offline und Openfire Offline-Speicher beginnt.

Für Offline-Nachrichten in asmack bekommen müssen Sie hinzufügen providers.After diese folgende Zugabe erhalten Sie Offline-Nachrichten erhalten, wenn sie vom Server

pm.addIQProvider("offline", "http://jabber.org/protocol/offline", 
       new OfflineMessageRequest.Provider()); 
     // Offline Message Indicator 
     pm.addExtensionProvider("offline", 
       "http://jabber.org/protocol/offline", 
       new OfflineMessageInfo.Provider()); 

enter image description here Ionen/xep-0199.html

+0

Danke für Ihre Antwort. Aber ich frage nicht nach Openfire-Offline-Speicher. Ich frage nach einem Offline-Speicher. Gibt es eine API dafür? – Sushant

+0

Bearbeitet die Antwort hinzufügen Offline-Provider –

+0

Ja. Ich weiß, dass wir Offline-Nachrichten erhalten können, wenn sie wieder mit dem Server verbunden sind. Aber wenn ich offline bin, während ich die Nachricht sende, wird die Nachricht verloren gehen. Was ich will, ist, die Nachricht zu behalten, bis ich wieder mit dem Netzwerk verbinden und senden, wenn das Netzwerk zurück ist. – Sushant

Verwandte Themen