后台请求未执行Alamofire Swift
我试着在后台打电话,比如POST,在DidReceiveMemotentification方法中更加精确,因为它们在推送通知到达时开始工作。我的问题是,在我打开应用程序之前,不会在后台模式下调用所有Alamofire.request。我现在已经有了 Im试图打开一个会话,但它无法使请求生效 这就是我想在后台执行的操作(手机在后台) 但它不起作用,即使我在这些请求下面添加代码,它也起作用,但请求的返回甚至请求都没有发出。当方法说“后台配置”时,它实际上意味着网络会话配置为上传/下载。相反,您需要做的是延长应用程序的执行时间,使其即使在后台也能工作一段时间后台请求未执行Alamofire Swift,swift,alamofire,uiapplicationdelegate,background-task,backgroundtaskidentifier,Swift,Alamofire,Uiapplicationdelegate,Background Task,Backgroundtaskidentifier,我试着在后台打电话,比如POST,在DidReceiveMemotentification方法中更加精确,因为它们在推送通知到达时开始工作。我的问题是,在我打开应用程序之前,不会在后台模式下调用所有Alamofire.request。我现在已经有了 Im试图打开一个会话,但它无法使请求生效 这就是我想在后台执行的操作(手机在后台) 但它不起作用,即使我在这些请求下面添加代码,它也起作用,但请求的返回甚至请求都没有发出。当方法说“后台配置”时,它实际上意味着网络会话配置为上传/下载。相反,您需要做
Alamofire.Manager(configuration: configuration).request(.GET, url, parameters: nil)
.responseJSON { (_, _, JSON, _) in
//println(JSON)
println(JSON)
REST OF THE CODE
有专门为此设计的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。当该键存在时,系统会在中唤醒应用程序
后台(或将其启动到后台)并调用应用程序
代表的
应用程序:DidReceiveEmotentification:fetchCompletionHandler:
方法。该方法的实现应该下载
相关内容并将其集成到您的应用程序中。
您好,谢谢您的回答,但我的问题是关联Alamofire会话,或者我需要运行请求,因为您编写的那些函数运行代码,但请求在我打开应用程序之前不会返回,甚至可能不会调用。再次感谢。请参阅我的更新答案-如果问题是您根本没有调用您的方法,以上内容应该会有所帮助:)我知道可用的内容,我已经有了它,因为是静默通知,因此,例如,如果我收到推送通知,DidReceiveMemotentification激活,然后我想向alamofire发出请求,我的主要问题是DidReceiveMemotentification中的代码有效,但当iphone处于非活动状态/后台(未打开)时,呼叫或请求没有任何作用,然后当我打开应用程序时,它会像应该的那样运行。也许你的问题在这里有答案,我建议你看看:运气好吗@丹尼尔罗梅罗