我的应用程序正在使用iBestival,而我正在使用func startMonitoring(for region: CLRegion)
.然后当用户进入/退出某些Beacon CLBeaconArea时,我使用func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion)
和func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion)
来运行逻辑.直到最近,一切都运行良好,我猜iOS 17更新了.
现在,在我调用startMonitoring(for:region)后,代码可以工作几个小时,然后我的应用程序似乎是somehow suspended and no longer able to use CoreLocation,而我的代码不工作,没有检测到进入和退出信标区域的事件.
有趣的是,我有一些Beacon管理应用程序可以扫描附近的信标,当我运行其中一个应用程序时,我在iPhone屏幕顶部看到"空心箭头"标志,标记CoreLocity正在使用,然后我的应用程序工作了几分钟,然后我的应用程序再次被暂停,并且没有检测到进入/退出信标区域的事件. 我可以弄清楚如何使用CoreLocity,但这取决于用户故意打开我的应用程序,而我的应用程序的唯一目的是在用户靠近他的饮料之一时提醒他,因此期望用户记住打开我的应用程序违背了我的应用程序的目的.
我为我的应用程序添加了Location Updates under Background Modes,也许我的应用程序在暂停之前有更多的后台时间,但问题仍然存在.
因此,对于任何基于Beacon的应用程序来说,它应该能够监控附近的信标,并在检测到信标后运行逻辑.关于我如何解决这个问题有什么建议吗?
iOS 17 CLMonitor具有BeaconIdentityCondition,可以匹配UID、Major、Minor,但这只是为了检测我们是否接近Beacon(进入事件),那么退出事件呢?
-
- 是否有一种方法可以使用旧代码:
startMonitoring(for: region)
- fix my app so it DOES NOT get suspended,以便该方法可以通过AlwaysAllow授权在后台监控信标?
- 是否有一种方法可以使用旧代码:
- 如果不是,如何捕获退出事件-当用户使用CLMonitor退出iOS 17中的Beacon区域时?我是否应该监视BeaconIdentityCondition从. summed到. unsummed的更改,并且该转换基本上是Exit事件?