Swift - post 设备连接后后台数据

Swift - post data in background once device is connected

我有一个应用要求用户 post 从表单到特定端点的数据。我需要用户能够离线使用该应用程序。因此,他们的想法是,他们可以像往常一样继续填写表格,然后一旦设备再次在线,数据就可以 posted 到相关端点。

我不确定如何在 iOS 中处理这个问题。如果可以在后台避免,我不想持续检查连接状态。有没有办法将任务排队并等待建立连接?

这是内置的,功能非常丰富。

Uploading Data to a WebsiteDownloading Files in the Background 了解全部详情。 (后台文档侧重于下载,但同样的方法也适用于发送。)

使用URLSessionConfiguration.background(withIdentifier:)创建后台会话。然后您可以将其与 URLSessionUploadTask 一起使用来发送您的数据。

如果您需要在任务完成时启动并收到通知,请设置 sessionSendsLaunchEvents(但听起来您可能不需要)。

使用委托进行回调。您不能为此配置使用完成处理程序。

例如,要创建会话(基于文档):

private lazy var urlSession: URLSession = {
    let config = URLSessionConfiguration.background(withIdentifier: "MySession")
    return URLSession(configuration: config, delegate: self, delegateQueue: nil)
}()

如果您需要在完成时重新启动,您还需要配置您的应用委托来处理这些启动事件,方法是实现:

func application(_ application: UIApplication,
                 handleEventsForBackgroundURLSession identifier: String,
                 completionHandler: @escaping () -> Void) 

(请务必在完成活动后致电 completionHandler!)

有关更多详细信息,请参阅 WWDC 2020 Background execution demystified