后台请求未执行Alamofire Swift

后台请求未执行Alamofire Swift,swift,alamofire,uiapplicationdelegate,background-task,backgroundtaskidentifier,Swift,Alamofire,Uiapplicationdelegate,Background Task,Backgroundtaskidentifier,我试着在后台打电话,比如POST,在DidReceiveMemotentification方法中更加精确,因为它们在推送通知到达时开始工作。我的问题是,在我打开应用程序之前,不会在后台模式下调用所有Alamofire.request。我现在已经有了 Im试图打开一个会话,但它无法使请求生效 这就是我想在后台执行的操作(手机在后台) 但它不起作用,即使我在这些请求下面添加代码,它也起作用,但请求的返回甚至请求都没有发出。当方法说“后台配置”时,它实际上意味着网络会话配置为上传/下载。相反,您需要做

我试着在后台打电话,比如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处于非活动状态/后台(未打开)时,呼叫或请求没有任何作用,然后当我打开应用程序时,它会像应该的那样运行。也许你的问题在这里有答案,我建议你看看:运气好吗@丹尼尔罗梅罗