iOS-App Offline und Synchronisierung
Ich versuche zu bauen, um eine offline-Synchronisierung-Funktion in iOS-App und würde gerne einige Rückmeldungen/Hinweise aus der community auf die Strategie und die bewährten Praktiken befolgt werden, um das gleiche zu tun. App-details sind wie folgt:
Zeigt die app eine digitale Katalog für die Nutzer und ermöglicht es Ihnen, führen Sie Aktionen wie das erstellen und platzieren von Aufträgen, unter anderem.
Derzeit ist die app nur funktioniert, wenn Sie online sind, und wir haben APIs für alle Aktionen wie das anzeigen der Katalog-Erstellung/Bestellung die Rückgabe von JSON-Daten.
Wir möchte/offline-Synchronisierung-Funktion den Benutzern, durch die Benutzer können den Katalog und erstellen/Aufträge während Sie offline sind, und Wann kommen Sie online die Bestelldaten werden synchronisiert und aktualisiert, um unseren server.
Wir würden auch gerne ziehen Sie die aktuellsten Daten vom server und die app-halten Sie sich up to date im Falle von Katalog-änderungen oder änderungen in der Reihenfolge, dass passiert auf dem Server, während die app offline war.
Könnt Ihr mir helfen zu kommen mit dem besten design und Konzept für den Umgang mit dieser Art von Funktionalität?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich etwas ähnliches gemacht nur in der zu Beginn dieses Jahres. Nachdem ich gelesen habe über NSOperationQueue und NSOperation ich habe eine straight-forward-Ansatz:
Wenn Sie ein Objekt verändert/Hinzugefügt/... in meiner lokalen Datenbank, füge ich eine neue "sync"-Betrieb, um die Warteschlange und ich kümmere mich nicht darum, ob die app online oder offline (ich habe eine Erreichbarkeit Beobachter, die entweder ausgesetzt, die den Warteschlange oder nimmt es zurück zu arbeiten; natürlich, ich mache re-queueing, wenn ein Fehler Auftritt (verlorene Netzwerkverbindung während sync)). Die operation selbst liest/schreibt die Datenbank und stellt die Vernetzung Sachen. Meine ViewController verwenden Sie ein NSFetchedResultsController (mit delegate=self) um Rückrufe zu erhalten, auf Veränderungen. In einigen Fällen brauchte ich einige zusätzliche lokale Daten (über das zählen von Objekten), wo ich verwendet habe NSManagedObjectContextObjectsDidchangenotification.
Außerdem habe ich Multi-Kontext-CoreData, die Klang ganz vernünftig zu verwenden (ich habe nur zwei Kontexte).
Um über änderungen informiert, die von Ihrem server, ich glaube, dass iOS 7 hat etwas neues für Sie.
Auf der server-Seite, die Sie Lesen sollten, ein wenig für die eigentliche Ansatz, den Sie gehen wollen, für: d.h. die Synchronisierung der Daten von Dan Grover oder Die Entwicklung von Android REST Client Applications (natürlich gibt es noch viele gute Artikel gibt).
Vorsicht: Sie könnten enttäuscht sein, wenn Sie erwarten eine einfache Lösung. Ihre Anforderung ist nicht ungewöhnlich, aber die Lösung könnte komplexer geworden, als Sie erwarten - je nach "business-Regeln" und andere angemessene Anforderungen. Wenn Sie intelligent beschränken Ihre Anforderungen, die Sie möglicherweise finden Sie eine Lösung, die Sie implementieren können, Sie sich, sonst können Sie auch in Betracht ziehen, verwenden Sie ein kommerzielles Produkt.
Ich könnte mir vorstellen, dass, wenn Sie gestalten die business-Logik so, dass es dauert eine offline-Zustand berücksichtigt und stellt diese explizit in der business-Logik, können Sie eine Lösung finden, die Sie selbst zu implementieren, mit mäßigem Aufwand. Was ich damit meine, ist zum Beispiel, wenn ein Benutzer erstellt einen Auftrag, ist er zunächst in "nicht verpflichtet", erklärte. Die Bestellung wird erst begangen werden, wenn es Zugriff auf den server und der server gibt das "OK", dass diese Bestellung Sie können tatsächlich platziert werden, die von diesem Benutzer. Der server kann auch ablehnen, den Auftrag, das senden von entsprechenden Nachrichten an den Benutzer.
Gibt es wohl ein paar subtile Probleme, die entstehen können aufgrund der Erfordernis der eventual consistency.
Siehe auch diese Frage, die Zeiger enthält, um Lösungen von kommerziellen Produkten, und wenn Sie besuchen Ihre web-Seiten geben wertvolle Informationen über die Komplexität des Problems und wie diese gelöst werden können.