可以在iOS 8中通过手机下载NSURLSession后台吗?

时间:2014-11-21 18:15:02

标签: ios objective-c background nsurlsession nsurlsessiondownloadtask

我需要在我的应用处于后台时启动小型下载,并通过重要位置更改唤醒。但是这里有NSURLSessionConfiguration的Apples文档:

https://developer.apple.com/library/IOs/documentation/Foundation/Reference/NSURLSessionConfiguration_class/index.html#//apple_ref/occ/instp/NSURLSessionConfiguration/discretionary

自行决定的属性说明如下:

  

传输大量数据时,建议您设置   该属性的值为YES。这样做可以让系统安排这些   有时对设备进行传输。 例如,   系统可能会延迟传输大文件,直到设备为止   通过Wi-Fi插入并连接到网络。默认值   这个属性是NO。

     

会话对象仅将此属性的值应用于   应用程序在前台启动时的传输。 :用于   当您的应用处于后台系统时,传输已开始   总是自行决定开始转移 - 换句话说,就是系统   假定此属性为YES并忽略您指定的任何值。

这似乎意味着如果在后台启动下载,操作系统始终可以自行决定是否以及何时继续下载。在完成这些任务之前,操作系统似乎总是在等待wifi连接。我的经验支持这个猜想。我发现当设备处于蜂窝状态时,我可以发送几个下载通知。他们仍然卡住了。当我将设备切换到wifi时,它们都会通过。

WTF?为什么Apple禁止配置此行为,尤其是因为它们具有NSURLSessionConfiguration对象上的必要属性(自行决定,allowCellularAccess)。当然,当启动下载任务时,用户并不总是在WiFi中。我需要通过显着的位置更改来响应应用程序唤醒。我在后台会话上安排下载任务,并且在切换到WiFi之前永远不会在蜂窝网络上接收代表回调。那么这是否意味着我无法完成这些任务unil WiFi再次可用或我将应用程序带回前台?

你们有人为此解决了这个问题吗?

我已经想到了以下内容:

在位置更新后启动长时间运行的后台任务(旧样式),并使用defaultSessionConfiguration下载我的东西。任何经验,如果这可以工作?如果不这样,我会使用NSURLConnection,我认为(更老的风格)。

0 个答案:

没有答案