当应用程序移至后台时如何使 URLSession 工作

How to make URLSession to work when app is moved to background

单击按钮时,我必须执行多个 API 调用以获取数据并将该数据写入文件。我正在使用操作队列和 URLSession datatask 来实现它。在处理此 API 调用时,如果通过单击主页按钮或通过 phone 调用将应用程序置于后台,则 API 调用不会处理。

我尝试了操作队列以及 Dispatch_async() 函数,但是在调用 API 调用后将应用置于后台时没有任何效果。

API 请求甚至应该在应用程序置于后台时工作。如何实现?

为了让您的应用程序继续在后台处理信息,您需要将配置从default更新为:

let configuration = URLSessionConfiguration.background(withIdentifier:
                                   "com.yourapp.bundleidentifier")

您可以在这个关于 URLSession 的非常好的教程中获得更多详细信息。

如果您正在使用 datatask,那么您可以实现 backgroundTask,这在 https://medium.com/@abhimuralidharan/finite-length-tasks-in-background-ios-swift-60f2db4fa01b

中有很好的解释

如果您正在使用 DownloadTask 或 UploadTask ,您可以使用配置

URLSessionConfiguration.background(withIdentifier:
                                   "com.yourapp.bundleidentifier")

试试这个 UIApplication.shared.beginBackgroundTask(expirationHandler: { }) 及其相关 API,希望它对你有用。

在您的 AppDelegate class 中添加 beginBackgroundTask

func applicationDidEnterBackground(_ application: UIApplication) {

    _ = UIApplication.shared.beginBackgroundTask(expirationHandler: {

    })
}