我围绕AFNetworking 2.0的AFHTTPSessionManager及其漂亮的HTTP便捷方法构建了一个应用程序。现在,我需要确保所有这些联网功能都可以在后台运行,我很担心。

阅读Apple的文档,我可以看到后台会话不支持数据任务。简要查看AFHTTPSessionManager的GET,POST,PUT等实现之后,似乎全面使用了NSURLSessionDataTask。

有什么我想念的东西吗,或者我需要重新设计和返工吗?

如果我是对的(我怀疑我是对的),并且此代码路径不允许我进行后台上传和下载,是否有任何原因我无法包装AFURLSessionManager的其他使用非数据任务的方法当前HTTP方法包装“dataTaskWithRequest:completionHandler”的方式是否相同?例如对于POST,我也许可以使用“uploadTaskWithRequest:fromData:progress:completionHandler”?

我问,因为我想知道这是否可行,为什么AFNetworking开发人员不使用它,以便AFHTTPSessionManager的便捷方法可以进行后台传输。

最佳答案

AFNetworking允许您执行后台请求(尽管要小心,不要使用任何特定于任务的完成块,并确保实现适当的应用程序委托方法;请参阅AFNetworking 2.0 and background transfers)。您可能还可以使用requestWithMethodAFHTTPRequestSerializer来简化构建请求的过程(尽管IIRC,您不能将请求的HTTPBody与后台上传请求一起使用,因此您可能必须将请求的正文保存到文件中,然后使用该文件发出后台上传请求)。

但是,您绝对正确的是,在使用后台会话时不能使用AFHTTPSessionManager方法来启动NSURLSessionDataTask任务。关于他们为什么以这种方式实现它,这是一个更适合their issues forum的问题。

10-07 19:13
查看更多