2017-04-13 5 views
1

ストレージからダウンロードするときに、より小さなタイムアウトを設定したいと思います。わずか5〜10秒ですが、これは可能ですか?iOS:Firebaseストレージセットタイムアウト

私はこのようdownloadiungだ:私はStorageDownloadTaskクラスへの拡張を行い、解雇場合は、要求を取り消し要求された時間にタイマーをセットする機能を追加します

 let storage = FIRStorage.storage() 
     let storageRef = storage.reference(forURL: "gs://...") 
     let fileRef = storageRef.child(myLink) 
     let downloadTask = fileRef.write(toFile: url) { url, error in 
     ... 

答えて

0

このような何か:

extension StorageDownloadTask { 
func withTimout(time: Int, block: @escaping() -> Void) { 
    Timer.scheduledTimer(withTimeInterval: TimeInterval(time), repeats: false) { (_) in 
     self.cancel() 
     block() 
    } 
} 

だから、あなたが書くでしょう:

fileRef.write(toFile: url, completion: { 
    (url, error) in 
    ... 
}).withTimeout(time: 10) { 
    //Here you can tell everything that needs to know if the download failed that it did 
} 
0

Firebase Storageはあなたがpause()cancel()、およびresume()は私が設定しますhere

を読むことができる機能を持っているにStorageUploadTaskとして私は一時停止またはcaを置くだろうクラスプロパティDispatchWorkItemを使用してDispatchAsync Timerでncel:

// 1. make sure you `import Firebase` to have access to the `StorageUploadTask` 
import Firebase 

var timeoutTask: DispatchWorkItem? 
var downloadTask: StorageUploadTask? 

// using your code from your question 
let storage = FIRStorage.storage() 
let storageRef = storage.reference(forURL: "gs://...") 
let fileRef = storageRef.child(myLink) 

// 2. this cancels the downloadTask 
timeoutTask = DispatchWorkItem{ [weak self] in 
      self?.downloadTask?.cancel() 
} 

// 3. this executes the code to run the timeoutTask in 5 secs from now. You can cancel this from executing by using timeoutTask?.cancel() 
DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: timeoutTask!) 

// 4. this initializes the downloadTask with the fileRef your sending the data to 
downloadTask = fileRef.write(toFile: url) { 
      (url, error) in 

      self.timeoutTask?.cancel() 
      // assuming it makes it to this point within the 5 secs you would want to stop the timer from executing the timeoutTask 

      self.timeoutTask = nil // set to nil since it's not being used 
} 

残念ながらFirebaseがRealTimeDatabase

ため、この機能は利用できていません