Фоновая загрузка URLSession - нет подключения к Интернету

Я использую URLSession с фоновой загрузкой. Я установил session делегата на self. У меня не вызываются методы делегата, когда я запускаю задачу загрузки без подключения к Интернету. Я хочу показать сообщение и отменить задачу, если нет подключения к Интернету или оно прерывается во время загрузки. Как вы можете это сделать?

let session = URLSession(configuration: URLSessionConfiguration.background(withIdentifier: "background"), delegate: self, delegateQueue: nil)
let request = ...
let data = ...
let task = session.uploadTask(with: request, fromFile: dataURL)
task.resume()

Когда я использую не фоновую задачу, я могу узнать об этом из

let task = self.session.dataTask(with: request) { (data, response, error) in

    //if let e = error as NSError?,
    //    e.code == Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue) {
    // handle no internet
    //}
}

person Maksym Shulha    schedule 28.09.2018    source источник
comment
ReachabilitySwift твой друг   -  person Neil Galiaskarov    schedule 28.09.2018
comment
@NeilGaliaskarov НЕТ! Это так ненадежно... Разве это не выдает ошибку из-за тайм-аута? Вы можете предвидеть это и повторять попытку каждые X секунд.   -  person J. Doe    schedule 28.09.2018
comment
Он не выдаст ошибку тайм-аута, потому что он запланирован как фоновая задача в зависимости от приоритета, поэтому он может выполняться до одной недели и все это время будет ждать подключения. @ Джей Доу   -  person Neil Galiaskarov    schedule 28.09.2018


Ответы (1)


let task = self.session.dataTask(with: request) { (data, response, error) in

    //if let e = error as NSError?,
    //    e.code == Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue) {
    // handle no internet
    //}
}

Блок завершения никогда не вызывается в фоновом сеансе (когда ваше приложение работает в фоновом режиме). Вам нужно использовать делегатов, которые вызываются после завершения всех задач.

Если вы не используете делегат. Использовать блок Reachability.whenUnreachable: отменить задачи и показать сообщение

person mpkupriyanov    schedule 30.11.2020