我有一个快速运行的程序,即使该应用程序在后台,也可以检测到信标何时在范围内和范围外。
我的问题是didExitRegion大约需要30秒才能被触发。我知道这30秒是不可调整的值,但是对于我的应用程序来说,30秒是离开信标以获取通知的漫长路途。我还需要其他什么解决方案?
是否可以在应用程序处于后台时监视重大值,并给它10秒钟的误报率,如果仍然看不到主要值,那么我知道我超出范围了吗?
如果答案是肯定的,那么是否有任何样本显示出如何监控主要价值?
最佳答案
另一种方法是进行信标范围调整,并在较短的时间段(例如10秒)内未在该区域看到任何信标时创建自己的退出事件。
但是,这样做有很大的局限性:
在iOS的背景中,您只能在区域进入事件之后或应用程序被推送到背景后的有限时间段内设置信标。默认情况下,这只有5秒,但可以为extended up to 3 minutes programatically。在这三分钟之后,您将不会再收到范围内的回调,因此,如果到那时您还没有检测到10秒的退出,则必须依靠常规的didExitRegion
事件。
如果使用此技术,则需要认识到,iOS在尚未检测到信标后仍会报告信标的存在一段时间,且接近UNKNOWN。
这是在远程回调中如何执行此操作的示例:
var lastBeaconDetectionTime = 0.0
var exitFired = false
func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
for beacon in beacons {
if beacon.proximity != CLProximity.Unknown {
lastBeaconDetectionTime = NSDate().timeIntervalSince1970
exitFired = false
}
}
if NSDate().timeIntervalSince1970 - lastBeaconDetectionTime > 10.0 && !exitFired {
exitFired = true
// TODO: Add logic for region exit firing after 10 seconds
}
}
关于ios - 监视ibeacon时替代didexitregion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36892777/