2016-06-30 16 views
9

Firebase bagagli sostiene here nella documentazione iOS cheFirebase bagagli caricamento non riesce in avverse condizioni di rete IOS

effettua upload e download a prescindere dalla qualità della rete. Caricamenti e download sono solidi, il che significa che si riavviano dove si sono fermati

quindi ci si aspetterebbe che maneggi una perdita di connessione durante il caricamento, ma non sembra.

Con il seguente codice Swift in iOS, sono in grado di eseguire un caricamento corretto quando c'è una connessione, ma se il dispositivo non ha una connessione o se è mai disconnesso dalla rete va al condizione di fallimento.

let storage = FIRStorage.storage().referenceForURL("VALID_URL_REMOVED") 

let imagesRef = storage.child("images/test.jpg") 

let data = UIImageJPEGRepresentation(observationImage!, 0.7); 

let uploadTask = imagesRef.putData(data!, metadata: nil) 

uploadTask.observeStatus(.Progress) { snapshot in 
    // Upload reported progress 
    if let progress = snapshot.progress { 
     let percentComplete = 100.0 * Double(progress.completedUnitCount)/Double(progress.totalUnitCount) 
     print("percent \(percentComplete)") 
    } 
} 

uploadTask.observeStatus(.Success) { snapshot in 
    // Upload completed successfully 
    print("success") 
} 

uploadTask.observeStatus(.Failure) { snapshot in 
    print("error") 
    print(snapshot.error?.localizedDescription) 
} 

L'output di debug per questo codice è il seguente.

/* 
percent 0.0 
percent 0.0044084949781492 
2016-06-30 11:49:16.480 Removed[5020:] <FIRAnalytics/DEBUG> Network status has changed. Code, status: 1, Disconnected 
percent 0.0044084949781492 
error 
Optional("An unknown error occurred, please check the server response.") 
*/ 

archiviazione non in linea del database in Tempo Reale di Firebase è inoltre istituito con il seguente codice, ma io sono sicuro di se questo è relativo.

FIRDatabase.database().persistenceEnabled = true 

Ho anche provato impostare manualmente il timeout come indicato nelle risposte alle this domanda utilizzando le seguenti linee, con nessun cambiamento.

let config = FIRStorage() 
config.maxUploadRetryTime = 1000000 

C'è un modo per farlo gestire queste disconnessioni senza implementare la funzionalità da zero? Mi sto perdendo qualcosa?

risposta

0

Ti mancano osservatori. In questo momento si osservano solo eventi .success e .failure. Prova ad aggiungere osservatori per .resume, .pause, .progress per gestire diversi eventi.

+0

Sono probabilmente frainteso, ma non mi sembra che aggiungere osservatori per la pausa e riprendere risolva il problema del mancato caricamento. D'altra parte, potrebbe essere solo che uno deve sospendere e riprendere manualmente quando lo stato della rete cambia. – ThatGuyJames

Problemi correlati