2016-06-01 20 views
2

Ich verwende Kinvey als Backend, um einige Daten zu speichern. Jedes Mal, wenn der Benutzer einige Fragen am Telefon (Android) beantwortet, werden die Daten sofort an kinvey gesendet. Es kann jedoch ein Szenario geben, in dem der Benutzer nicht mit dem Internet verbunden ist, daher ist das Senden der Daten fehlgeschlagen. Ich würde gerne wissen, ob es eine Standardmethode zum Speichern der Daten gibt, die nicht effizient gesendet wurden? Wie oft sollte ich versuchen, die Daten, die nicht gesendet wurden, erneut zu senden? Normalerweise würde ich es einfach in eine db schreiben und versuchen, alles, was in dieser Tabelle ist, alle 30 Minuten oder so zu senden und die Tabelle zu löschen, wenn der Sendevorgang erfolgreich ist? Wäre das ideal? Auch sehe ich, dass Kinvey keinen Mechanismus hat, um das automatisch zu handhaben (korrigiere mich, wenn ich falsch liege).Effiziente Möglichkeit zum Speichern von Daten, wenn keine Internetverbindung zum Backend Android gesendet werden soll?

Vielen Dank für Anregungen.

+0

würde mit Feuerbasis Backend Ihren Zweck dienen? – erluxman

Antwort

2

Sie können sich ansehen Firebase, Funktion, die Sie suchen, ist in Offline Capabilities beschrieben. Wenn die Migration von Kinvey nicht möglich ist, speichern Sie Ihre Daten in einer Datenbank und verwenden Sie JobScheduler, um sie unter den richtigen Bedingungen mit dem Backend zu synchronisieren.

+0

Die Migration von der Firebase zu diesem Zeitpunkt wäre ein wenig zu spät, aber ich werde es Ihnen danken, danke! – LoveMeow

4

Lokale Datenbank ist ein guter Ort, um Ihre Daten zu speichern sicher. Die Sache ist, dass Sie Daten alle 30 Minuten senden, Sie müssen dieses Szenario ändern.

Im Folgenden sind die Schritte:

  1. überprüfen Internet-Konnektivität, wenn verfügbar als Arbeit online keine Notwendigkeit, Daten zu speichern lokal

  2. Wenn Internet nicht verfügbar ist, als es speichert in lokaler DB

  3. Sie sind in der Lage, Internet-Verbindung Broadcast vom System zu erhalten, ob es verbunden ist oder nicht, wenn Sie zu diesem Zeitpunkt eine Verbindung erhalten, synchronisieren Sie Ihre Daten mit dem Server (Keine Überprüfung alle 30 Minuten) (System wird immer gesendet, wenn eine Verbindung hergestellt wird)

+0

Ich empfehle nicht, den System Connectivity Broadcast zu verwenden, da es in Android N nicht mehr funktioniert (http://www.r-bricks.com/2016/04/android-n-3-implicit-broadcast-removed). html), ist JobScheduler eine bessere Alternative für Aufgaben, die von der Netzwerkkonnektivität abhängen. – Egor

2

Die anderen Antworten decken die meisten Anwendungsfälle ab.

Aber wenn Sie wollen keine Systemsendungen verwenden, wäre eine weitere Alternative für Sie, die Daten zu speichern, in einer Datenbank (SQLite, Firebase, usw.), und versuchen, irgendeine Art von exponential backoff Strategie, um Ihre Daten zu den schicken Server, unter Verwendung der AlarmManager zum Beispiel. (Lernprogramm here).

Sie können versuchen, die Internetverbindung von Zeit zu Zeit zu überprüfen und die Daten zu senden. Wenn es aus irgendeinem Grund fehlschlägt (langsame Verbindung, Verbindungsabbrüche oder gar keine Verbindung), versuchen Sie es später erneut. Sobald Sie erfolgreich sind, können Sie entweder die Daten aus Ihrem Datenspeicher entfernen oder ein Flag wie isSent = true einrichten.

2

Kinvey implementiert Offline-Synchronisierungsfunktionen für alle SDKs, derzeit befindet es sich in der Betaversion. Wenn Sie iOS oder Javascript für die mobile Entwicklung verwenden, lesen Sie das SDK "3.0 beta". Du hast erwähnt, dass du Android verwendest, die Unterstützung für diese Plattform wird bald kommen.

In Ihrem Fall benötigen Sie einen Cache-Speicher, er speichert die Daten lokal und synchronisiert automatisch, wenn kein Netzwerk vorhanden ist. Sie müssen sich keine Gedanken darüber machen, wann oder wie oft synchronisiert werden soll.

http://devcenter.kinvey.com/ios-v3.0/guides/datastore#CacheStore

+0

Ich brauche das so schnell wie möglich, wann wird diese Funktion ausrollen? – LoveMeow