2017-04-12 85 views
0

我有一个关于Alamofire及其与后台任务配置的SessionManager的行为的问题。我正在使用它在后台上传视频。链接背景任务Alamofire

步骤一:将视频上传:
这部分是标准的,但是,当上传完成后:

步骤二:完成上传:
我需要发送一个DELETE请求到服务器让它知道视频上传已完成。如果成功,响应将包含新上传的视频的位置标题。

第三步添加视频元数据:
有了这个位置,我需要PATCH请求视频元数据:标题和说明。

所以我的问题是关于覆盖会话管理器委托关闭。我可以覆盖sessionDidFinishEventsForBackgroundURLSessiontaskDidComplete,当我完全结束后台时,我需要调用系统completionHandler,将其作为SessionManager上的一个属性存储...因此,何时/应在哪里触发DELETE请求,然后何时/我应该在哪里发起PATCH请求?

我应该创建3个不同的后台会话配置标识符,以便我可以识别它们并确保按正确的顺序链接它们吗?因为显然我不能在封闭中说:第一次你被请求解雇了,但第二次解雇了这个请求? 2的哪个关闭是完成整个过程并调用系统completionHandler的正确方法?我不确定这是否正确,因为我将与Alamofire上传响应处理程序不同步。

另外我想知道Alamofire响应处理程序。如果应用程序一直在前台?我会简单地使用响应处理程序将alamofire请求链接在一起?但如果应用程序终止并在后台运行,这些处理程序还会在哪里?

任何有识之士将不胜感激。我意识到这里有很多事情要做,苹果前夕限制后台任务,我只是想知道这是否可能,如果是的话,如何去做呢?

+0

通过将其分为具有段落的部分使其更具可读性。 –

回答

0

我应该创建3个不同的背景会话配置 标识符,这样我就可以识别它们,并确保右 为了我把它们连?

我不认为你需要多个后台会话来确定哪个请求完成块被调用并链接下一个请求。你可以用

  1. 异步的NSOperation实现它: 您可以使用异步NSOperations与链的多个请求。在操作中添加依赖关系,并让iOS处理调度和处理依赖关系。请注意:我提到异步 NSOperation。 NSOperations的性质是Synchronous

  2. 承诺套件: 如果异步NSOperations太复杂,您可以随时使用Promise套件。只有在特定的请求完成后,Promise工具包才会执行请求,如果顶部的一个失败,整个依赖链将短路。

  3. 只需在上传任务完成块中创建新的数据任务即可上传视频。而不是在任务中使用委托模式使用完成块。这样,您不必确定代理被调用的是哪个请求,因为每个任务都有自己的完成块,您可以在编写代码时轻松链接它们。

如果应用程序终止,并在后台运行时将这些 处理器仍然是围绕?

我不是100%肯定,虽然,但据我所知,当您计划后台任务(背景会话),任务将继续,即使应用程序是killed.After全部执行,这就是为什么我们使用背景会议。所以我相信即使你杀了应用程序,完成处理程序也会执行。