2024 Beacon 应用程序 - 开始监控(针对:区域)或

问题描述 投票:0回答:1

我的应用程序正在使用 iBeacons,并且我正在使用 func startMonitoring(对于区域:CLRegion)。然后我使用 func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) 和 func locationManager(_ manager: CLLocationManager, didExitRegion zone: CLRegion) 在用户进入/退出某些 Beacon CLBeaconRegion 时运行逻辑。一切都运行良好,直到最近,我猜是 iOS 17 更新。

现在,在我调用startMonitoring(for:region)后,代码可以工作几个小时,然后我的应用程序似乎以某种方式暂停并且不再能够使用CoreLocation,并且我的代码不起作用,进入和退出事件都指向信标未检测到区域。

有趣的是,我有一些信标管理应用程序可以扫描附近的信标,当我运行其中一个应用程序时,我在 iPhone 屏幕顶部看到“空心箭头”标志,标志着 CoreLocation 正在使用,然后我的应用程序运行了几分钟,然后我的应用程序再次被暂停,并且没有检测到信标区域的进入/退出事件。我可以弄清楚如何使用 CoreLocation,但这将依赖于用户有意打开我的应用程序,而我的应用程序的唯一目的是提醒用户何时靠近他的信标之一,因此期望用户记住打开我的应用程序会失败应用程序的目的。

我在我的应用程序的后台模式下添加了

位置更新,也许我的应用程序在暂停之前有更多的后台时间,但问题仍然存在。

因此,对于任何基于信标的应用程序来说,它应该能够监视附近的信标,并在检测到信标后运行逻辑。关于如何解决这个问题有什么建议吗?

iOS 17 CLMonitor 有 BeaconIdentityCondition 可以匹配 UUID、主要、次要但这只是为了检测我们是否靠近 Beacon(进入事件),那么退出事件呢?

    1. 有没有办法使用旧代码:startMonitoring(for:region) -
    2. 修复我的应用程序,使其不会被暂停,以便此方法可以通过AlwaysAllow授权在后台监视信标?
  1. 如果不是,如何捕获退出事件 - 当用户使用 CLMonitor 退出 iOS 17 中的 Beacon 区域时?我是否应该监视 BeaconIdentityCondition 从 .satisfied 到 .unsatisfied 的变化,并且该转换基本上是 Exit 事件?
ios swift ibeacon
1个回答
0
投票

startMonitoring(for: region)

 API 仍然可以使用。 
如果您授予“始终位置”权限,它应该在后台运行。从 IOS 17 开始仍然如此。

在最近的 iOS 版本中,我还目睹了 iOS 更频繁地未能履行 API 合同(例如,它不会 100% 检测到唤醒应用程序)。但这些失败在 iOS 17 上并不普遍——它通常会起作用。任何失败实际上都是 iOS Core Location 中的错误。不幸的是,我们必须依靠苹果来修复这些错误。

您可以尝试替代的

CLMonitor

 API,但您可能会发现它们具有相同的可靠性问题。如果您设置带有 
CLBeaconIdentityCondition
 的监视器,您将收到以下类型的事件
CLMonitoirngEvent
 具有 
state
 属性,该属性将是以下三个值之一:
CLMonitoringStateSatisfied
CLMonitoringStateUnsatisfied
CLMonitoringStateUnknown
从满意到不满意的转变表示您不再看到由条件定义的信标

© www.soinside.com 2019 - 2024. All rights reserved.