2015-06-12 10 views
6

Ho bisogno di qualcosa di simile alle funzionalità di post offline di Facebook. Fondamentalmente voglio che gli utenti creino il contenuto localmente sul dispositivo indipendentemente dallo stato della connessione, e ogni volta che internet diventa disponibile dovrebbe POST/PUT al server.Posso utilizzare NSURLSessionUploadTask per le attività di sincronizzazione offline?

Ho cercato Internet per una soluzione e ho trovato che NSURLSessionUploadTask può essere usato per POST-ing in background. Ma non riuscivo a capire se sono supportati i seguenti scenari:

  • Sarà mio compito rimane nella coda di sfondo quando l'utente non è in linea e sarà il sistema operativo tenta di eseguire le voci nella coda su di riprendere il contatto con una rete ?
  • Cosa succede se l'applicazione viene chiusa forzatamente dall'utente o si blocca?
  • Cosa succede se l'operazione fallisce?

risposta

1

Prima di tutto, lo sfondo NSURLSession consente solo il caricamento di file. Se quello è ok per te:

  • L'attività sarà in coda finché non riceverà una risposta del server.
  • Se l'app è chiusa forzatamente, l'attività verrà comunque eseguita. Al termine della richiesta, l'app verrà avviata in stato di background non interattivo e riceverà application:handleEventsForBackgroundURLSession:completionHandler:. Dopo aver elaborato il segnale e chiamato il gestore di completamento o 30 secondi di timeout, l'app verrà chiusa.
  • ho l'operazione non riesce, si riceverà URLSession:task:didCompleteWithError:

C'è una buona tutorial su sfondo NSURLSessions. Ti suggerisco di leggere tutte e 4 le parti di questo fantastico articolo.
Se il caricamento del file non è un'opzione per te, ti suggerisco di salvare le informazioni nel database locale e quindi attendere che internet sia raggiungibile. (un buon approccio qui è l'uso della libreria Reachability, Alamofire consente di farlo anche). Quando Internet diventa disponibile, chiama semplicemente le tue richieste http con i dati salvati.

+0

Questo risponde alla domanda. Speravo che esistesse un modo per utilizzare le sessioni in background come coda privata HTTP: D. Tuttavia, sto seguendo un percorso diverso e ho tentato di implementarlo con la modalità di recupero in background. – Hless

+0

Il recupero dello sfondo non è un proiettile d'argento, temo. È una funzione piacevole, ma iOS decide quando l'app può ricevere il segnale di recupero, a seconda dell'attività dell'utente, quindi potresti non riceverla mai. Un altro approccio è quello di inviare periodicamente notifiche push silenziose dal server, in modo che l'app possa essere svegliata ed eseguire alcune azioni in background. Vedi [la mia altra risposta] (http://stackoverflow.com/a/30834566/1254172) su come ottenere i benefici di questa modalità e i suoi capisaldi. –

Problemi correlati