【问题标题】:Background request not execute Alamofire Swift后台请求不执行 Alamofire Swift
【发布时间】:2015-10-23 08:42:24
【问题描述】:

我正在尝试在后台调用 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 

但是它不起作用,即使我在这些请求下面添加代码它也可以工作,但是请求的返回甚至请求都没有发出。

【问题讨论】:

    标签: swift alamofire uiapplicationdelegate background-task backgroundtaskidentifier


    【解决方案1】:

    虽然方法说的是“后台配置”,但实际上是指配置了网络会话to allow for interruptions and continuation的上传/下载。相反,您需要做的是延长应用程序的执行时间,使其即使在后台也能工作一段时间

    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。当该键存在时,系统会唤醒应用程序 后台(或将其启动到后台)并调用应用程序 代表的 应用程序:didReceiveRemoteNotification:fetchCompletionHandler: 方法。您对该方法的实现应该下载 相关内容并将其集成到您的应用程序中。 https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

    【讨论】:

    • 嗨,谢谢你的回答,但我的问题是关联一个 Alamofire 会话或者我需要运行请求的内容导致你编写的那些函数运行代码但请求永远不会返回,甚至可能打电话,直到我打开应用程序。再次感谢。
    • 查看我的更新答案 - 如果问题是你根本没有调用你的方法,上面应该会有所帮助:)
    • 我知道内容可用我已经有了它,因为它是一个静默通知,所以例如,如果我收到推送通知,didReceiveRemoteNotification 激活,然后我想用 alamofire 发出请求,我的主要问题是 didReceiveRemoteNotification 中的代码有效,但是当 iphone 处于非活动状态/后台(未打开)时,调用或请求不执行任何操作,然后当我打开应用程序时它应该运行。
    • 也许你的问题在这里有答案,建议你看看:github.com/Alamofire/Alamofire/issues/194
    • 运气好吗? @丹尼尔罗梅罗
    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 2020-03-14
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多