2015-06-12 12 views
6

Potrzebuję czegoś podobnego do możliwości postów na Facebooku. Zasadniczo chcę, aby użytkownicy tworzyli zawartość lokalnie na urządzeniu niezależnie od stanu połączenia, a gdy tylko Internet stanie się dostępny, powinien POST/PUT na serwer.Czy mogę używać zadania NSURLSessionUploadTask do synchronizowania w trybie offline?

Szukałem w Internecie rozwiązania i znalazłem, że NSURLSessionUploadTask może być używany do POST-ing w tle. Ale nie mogłem dowiedzieć się, czy następujące scenariusze są obsługiwane:

  • Czy moje zadanie pozostają w kolejce tła, gdy użytkownik jest zalogowany, a system operacyjny spróbować wykonać elementy w kolejce po ponownym połączeniu z siecią ?
  • Co stanie się, gdy aplikacja zostanie wymuszona przez użytkownika lub ulegnie awarii?
  • Co się stanie, jeśli operacja się nie powiedzie?

Odpowiedz

1

Po pierwsze, tło NSURLSession pozwala tylko na przesyłanie plików. Jeśli jest to dla Ciebie:

  • Zadanie będzie w kolejce, dopóki nie otrzyma odpowiedzi serwera.
  • Jeśli twoja aplikacja jest zamknięta, zadanie nadal będzie wykonywane. Gdy żądanie zostanie wykonane, Twoja aplikacja zostanie uruchomiona w nieinteraktywnym stanie w tle i otrzyma application:handleEventsForBackgroundURLSession:completionHandler:. Po przetworzeniu sygnału i wywołaniu programu obsługi zakończenia lub 30-sekundowego limitu czasu aplikacja zostanie zamknięta.
  • I operacja się nie powiedzie, otrzymasz URLSession:task:didCompleteWithError:

Jest dobry tutorial na tle NSURLSessions. Proponuję przeczytać wszystkie 4 części tego świetnego artykułu.
Jeśli przesyłanie plików nie jest dla Ciebie opcją, sugeruję zapisanie informacji w lokalnej bazie danych, a następnie czekanie na dostęp do Internetu. (dobrym podejściem jest tutaj użycie biblioteki Reachability, Alamofire). Kiedy internet stanie się dostępny, po prostu zadzwoń do swoich żądań http z zapisanymi danymi.

+0

To odpowiada na pytanie. Miałem nadzieję, że istnieje sposób użycia sesji w tle jako mojej prywatnej kolejki HTTP: D. Jednak wybieram inną trasę i próbuję to zaimplementować w tle w trybie "pobierania". – Hless

+0

Pobieranie tła nie jest srebrną kulą, obawiam się. Jest to fajna funkcja, ale iOS decyduje, kiedy aplikacja może odbierać sygnał pobierania, w zależności od aktywności użytkowników, więc może nigdy nie zostać odebrany. Innym rozwiązaniem jest okresowe wysyłanie cichego powiadomienia push z serwera, aby aplikacja mogła zostać pobudzona i wykonać pewne czynności w tle. Zobacz [moja inna odpowiedź] (http://stackoverflow.com/a/30834566/1254172) o tym, jak możesz uzyskać korzyści z tego trybu i jego kamieni węgielnych. –

Powiązane problemy