我使用 iOS Background FETCH n Background TRANSFER 来更新我们的应用程序。
当我们下载 MP4 作为大量文件的大量下载的一部分时,下载可能会突然停止并出现错误:
'客户端在收到整个响应之前关闭了连接'
http代码还是200。
由于公司蜂窝帐户,我们对数据没有限制,并且我们的 iPad 上有单个应用程序,因此管理层希望我们在干净安装的某个时间超过 20/30 下载更多的数据和文件数量。它们是每天发布的企业视频/ pdf。
我创建了一个 NSURLSession
NSURLSession * backgroundSession_ = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]
然后对于 mp4 或 PDF 的每个 URL,我从我的 NSURLSession 创建一个 NSURLSessionDownloadTask
NSURLSessionDownloadTask * downloadTask_ = [backgroundSession_ downloadTaskWithURL:url_];
每个下载任务的启动恢复。当所有返回 NSURLSession 完成时,我会在通知中告诉用户应用程序已更新。
我在我的 Mac 上使用 CHARLES PROXY 来监控下载。这需要一段时间,因为有很多文件,而且我注意到电影似乎在流式传输,所以可能很慢。通常它会检查已下载的内容,并且只下载最新的,但如果我进行大量下载,则说是全新安装,我注意到安静的流向 mp4 的流经常被杀死。他们有一个 200 代码,但有消息
'客户端在收到整个响应之前关闭了连接'
知道什么可能导致这种情况,因为它可以阻止我的 NSURLSession 完成,所以我的同步可以进入一种挂起状态。
图片:OK 下载:电影流并保存到磁盘:200:完成
图片:下载突然停止:
任何想法:我使用后台获取,所以不确定消息中的客户端是 iOS8 还是我的应用程序。在每个下载任务返回后,我将 tmp 文件复制到文档中的 mp4 并调用
[session finishTasksAndInvalidate];
如果其中一些下载任务失败,那么我注意到会话永远不会完成并卡住。当我再次获取时,我会得到所有这些旧的下载任务和旧的会话。