我的应用程序正在使用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(进入事件),那么退出事件呢?

    1. 是否有一种方法可以使用旧代码:startMonitoring(for: region) - fix my app so it DOES NOT get suspended,以便该方法可以通过AlwaysAllow授权在后台监控信标?
  1. 如果不是,如何捕获退出事件-当用户使用CLMonitor退出iOS 17中的Beacon区域时?我是否应该监视BeaconIdentityCondition从. summed到. unsummed的更改,并且该转换基本上是Exit事件?

推荐答案

startMonitoring(for: region) API仍然可以使用. It is supposed to work in the background provided you have Location Always permission granted. This is still true as of IOS 17.

在最近的iOS版本中,我还目睹了iOS更频繁地未能履行API合同(例如,它不会在检测时100%唤醒应用程序). 但这些失败在iOS 17上并不普遍--它通常有效. 任何故障实际上都是iOS核心位置中的错误. 不幸的是,我们必须依靠苹果来修复此类错误.

您可以try 替代CLMonitor个API,但您可能会发现它们存在相同的可靠性问题. 如果您使用CLBeaconIdentityCondition设置监视器,您将收到类型为 CLMonitoirngEvent具有state属性,该属性将是这三个值之一: CLMonitoringStateSatisfied CLMonitoringStateUnsatisfied CLMonitoringStateUnknown. A transition from Satisfied to Unsatisfied indicates that you are no longer seeing the beacons由条件定义.

Ios相关问答推荐

删除领域中的cartItem时出现问题

SwiftUI检测顶级和安全区域插图

如何在SwiftUI中将图像整合到文本标签中间?

如何在后台显示 Swift UI 中的通讯通知?

无法向委托发送数据

如何将 AppIntent 添加到应用程序目标并在交互式小部件中使用它

为什么 Firebase Messaging 配置对于 IOS native 和 Flutter iOS 不同?

uikit中如何触发swiftui功能

如何在 SwiftUI 中同时使用 LongPressGesture 和 ScrollView 中的滚动?

从 PHAssets 生成图像时,iOS 应用程序因内存问题而崩溃

如何在swiftui中更改可搜索的搜索图标 colored颜色

将视图(例如 Text())不透明度设置为 0 或将背景设置为 Color.clear 会导致它不被绘制

setNeedsLayout 和 setNeedsDisplay

UIButton在iOS7中没有显示突出显示

Xcode 4 + iOS 4.3:存档类型不存在打包程序

如何在键盘上方添加工具栏?

Xcode 10.2 无法在 iOS < 10 的模拟器上运行应用程序

如何在 Android 和 iPhone 的移动应用程序中实施推荐计划

具有两种不同字体大小的 NSAttributedString 示例?

我的应用程序因使用广告支持框架而被拒绝.哪个图书馆负责?