2015-10-20 13 views
6

Quando si imposta NSURLSession/Alamofire.Manager con una configurazione di sessione in background, in assenza di connessione Internet, mi aspetto di ricevere il solito NSError "Errore dominio = NSURLErrorDomain Code = -1009" La connessione Internet sembra non in linea. "NSURLSessione con configurazione sessione in background non restituisce un errore in assenza di connessione

Questo è successo regolarmente se non sto usando una configurazione in background, ma se faccio tale configurazione il mio metodo di callback/delegato sarà mai essere chiamato. Alla fine verrà chiamato quando riaccendo il wifi.

Preferirei ricevere vivo un errore subito. Mi sto perdendo qualcosa?

risposta

3

La ragione per questo che il guasto della rete in attività in background sessione non restituisce alcun errore:

In generale una sessione sfondo NSURLSession non manca un compito se qualcosa va storto sul filo. Piuttosto, continua a cercare un buon momento per eseguire la richiesta e riprova in quel momento. Continua fino al termine del timeout della risorsa (ovvero, il valore nella proprietà timeoutIntervalForResource nell'oggetto NSURLSessionConfiguration che si utilizza per creare la sessione). L'impostazione predefinita corrente per il valore è di una settimana!

Ho trovato la risposta sopra a developer forum.

Maggiori dettagli che potrebbero aiutare nella sessione di fondo:

Un altro vantaggio è che in una sessione di fondo, monitoriamo la rete e l'ambiente di potere per voi. Ciò significa che copriamo le cose come raggiungibilità della rete e connettività per te, quindi non hai per utilizzare le API di raggiungibilità a tutti. Non tenteremo di stabilire una connessione finché non sappiamo che il server è raggiungibile. Analogamente, se l'utente sta eseguendo un download e esce dal Wi-Fi, normalmente quell'attività fallirebbe con un errore di trasmissione. Ma, in una sessione di background , in realtà ci ripristineremo automaticamente e riproveremo e riprendere da dove eravamo rimasti se il download è stato ripristinato. E non sentirai su quell'errore.

Fonte: WWDC 2014

2

L'API non ti dice che la rete non è presente, perché sarebbe un errore, indicando che la connessione non finirà mai. In realtà lo farà, supponendo che alla fine la rete ritorni.

Se è necessario ricevere l'errore per qualche motivo, non utilizzare una sessione in background.

In alternativa, se vuoi solo sapere se la rete è attiva o meno per qualche suggerimento UI, usa l'API di raggiungibilità. Detto questo, non rifiutare di avviare la richiesta in base alla mancata raggiungibilità, perché la raggiungibilità sta.

Problemi correlati