背景 NSURLSession 有很多文件和 wsse HTTPS header 用于身份验证

Background NSURLSession with lots of files and wsse HTTPS header for authentication

我对在我的 iOS 应用程序中实现的功能非常着迷:/

我正在尝试为用户添加在应用程序上下载一些文档的可能性,以便他即使在离线时也可以访问它。

例如,在应用程序中,用户可以浏览一些类别,这些类别将引导他找到文档。在功能中,他可以选择下载类别 A。该应用将从服务器下载该类别中的所有内容,以及文档。

一个分类小到几十个,大到几千个!这就是为什么我们选择即使应用程序在后台也能下载内容。

下面是使用 NSURLSession 的底层工作原理: 我有一个名为 DownloadManager 的 NSObject,它处理 NSURLSession 和 session 本身的委托。当我实例化它时,我使用后台配置创建 session 。 我处理我想要下载的类别以获得创建下载任务并启动它所需的任何内容。 当它完成时,一个类别有子类别等(深度最大为 3 级),我还必须下载这些子类别以获取它们的所有信息。

问题是,我不能一有任务就把任务放在 NSURLSession 中,因为服务器使用 wsse 身份验证系统来允许 GET 路由。这个 header 有 5 分钟的生命周期,所以我必须在它进入 NSURLSession object 之前创建它并且(几乎)确保它在之后直接发送,我限制了它的数量NSURLSession 中的任务限制为每个主机的同时连接数。

在调试模式下(使用 XCode 编译和启动),应用程序工作正常并且似乎没有问题 运行 在后台下载任务,但是当我在测试模式下测试它时(使用Crashlytics),后台处理真的慢很多,有时NSURLSession似乎不再发送事件了...

有什么难以理解的,因为我没有使用 NSURLSession 吗? session 在后台正常工作然后突然似乎死了并且或多或少长时间不发送事件(它可以从几秒到整分钟!)到 "work" 再次? :x

编辑:另一件事是,当应用程序处于前台时,下载工作没有任何问题

谢谢你给我的任何帮助, 比尔基克斯

好的,感谢 Eskimo,我在 Apple 开发者论坛上得到了答案。 我在这里链接 post,以便更多的开发人员可以轻松地看到解释:)

https://forums.developer.apple.com/message/125217#125217