Dan*_*ero 7 uiapplicationdelegate swift background-task alamofire backgroundtaskidentifier
我试图在POST,GET等后台进行调用,以便在didReceiveRemoteNotification方法中更精确,因为它们开始作为推送通知到达.我的问题是,在我打开应用程序之前,所有Alamofire.request都不会在后台模式中调用.我现在有
我试图打开一个会话,但它不会使请求工作.
这些是我想在后台执行的(后台手机)
Alamofire.Manager(configuration: configuration).request(.GET, url, parameters: nil)
.responseJSON { (_, _, JSON, _) in
//println(JSON)
println(JSON)
REST OF THE CODE
Run Code Online (Sandbox Code Playgroud)
但是它不会起作用,即使我在这些请求下面添加代码也可以工作,但是请求的返回甚至是请求都没有.
Jir*_*cak 17
虽然方法说"后台配置",但它实际上意味着网络会话被配置为允许中断和继续上载/下载.您需要做的是延长应用程序的执行时间,使其即使在后台运行一段时间
有beginBackgroundTaskWithExpirationHandler:专门为此而设计的.当您使用它时,您将获得更少的时间来执行您需要的任何内容(在此限制之后,无论如何,您的应用程序将被终止,现在您的应用程序立即终止).
您可以编写以下方法:
func beginBackgroundTask() -> UIBackgroundTaskIdentifier {
return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({})
}
func endBackgroundTask(taskID: UIBackgroundTaskIdentifier) {
UIApplication.sharedApplication().endBackgroundTask(taskID)
}
Run Code Online (Sandbox Code Playgroud)
当您想要使用它时,您只需在开始/完成下载调用时简单地开始/结束任务:
// 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)
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
编辑1:
如果问题是您的下载方法永远不会被调用,那么这意味着您没有在通知有效负载中发送正确的数据:
对于触发下载操作的推送通知,通知的有效负载必须包含内容可用密钥,其值设置为1.当存在该密钥时,系统会在后台唤醒应用程序(或将其启动到后台)并且调用app delegate的应用程序:didReceiveRemoteNotification:fetchCompletionHandler:method.您对该方法的实施应下载相关内容并将其集成到您的应用中. https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
| 归档时间: |
|
| 查看次数: |
4587 次 |
| 最近记录: |