URLSessionConfiguration Сбой фоновой задачи загрузки, когда устройство заблокировано с ошибкой - Потерянное соединение со службой фоновой передачи - PullRequest
0 голосов
/ 04 марта 2019

Я получаю

Ошибка домена = NSURLErrorDomain Code = -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

Task <>. <48> загрузка завершилась с ошибкой ошибка Domain = NSURLErrorDomain Code = -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 голосов
/ 17 июля 2019

Проверьте документацию iOS правильно, alamoSessionManager.request не будет работать в фоновом режиме, будут работать только alamoSessionManager.download и alamoSessionManager.upload.

При использовании alamoSessionManager.download ответ JSON будет загружен и сохранен в файле tmp.Обязательно переместитесь на постоянное место, прочитайте файл и преобразуйте его в JSONDecoder объект.Дайте мне знать, если вам не ясно об этом.

0 голосов
/ 05 марта 2019

В настоящее время Alamofire не совместим с фоновыми сессиями, как из-за невозможности сохранения и повторного подключения его API-интерфейсов закрытия, так и из-за того, что он invalidateAndCancel() URLSession, когда он deinit d.Мы рекомендуем использовать URLSession непосредственно для фонового сеанса или использовать сеансы переднего плана с API фонового задания.

...