运行 后台 HTTP 请求

Run HTTP requests in the background

在我的应用中,我需要发送一系列 4 个请求。请求需要依次发送。

此序列需要在后台运行。我知道 iOS 上有 URLSession.uploadTask 允许在后台上传文件的方法。

假设用户启动请求序列,然后立即将应用程序置于后台。

  1. 我可以使用 URLSession.uploadTask 方法发出常规 HTTP 请求吗?
  2. 当应用程序在后台和委托方法时 URLSession.uploadTask 将完成

func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?)

将被调用,我可以在这个委托方法中启动另一个 URLSession.uploadTask 吗,所以 所有 4 个请求都将 运行 在后台?

  1. URLSession.uploadTask 是运行 后台所有 4 个请求的正确方法吗?

首先,我会说您需要转到项目设置,select 您的目标,转到签名和功能并激活后台提取和后台处理。

关于运行后台HTTP请求的方法,你可以用那个方法,也可以用其他方法。我个人推荐使用 Alamofire,因为它是标准的并且有很多功能可以在将来扩展你的网络层。

是的,委托方法完成后仍将在后台执行。确保设置委托变量。

我会回答你所有的问题。但是,首先我选择了最后。

  • 3 右方法 运行 后台所有 4 个请求
  • 是的,你可以用这种方式,但它缺少一些细节。例如;您按顺序启动您的请求,然后您的应用程序进入后台。但是有一段时间,如果用户 kill app。在这种情况下会做什么?

  • 2-delegate 方法将在后台模式下捕获
  • 回答您可以在后台模式下处理您的请求,是的,委托方法将获得任何状态更改。

  • 1-我可以使用 URLSession.uploadTask 方法发出常规 HTTP 请求吗?
  • 回答其实这个问题我更喜欢AFNetworking SDK。我认为,以下主题将帮助您解决这个问题。

    • BGAppRefreshTask: 表示短任务的对象,通常用于在应用程序处于后台时刷新 运行 的内容。 Apple Document
    • 使用后台更新您的应用程序App Refresh

Calling the completion handler in a timely manner, and with an accurate result, helps determine how much future execution time your app receives. If you take too long to update your app, the system may schedule your app less frequently in the future to save power.