iOS 上的 Flutter Backgroundfetch 不会触发

A.h*_*.h. 5 android ios background-fetch flutter

我正在尝试开发一个带有 flutter 的应用程序,它使用 background_fetch 包https://pub.dev/packages/background_fetch在特定时间段内连接到 BLE 设备并接收一些状态数据。在 Android 上,一切正常,并且每隔 x 分钟就会可靠地触发一次后台获取。

在 iOS 上,只要我通过 Xcode 手动模拟后台获取,它也可以工作。然而,当我在 iPhone 上运行我的应用程序时,后台提取永远不会被触发。对我来说,很难理解我的代码是否有错误或者 iOS 是否真的从不触发后台获取。如果操作系统从不触发后台获取,我如何才能触发后台获取?

我从其他帖子中了解到,只要后台提取在模拟器中正常工作,一切都可以正确编程。

能以一种简单的方式向我解释后台获取机制如何在 iOS 上工作吗?

感谢你并致以真诚的问候。

A.h*_*.h. 3

我想分享一些我在尝试解决这个问题时开始理解的观点:

即使他们在软件包网站上说 iOS 不支持计划任务,我也不太明白这意味着什么,因为使用后台任务的概念对我来说过去或现在仍然不是 100% 清楚。

据我了解,这基本上意味着 iOS 支持的唯一后台获取机制是在由minimumFetchInterval 参数定义的特定时间段内发生的默认后台获取。该时间至少可以为 15 分钟或更长,但绝不能少于 15 分钟,并通过示例中的以下代码片段实现:

int status = await BackgroundFetch.configure(BackgroundFetchConfig(
        minimumFetchInterval: 15,
        stopOnTerminate: false,
        enableHeadless: true,
        requiresBatteryNotLow: false,
        requiresCharging: false,
        requiresStorageNotLow: false,
        requiresDeviceIdle: false,
        requiredNetworkType: NetworkType.NONE
    ),
Run Code Online (Sandbox Code Playgroud)

但是,您无法真正测试获取事件 - 无法使用模拟器或真实设备。使用 Xcode,您可以通过从 IDE 触发后台提取来模拟后台提取。但是在定义的时间段之后,后台提取永远不会在模拟器中单独发生。如果您连接真正的 iPhone 并在此设备上部署您的应用程序,则不会发生这种情况。据我了解,该应用程序将在另一个生命周期中运行(无论这到底意味着什么),其中该应用程序将不会有时间来执行后台任务。

尽管如此,如果 iOS 没有为我的应用程序安排后台执行时间,我仍然无法理解如何或何时能够在真实设备上观察我的应用程序行为。我可以确定,如果它可以在模拟器上运行,它也可以在真实设备上运行吗?

如果有更了解的人可以提供帮助,那就太好了。