什么时候NSURLSession运行?

我有一种情况,当设备收到一个推送通知,我会发送一个NSURLSession与一个NSURLConnection结合。 我有几个有关NSURLSession的问题。

如果互联网连接丢失, NSURLSession's数据任务是否NSURLSession's在后台自动恢复?

NSURLSession自动尝试完成任务,如果最初没有互联网,或会话刚刚返回一个错误?

看起来好像是由你来处理重试。

当任何任务完成时,NSURLSession对象会调用委托的URLSession:task:didCompleteWithError:方法,如果任务成功完成,则返回nil。 如果任务是可恢复的下载任务,则NSError对象的userInfo字典将包含NSURLSessionDownloadTaskResumeData项的值。 您的应用程序应使用可达性API来确定何时重试,然后应调用downloadTaskWithResumeData:或downloadTaskWithResumeData:completionHandler:创build新的下载任务以继续下载。 转到步骤3(创build和恢复任务对象)。

https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts.html

如果互联网连接丢失,NSURLSession的数据任务是否会在后台自动恢复?

如果互联网连接丢失,您将在委托方法URLSession:task:didCompleteWithError收到错误NSURLErrorNetworkConnectionLost (错误代码:-1005)。 您负责使用invalidateAndCancel或finishAndInvalidate重试和/或使会话失效(即使在networking连接丢失的情况下,它也已经完成)。

NSURLSession会自动尝试完成任务,如果最初没有互联网,或会话只是返回一个错误?

如果没有Internet连接,则在委托方法URLSession:task:didCompleteWithError中将收到错误NSURLErrorNotConnectedToInternet (错误代码:-1009)。 你有责任使用invalidateAndCancel或finishAndInvalidate(如果需要的话)使会话失效(它将在没有互联网连接的情况下完成)。

参考文献:

URL加载系统编程指南

基金会常量参考

如果您在NSURLSession中使用后台configuration,那么当您的应用程序处于活动状态或在后台时,代表会在成功/失败时被调用。 你创build的任务被交给操作系统的恶魔,你的应用程序被唤醒,甚至开始(如果它被iOS杀死)

 `application:handleEventsForBackgroundURLSession:completionHandler`: 

当所有的任务完成你的会议代表将被调用

 URLSessionDidFinishEventsForBackgroundURLSession: 

背景会议的更多细节在这里

你也可以在这里得到苹果示例代码,并寻找“简单的后台传输”