设备锁定并出现错误时,URLSessionConfiguration后台下载任务失败-与后台传输服务的连接断开

时间:2019-03-04 00:13:04

标签: ios swift alamofire nsurlsession nsurlsessiondownloadtask

我得到

  

Error Domain = NSURLErrorDomain代码= -997“与后台传输服务的连接断开”

启动后台下载过程后锁定屏幕时。我正在使用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:找不到CombinedSequence属性

     

任务<>。<48>完成,错误-代码:-999

     

任务<>。<48>加载失败,并显示错误错误域= NSURLErrorDomain代码= -997“与后台传输服务的连接断开” UserInfo = {NSErrorFailingURLStringKey =,NSErrorFailingURLKey =,_NSURLErrorRelatedURLSessionTaskErrorKey =,_NSURLErrorFailingURLSessionTaskErrorKey =,NSLocalizedDescription =已丢失连接后台传输服务} [-997]

错误。_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

2 个答案:

答案 0 :(得分:0)

Alamofire目前无法与后台会话完全兼容,这是由于无法持久保存并重新连接其关闭API,以及invalidateAndCancel() URLSession是{ {1}} d。我们建议您直接将deinit用于后台会话,或将后台会话API与前台会话一起使用。

答案 1 :(得分:0)

正确检查iOS文档,alamoSessionManager.request在后​​台不起作用,仅alamoSessionManager.downloadalamoSessionManager.upload将起作用。

使用alamoSessionManager.download时,将下载JSON响应并将其保存在tmp文件中。确保移至永久位置并读取文件并将其转换为JSONDecoder对象。如果您不清楚,请告诉我。