我们正在开发音乐应用。即使用户隐藏了应用程序,该应用程序也可以下载音乐文件,但只能在10分钟后停止。我们阅读了很多关于它的文章,并发现如果你不是杂志/报纸就不可能不断下载。 但我们有很多客户对此抱怨。
使用NSURLSession或其他方法在iOS7 / iOS8中有什么新方法吗?
某些应用使用CoreLocation来获取当前位置的更新并开始下载。但感觉这是一个黑客攻击,对我们来说并不好。
在评论后编辑:
我们的下载周期:我们有一系列要下载的任务。每次我们从coredata开始排队的第一个 - >从后端获取网址以下载该曲目 - >使用NSURLConnection下载 - >加密文件,存储和保存一些信息到coredata - >如果有的话,开始下一个。
因此,我们不知道要下载的网址,例如由于安全限制,NSURLSessionDownloadTask在实际启动之前
答案 0 :(得分:4)
10分钟后转移中断的原因是iOS在后台播放约10分钟后暂停您的应用。所以它实际上是一种预期的行为。
是的,有一种方法可以使用NSURLSession
和后台会话配置对象([NSURLSessionConfiguration
backgroundSessionConfigurationWithIdentifier:]
)在iOS 7+中下载文件。在这种情况下,实际转移将在进程外执行,您的应用将通过委托方法([UIApplicationDelegate
application:handleEventsForBackgroundURLSession:completionHandler:]
)通知结果。
这可能不适合您的开箱即用,因为要在后台启动下载任务,您需要知道实际的URL。但是,您可以尝试将应用程序的服务器端部分重构为例如将请求重定向到实际下载而不是返回URL - 在这种情况下NSURLSession
将对您有效(如果您依赖此,也可以传递任意数量的自定义HTTP标头)。
另一个选择是下载您的下载URL,处理它,并启动另一个后台下载。但是,这会使客户端的逻辑显着复杂化(IMO)并使测试调试变得更加困难 - 后台网络传输并不是最简单的事情,也不是最简单的调试方法。