ios - 当设备因错误而锁定时,URLSessionConfiguration 后台下载任务失败 - 与后台传输服务的连接丢失

标签 ios swift alamofire nsurlsession nsurlsessiondownloadtask

我得到一个

Error Domain=NSURLErrorDomain Code=-997 "Lost connection to background transfer service"

当我在启动后台下载过程后锁定屏幕时。我正在使用 Alamofire,但我认为这也会发生在常规 URLSession 上。如果我软关闭应用程序,下载会继续工作,但一旦我锁定我的设备,它就会开始抛出此错误。

下面是代码的相关部分:

private(set) lazy var alamoSessionManager: SessionManager = {
    let config = URLSessionConfiguration.background(withIdentifier: "MySession")
    config.isDiscretionary = true
    config.sessionSendsLaunchEvents = true
    config.shouldUseExtendedBackgroundIdleMode = true
    return Alamofire.SessionManager(configuration: config)
}()

let route = buildRouter()

alamoSessionManager.request(url, method: route.method, parameters: route.parameters, encoding: JSONEncoding.default, headers: route.headers)

我查看了控制台以查看是否有任何守护进程崩溃但找不到任何守护进程。锁定屏幕后我立即看到三个错误:

BKLogEvent: couldn't find CombinedSequence properties

Task <>.<48> finished with error - code: -999

Task <>.<48> load failed with error Error Domain=NSURLErrorDomain Code=-997 "Lost connection to background transfer service" UserInfo={NSErrorFailingURLStringKey=, NSErrorFailingURLKey=, _NSURLErrorRelatedURLSessionTaskErrorKey=, _NSURLErrorFailingURLSessionTaskErrorKey=, NSLocalizedDescription=Lost connection to background transfer service} [-997]

error._userInfo 是这样的:

▿ Optional<AnyObject>
  ▿ some : 5 elements
    ▿ 0 : 2 elements
      - key : NSErrorFailingURLStringKey
      - value : https://www.myweb.com/api
    ▿ 1 : 2 elements
      - key : NSErrorFailingURLKey
      - value : https://www.myweb.com/api
    ▿ 2 : 2 elements
      - key : _NSURLErrorRelatedURLSessionTaskErrorKey
      ▿ value : 2 elements
        - 0 : BackgroundDataTask <C39E-2FC73>.<27>
        - 1 : LocalDataTask <C39E-2FC73>.<27>
    ▿ 3 : 2 elements
      - key : _NSURLErrorFailingURLSessionTaskErrorKey
      - value : BackgroundDataTask <C39E-2FC73>.<27>
    ▿ 4 : 2 elements
      - key : NSLocalizedDescription
      - value : Lost connection to background transfer service

最佳答案

Alamofire 目前与后台 session 并不真正兼容,这既是因为无法持久化和重新连接其闭包 API,也是因为它 invalidateAndCancel() URLSessiondeinitd 时。我们建议您直接将 URLSession 用于后台 session ,或将前台 session 与后台任务 API 结合使用。

关于ios - 当设备因错误而锁定时,URLSessionConfiguration 后台下载任务失败 - 与后台传输服务的连接丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975122/

相关文章:

ios - Alamofire 5.0.0-rc.3 RequestInterceptor Adapt 方法没有被 Alamofire 调用,尽管在响应有任何错误时调用重试

ios - 在 Expo For React Native App 中禁用调试

ios - 如何找到 UInt64 之间的随机数? ( swift )

ios - 使用 alamofire 的 token 请求

ios - 注释未放置在 map 上

swift - Cocoa 绘制可 ScrollView 的困境

ios - 错误域=NSPOSIXErrorDomain 代码=100 "Protocol error"

ios - 错误 : Semantic Issue: Interface type cannot be statically allocated?

ios - 仅在我的阵列中的 map 上显示一个图钉

Xcode 4.5 的 iOS 模拟器不复制资源