2015-06-12 11 views
6

Ich brauche etwas, das den Offline-Post-Funktionen von Facebook ähnlich ist. Grundsätzlich möchte ich, dass Benutzer Inhalte unabhängig vom Verbindungsstatus lokal auf dem Gerät erstellen, und wenn Internet verfügbar wird, sollte es an den Server POST/PUT.Kann ich NSURLSessionUploadTask für Offline-Synchronisierungsaufgaben verwenden?

Ich habe das Internet nach einer Lösung gesucht und festgestellt, dass NSURLSessionUploadTask für POST-in dem Hintergrund verwendet werden kann. Aber ich konnte nicht herausfinden, wenn die folgenden Szenarien unterstützt:

  • Wird meine Aufgabe im Hintergrund Warteschlange bleiben, wenn der Benutzer offline ist und das Betriebssystem versuchen, Elemente in der Warteschlange zur Ausführung mit einem Netz, auf Wiederverbindung ?
  • Was passiert, wenn die Anwendung vom Benutzer zwangsweise geschlossen wird oder abstürzt?
  • Was passiert, wenn der Vorgang fehlschlägt?

Antwort

1

Vor allem Hintergrund NSURLSession ermöglicht nur Datei-Upload. Wenn das für Sie in Ordnung ist:

  • Die Aufgabe wird in der Warteschlange sein, bis sie eine Antwort des Servers empfängt.
  • Wenn Ihre App geschlossen ist, wird die Task weiterhin ausgeführt. Wenn die Anfrage abgeschlossen ist, wird Ihre App im nicht interaktiven Hintergrund gestartet und erhält application:handleEventsForBackgroundURLSession:completionHandler:. Nachdem Sie das Signal verarbeitet und den Beendigungshandler oder 30 Sekunden Zeitüberschreitung aufgerufen haben, wird die App geschlossen.
  • ich die Operation fehlschlägt, Sie URLSession:task:didCompleteWithError:

Es gibt eine gute tutorial auf den Hintergrund NSURLSessions erhalten. Ich empfehle Ihnen, alle 4 Teile dieses großartigen Artikels zu lesen.
Wenn Datei-Upload keine Option für Sie ist, empfehle ich Ihnen, Informationen in der lokalen Datenbank zu speichern und dann zu warten, bis das Internet erreichbar ist. (Ein guter Ansatz ist die Verwendung der Reachability Bibliothek, Alamofire ermöglicht dies auch zu tun). Wenn Internet verfügbar ist, rufen Sie einfach Ihre http-Anfragen mit gespeicherten Daten an.

+0

Dies beantwortet die Frage. Ich hatte gehofft, dass es eine Möglichkeit gibt, Hintergrundsitzungen als private HTTP-Warteschlange zu verwenden: D. Ich gehe jedoch einen anderen Weg und versuche, dies mit dem Hintergrund-Fetch-Modus zu implementieren. – Hless

+0

Hintergrund holen ist keine Silberkugel, fürchte ich. Es ist eine nette Funktion, aber iOS entscheidet, wann die App das Abrufsignal empfängt, abhängig von der Aktivität des Benutzers, so dass Sie es möglicherweise nie erhalten werden. Ein anderer Ansatz besteht darin, regelmäßig stille Push-Benachrichtigungen vom Server zu senden, sodass die App aktiviert werden und einige Aktionen im Hintergrund ausgeführt werden können. Siehe [meine andere Antwort] (http://stackoverflow.com/a/30834566/1254172), um zu erfahren, wie Sie von diesem Modus und seinen Eckpfeilern profitieren können. –

Verwandte Themen