我需要在我的应用处于后台时启动小型下载,并通过重要位置更改唤醒。但是这里有NSURLSessionConfiguration的Apples文档:
对自行决定的属性说明如下:
传输大量数据时,建议您设置 该属性的值为YES。这样做可以让系统安排这些 有时对设备进行传输。 例如, 系统可能会延迟传输大文件,直到设备为止 通过Wi-Fi插入并连接到网络。默认值 这个属性是NO。
会话对象仅将此属性的值应用于 应用程序在前台启动时的传输。 :用于 当您的应用处于后台系统时,传输已开始 总是自行决定开始转移 - 换句话说,就是系统 假定此属性为YES并忽略您指定的任何值。
这似乎意味着如果在后台启动下载,操作系统始终可以自行决定是否以及何时继续下载。在完成这些任务之前,操作系统似乎总是在等待wifi连接。我的经验支持这个猜想。我发现当设备处于蜂窝状态时,我可以发送几个下载通知。他们仍然卡住了。当我将设备切换到wifi时,它们都会通过。
WTF?为什么Apple禁止配置此行为,尤其是因为它们具有NSURLSessionConfiguration对象上的必要属性(自行决定,allowCellularAccess)。当然,当启动下载任务时,用户并不总是在WiFi中。我需要通过显着的位置更改来响应应用程序唤醒。我在后台会话上安排下载任务,并且在切换到WiFi之前永远不会在蜂窝网络上接收代表回调。那么这是否意味着我无法完成这些任务unil WiFi再次可用或我将应用程序带回前台?
你们有人为此解决了这个问题吗?
我已经想到了以下内容:
在位置更新后启动长时间运行的后台任务(旧样式),并使用defaultSessionConfiguration下载我的东西。任何经验,如果这可以工作?如果不这样,我会使用NSURLConnection,我认为(更老的风格)。