NSURLSession后台下载 - 恢复网络故障

Nic*_*uin 19 ios ios7 nsurlsession

在阅读了有关使用新iOS7 api(NS​​URLSession)进行后台下载的Apple文档后,我有点失望.我确信Apple在后台管理网络可用性的暂停/恢复(或提供这样做的选项),但没有...

所以阅读文档,这就是我们所拥有的:

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

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

到目前为止,我理解解决方案,但我的问题是:哪种架构最适合处理网络丢失并在后台继续下载?

在我这边我正在使用可达性,每次网络可用时,我恢复所有任务(在创建时通过NSArray引用),并在网络丢失时暂停它们.这在前景中效果很好但是对于背景我需要帮助以下几点:

  • 如果我的应用程序在前台没有连接,如果我在没有连接的情况下进入后台,我的所有任务都将暂停,如果网络可用则不会返回...

  • 在后台丢失网络,停止我的所有下载/任务.场景:

    • 在前台,我开始下载我的任务
    • 我转到后台,10秒后切换到"aireplan模式"
    • 我的所有任务都出错了.所以在方法URLSession:task:didCompleteWithError:我使用downloadTaskWithResumeData恢复它们,或者如果我不能(因为有些没有足够的恢复数据)我正在创建一个新任务而不恢复它(除非网络回到那个时间).
    • 然后我把wifi放了
    • 因为我还在后台,所以当网络回来而没有启动应用程序时,我无法触发"恢复"...

我如何解决这些问题?我错过了什么吗?

小智 3

由于我仍处于后台,当网络恢复时,如果不启动应用程序,我无法触发“恢复”\xe2\x80\xa6

\n\n
\n\n

您可以使用“后台提取”\xef\xbc\x8c,当通过 fetch\xef\xbc\x8c 启动应用程序时,您可以检查网络并恢复下载任务。

\n