使用 iBeacon 和 iBeacon ,基于 iBeacon 检测让应用程序从非运行状态自动启动非常容易CoreLocation
。
为了使其工作,必须满足一些先决条件:
- 该应用程序之前必须手动启动过一次。
- 应用程序必须在首次启动时向用户请求并获得“始终”的位置访问权限。
- 应用程序必须通过调用注册一个
CLBeaconRegion
,并设置. 由于您还想范围,您可以同时调用. 通常在您的CLLocationManager
locationManager.startMonitoring(region: region)
locationManager.delegate
startRanging(beacons: beacons, region: region)
AppDelegate.
- 手机必须启用定位并打开蓝牙。
如果您正确执行上述所有操作,那么 iOS CoreLocation 将记住您的应用已注册CLBeaconRegion
并在信标检测时自动启动您的应用。即使您重新启动手机,或从任务切换器中终止您的应用程序,它也会执行此操作。在后台自动启动你的应用程序后,它会didEnter(region: region)
在你的委托上调用回调,然后开始didRange(beacons: beacons, region: region)
每秒调用一次回调,持续大约 10 秒,直到操作系统再次暂停你的应用程序。
测试时有很多方法会出错,所以这是行不通的。但如果你做的一切都正确,这是非常可靠的。
你不能做的是以编程方式将应用程序带到前台,因为 iOS 不允许这样做。在 iOS 上,用户必须通过手势将应用程序带到前台——这与信标无关,而是 OS 设计中长期存在的规则。这就是为什么许多应用程序在检测到信标后处于这种短暂的后台状态时会发送本地通知,以便为用户提供一种将应用程序带到前台的方法。