AFHTTPSessionManager 便捷方法(GET、POST、PUT 等)和后台传输

AFHTTPSessionManager convenience methods (GET, POST, PUT, etc) and background transfers

我围绕 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)。您可能也可以使用 AFHTTPRequestSerializerrequestWithMethod 来简化构建请求的过程(尽管 IIRC,您不能将请求的 HTTPBody 用于后台上传请求,因此您可能必须将请求正文保存到文件中,然后使用该文件发出后台上传请求。

但是您完全正确,在使用后台会话时不能使用 AFHTTPSessionManager 方法启动 NSURLSessionDataTask 任务。关于他们为什么这样实施,这是一个更适合 their issues forum.

的问题