我正在尝试构建一个测试应用程序,该应用程序将检测部署在几个物理位置的一组给定的iBeacon。检测应在后台完成,并按照一定的逻辑调用服务器。
Apple 的经验法则是对我的所有物理位置使用相同的 UUID:
UUID 由所有位置共享。
这允许 iOS 设备使用单个标识符来识别具有单个区域的任何应用商店。
然后,每个特定的商店(旧金山、巴黎和伦敦)都被分配一个唯一的主值,允许设备识别哪个特定的商店它在。
我找到了使用给定 UUID 设置区域的调用,但没有找到检测到 UUID 时返回的对象以及返回的字段。
当iOS检测到具有给定UUID
的信标时,应用程序从哪里获得major
/minor
值?
使用监控 API 时,只能在CoreLocation
的进入/退出回调中获取CLBeaconRegion
对象。 此类定义的信标区域通常不表示单个信标, 而是基于通配符标识符的一系列信标.
因此, 如果您在区域定义中使用通配符 (这是典型的),您实际上看不到哪个特定信标触发了区域条目. 若要解决此问题,必须同时组合监视和范围 API。 如果同时监视和范围,CoreLocation
将在 didRangeBeacons beacons: [CLBeacon] inRegion region: CLBeaconRegion
方法中为您提供一个回调,其中包含它看到的所有CLBeacon
对象的数组。
由于带有信标数组的回调每秒到达一次, 但是, 如有必要,您将需要添加自定义逻辑以仅在信标首次出现时执行一次操作.
由于您想要背景检测,因此同时进行测距和监控非常重要。 即使由于缺少特定的信标信息而没有在监视回调中放置任何内容,也需要进行监视,以使应用在新的信标检测后在后台唤醒。 然后,在应用再次挂起之前,您将收到大约 10 秒的范围回调。