【问题标题】:How to handle connection loss uploading to Firebase iOS?如何处理上传到 Firebase iOS 的连接丢失?
【发布时间】:2020-10-26 08:31:37
【问题描述】:

我有一个前端 Swift 应用程序,用户可以在其中将大型视频和照片上传到 Firebase 存储。我目前正在处理错误。 The documentation 很好地解释了谷歌服务器端的错误处理,但它没有涉及如何处理连接丢失。

这是直接来自文档的错误处理:

...

// Upload file and metadata to the object 'images/mountains.jpg'
let uploadTask = storageRef.putFile(from: localFile, metadata: metadata)

uploadTask.observe(.failure) { snapshot in
  if let error = snapshot.error as? NSError {
    switch (StorageErrorCode(rawValue: error.code)!) {
    case .objectNotFound:
      // File doesn't exist
      break
    case .unauthorized:
      // User doesn't have permission to access file
      break
    case .cancelled:
      // User canceled the upload
      break

    /* ... */

    case .unknown:
      // Unknown error occurred, inspect the server response
      break
    default:
      // A separate error occurred. This is a good place to retry the upload.
      break
    }
  }
}

我在我的设备上进行了一些测试,在没有网络连接的情况下开始上传。网络出现故障后,每隔一秒左右就会自动将以下内容打印到控制台:

2020-07-06 01:38:28.361559-0700 Rage[12281:1978025] Connection 9: failed to connect 1:50, reason -1
2020-07-06 01:38:28.361648-0700 Rage[12281:1978025] Connection 9: encountered error(1:50)
2020-07-06 01:38:28.366906-0700 Rage[12281:1978025] Task <320E9387-F725-4AEA-B3BE-76425F73F9F7>.<6> HTTP load failed, 0/0 bytes (error code: -1009 [1:50])
2020-07-06 01:38:28.368381-0700 Rage[12281:1978042] Task <320E9387-F725-4AEA-B3BE-76425F73F9F7>.<6> finished with error [-1009] Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={_kCFStreamErrorCodeKey=50, NSUnderlyingError=0x280a581e0 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <320E9387-F725-4AEA-B3BE-76425F73F9F7>.<6>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <320E9387-F725-4AEA-B3BE-76425F73F9F7>.<6>"
), NSLocalizedDescription=The Internet connection appears to be offline., NSErrorFailingURLStringKey=https://firebasestorage.googleapis.com/v0/b/rage-5940.appspot.com/o/event%2FBEC3B24F-5F97-4B6A-8FD3-5DC2F7D37AFB.mp4?uploadType=resumable&name=event%2FBEC3B24F-5F97-4B6A-8FD3-5DC2F7D37AFB.mp4, NSErrorFailingURLKey=https://firebasestorage.googleapis.com/v0/b/rage-5940.appspot.com/o/event%2FBEC3B24F-5F97-4B6A-8FD3-5DC2F7D37AFB.mp4?uploadType=resumable&name=event%2FBEC3B24F-5F97-4B6A-8FD3-5DC2F7D37AFB.mp4, _kCFStreamErrorDomainKey=1}

这个 Firebase 会抛出这些错误吗?如果是这样,他们可能会在 uploadTask 开始之前尝试创建 storageRef,从而逃避任何提供的错误处理。

是否有办法捕捉这些网络错误?

【问题讨论】:

    标签: swift firebase google-cloud-storage firebase-storage


    【解决方案1】:

    你试过了吗?

    if error._code == NSURLErrorNetworkConnectionLost {
    
    }
    

    您可以与他们核实更多内容:

    NSURLErrorTimedOut
    NSURLErrorNotConnectedToInternet
    NSURLErrorCannotConnectToHost
    

    【讨论】:

    • 如果在上传过程中网络出现故障,这可以工作,但正如我所说,如果用户首先尝试在没有连接的情况下上传媒体,代码甚至在创建可以处理上传的 uploadTask 对象之前就会失败错误。
    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多