我们应该为所有差异可下载文件创建差异唯一会话标识符 - swift

时间:2018-05-29 13:39:28

标签: ios swift nsurlsession nsurlsessionconfiguration

我是新手IOS编程。我想创建一个示例应用程序,允许用户从我的服务器下载许多文件。例如,我有10个文件,那么我应该调用方法let configuration = URLSessionConfiguration.background(withIdentifier: "firstTask") 10次,但差异标识符如第一个文件withIdentifier: "firstTask"和第二个文件应该是withIdentifier: "secondTask"?。原因是我希望能够让用户下载相同的文件名,然后我只需要用其他名称修改withIdentifier: ""。是对的吗?请给我一些建议。

其他问题:

我们如何使用特定标识符使会话无效?

2 个答案:

答案 0 :(得分:1)

根据documentation

  

<强>标识符   配置对象的唯一标识符。此参数不能为nil或空字符串。

还有一个声明:

  

如果iOS应用程序被系统终止并重新启动,则应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索终止时正在进行的传输的状态。此行为仅适用于系统正常终止应用程序。如果用户从多任务屏幕终止应用程序,系统将取消所有会话的后台传输。此外,系统不会自动重新启动用户强制退出的应用程序。在再次开始传输之前,用户必须明确重新启动应用程序。

Finally

  

使用URLSession的类方法background(withIdentifier :)创建一个后台URLSessionConfiguration对象,提供在您的应用中唯一的会话标识符。由于大多数应用程序只需要几个后台会话(通常是一个),因此您可以使用固定字符串作为标识符,而不是动态生成的标识符。标识符不需要全局唯一。

为您的应用使用一个唯一的com.awesomeapps.appname.sessionId是合理的。 例如,它可能包含包ID,例如整个应用的{{1}}。

答案 1 :(得分:0)

Downloading Files in the Background建议您“使用少量的后台会话-最好是一个,并使用这些会话一次启动许多下载任务。”

但是,如果您需要在应用暂停期间需要详细的下载完成通知,则需要多个会话。与会话相关的所有后台传输完成后,系统将恢复该应用,并通过UIApplicationDelegate方法application(_:handleEventsForBackgroundURLSession:completionHandler:)将会话标识符发送回该应用。

会话标识符不必在全局范围内唯一。如果您只有一个会话,选择什么都没关系。

相关问题