一尘不染

AlamoFire在后台会话中下载

swift

我在新应用中使用Alamofire(基于Alamofire的下载管理器示例),我需要一些有关使用后台会话下载文件的说明。我需要重写SessionDelegate才能使其正常工作?还是只是backgroundCompletionHandler

通常,使用Alamofire在后台处理下载的步骤是什么?以及如何处理我的应用程序重新启动,下载量不断增加的情况。


阅读 303

收藏
2020-07-07

共1个答案

一尘不染

更新资料

基于这个惊人的教程,我整理了一个GitHub上可用的示例项目。它有一个后台会话管理的例子。

根据Apple的URL加载系统编程指南

在iOS和OS
X中,当用户重新启动您的应用程序时,您的应用程序应立即创建具有与上次运行应用程序时具有未完成任务的任何会话相同的标识符的后台配置对象,然后为每个配置对象创建一个会话。同样,这些新会话将自动与正在进行的后台活动重新关联。

因此,显然,通过使用适当的后台会话配置实例,您的下载将永远不会“不断变化”。

原始答案

在Alamofire的GitHub页面上

应用程序可以为后台会话和临时会话创建管理器,以及为默认会话配置进行自定义的新管理器,例如默认标头(HTTPAdditionalHeaders)或超时间隔(timeoutIntervalForRequest)。

默认情况下,顶级方法使用Manager具有默认会话配置的共享实例。但是,您可以创建具有后台会话配置的管理器,如下所示:

let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.example.app.background")
let manager = Alamofire.Manager(configuration: configuration)

然后,您可以使用该Manager实例发出请求。

manager.startRequestsImmediately = true
let request = NSURLRequest(URL: NSURL(string: "your.url.here")!)
manager.request(request)

通过查看其实现,它还有一个名为的属性backgroundCompletionHandler,因此您可以添加一个完成块:

manager.backgroundCompletionHandler = {
        // do something when the request has finished
    }
2020-07-07