【问题标题】:Swift: perform task once device connectedSwift:一旦设备连接就执行任务
【发布时间】:2021-01-15 18:12:19
【问题描述】:

我正在寻找在用户设备重新连接到互联网后执行 API 调用的最佳方法。

背景是我正在为需要将数据发布到特定端点的应用程序构建离线支持。所以我的想法是提交数据时设备会离线,然后一旦设备在线,我将发布到所需的端点。

我查看了各种后台任务,但找不到一个您可以指定在设备连接到网络后立即执行任务的任务。我知道,考虑到电池寿命和其他变量,Apple 倾向于限制何时可以执行后台任务,所以这只是无法完成的事情吗?

谢谢大家

【问题讨论】:

    标签: swift api background-task


    【解决方案1】:

    使用后台 URLSessionConfiguration 创建一个 URLSession:

    let config = URLSessionConfiguration.background(withIdentifier: backgroundIdentifier)
    let session = URLSession(configuration: config)
    

    当您使用此会话时,即使您的应用未运行,该操作也会尽可能在后台执行。您可以通过将 isDiscretionary 设置为 true 来进一步配置,以避免在蜂窝网络上发送数据并等待设备插入。

    请参阅Downloading Files in the Background 了解更多信息。虽然它专注于下载,但同样的过程也适用于发布。

    【讨论】:

    • 谢谢。当您说将在可能的情况下执行时,这是否意味着尽快或只是第一次成功执行计划的操作。 IE。连接设备后会立即执行此操作吗?
    • 如果您的应用在可以开始传输时处于前台,并且没有标记为任意,那么它将立即启动。如果您的应用程序在后台,则传输会自动标记为自行决定,因此在设备插入并连接 WiFi 之前它可能不会开始(尽管没有关于此的承诺;如果您的配置允许,它可以更早开始它)。如果您的应用当时不在前台,则无法确保它在网络可用时立即启动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2014-01-26
    • 2020-03-06
    相关资源
    最近更新 更多