【发布时间】:2018-12-27 15:36:38
【问题描述】:
我想在后台下载/上传后发出额外的 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) {
}
问题
在后台传输后进行一些工作是正确的方法吗?
【问题讨论】:
标签: ios swift nsurlsession nsurlsessionconfiguration