如何从特定范围内的信标唤醒应用程序?

how to wake up app from beacon in specific range?

可以设置唤醒距离吗?如果可以,如何设置唤醒距离/最小rssi?

我想在最小距离为 5 米或设置最小 RSSI 值内设置唤醒应用程序。现在我只能根据它的默认范围从信标唤醒应用程序来唤醒。

我正在使用 Swift 3 开发应用程序。

iOS CoreLocation API 无法设置信标监控回调的最小距离。完成类似任务的常用方法是使用 Beacon 测距。

您可以通过同时启动监视和测距来完成此操作:

locationManager?.startMonitoring(for: region)
locationManager?.startRangingBeacons(in: region)

监控回调将在首次检测到信标时在后台唤醒您的应用,并自动开始测距。然后在测距回调中,仅当满足最小距离条件时才执行逻辑:

func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
  for beacon in beacons {
    // Is beacon less than 5 meters away?
    if beacon.accuracy < 5.0 {
      // Custom logic here
    }
}

对此有一些注意事项:

  1. 在后台,在区域中首次检测到信标后,您只能进行 10 秒的测距。因此,如果您在其传输范围外缘(比如 40 米)的背景中检测到信标,则只有当用户在 10 秒内到达 5 米以内时,您才会触发自定义逻辑。有一些方法可以 lengthen the time of background ranging to 180 seconds 使它更实用。

  2. 测距回调每秒触发一次。所以如果你只想执行一次你的逻辑,你必须设置某种标志来防止它每秒都在执行。