虽然方法说“后台配置”,但它实际上意味着网络会话被配置为允许中断和继续上传/下载。相反,您需要做的是延长应用程序的执行时间,使其即使在后台也能工作一段时间
有beginBackgroundTaskWithExpirationHandler:
专门为此设计的。当你使用它时,你将有更多的时间来执行你需要的任何事情(在这个限制之后,你的应用程序无论如何都会被终止,现在你的应用程序会立即终止)。
您可以编写以下方法:
func beginBackgroundTask() -> UIBackgroundTaskIdentifier {
return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({})
}
func endBackgroundTask(taskID: UIBackgroundTaskIdentifier) {
UIApplication.sharedApplication().endBackgroundTask(taskID)
}
当您想使用它时,您只需在开始/结束下载调用时简单地开始/结束任务:
// Start task
let task = self.beginBackgroundTask()
// Do whatever you need, like download of the images
self.someBackgroundTask()
...
// End task once everything you need to do is done
self.endBackgroundTask(task)
希望能帮助到你!
编辑1:
如果问题是您的下载方法从未被调用,那么这意味着您没有在通知负载中发送正确的数据:
对于触发下载操作的推送通知,通知的有效负载必须包含其值设置为 1 的内容可用键。当该键存在时,系统会在后台唤醒应用程序(或将其启动到后台)并调用应用委托的 application:didReceiveRemoteNotification:fetchCompletionHandler: 方法。您对该方法的实现应该下载相关内容并将其集成到您的应用程序中。
https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html