Я хочу сделать дополнительный HTTP-запрос после фоновой загрузки / выгрузки, чтобы подтвердить, что приложение завершило загрузку / выгрузку.Позвольте мне показать вам простой пример.
Сначала нам нужно создать задачу загрузки / выгрузки.
let configuration = URLSessionConfiguration.background(withIdentifier: UUID().uuidString)
configuration.sessionSendsLaunchEvents = true
configuration.isDiscretionary = true
let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
session.downloadTask(with: largeFileURL).resume()
Затем нам нужно запустить дополнительный запрос после завершения загрузки / выгрузки.Чтобы предотвратить приостановку приложения, я использую фоновую задачу.
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: { [weak self] in
finishBackgroundTask()
})
let task = URLSession.shared.dataTask(with: someURL) { data, response, error in
// Process response.
finishBackgroundTask()
}
task.resume()
}
private func finishBackgroundTask() {
UIApplication.shared.endBackgroundTask(backgroundTaskIdentifier)
backgroundTaskIdentifier = .invalid
}
Последнее, что нужно реализовать, - реализовать метод делегата приложения:
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
}
Вопрос
Это правильный способ сделать какую-то работу после фоновой передачи?