微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iOS 上的 Flutter Backgroundfetch 不会触发

如何解决iOS 上的 Flutter Backgroundfetch 不会触发

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

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

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

能否以某种简单的方式向我解释后台获取机制在 iOS 上的工作原理?

谢谢并致以最诚挚的问候。

解决方法

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

即使他们在包网站上说iOS不支持计划任务,我也没有真正理解这是什么意思,因为使用后台任务的概念对我来说不是或仍然不是100%清楚。

据我所知,这基本上意味着 iOS 支持的唯一后台获取机制是在 minimumFetchInterval 参数定义的特定时间段内发生的 DEFAULT 后台获取。这可以至少为 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
    ),

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。