iBeacon major/minor 值在监控区域时可用吗?

Are iBeacon major/minor values available when monitoring a region?

我正在尝试构建一个测试应用程序来检测部署在几个物理位置的给定 iBeacon 集。检测应该在后台完成,按照一定的逻辑调用服务器。

Apple's rule of thumb 对我的所有物理位置使用相同的 UUID:

The UUID is shared by all locations.

This allows an iOS device to use a single identifier to recognize any of the stores with a single region.

Each specific store, San Francisco, Paris, and London, is then assigned a unique major value, allowing a device to identify which specific store it is in.

找到了the call for setting a region with a given UUID,但是没找到检测UUID时返回什么对象,返回什么字段

当 iOS 检测到具有给定 UUID 的信标时,应用程序从哪里获取 major/minor 值?

使用监控 API 时,您只能在 CoreLocation 的 enter/exit 回调中获得一个 CLBeaconRegion 对象。 class 定义的信标区域通常不代表单个信标,而是基于通配符标识符的一系列信标。

因此,如果您在区域定义中使用通配符(这是典型的)您实际上看不到哪个特定信标触发了区域条目。解决此问题, 您必须同时结合监控和测距 API。如果您同时监视和测距,CoreLocation 将在 didRangeBeacons beacons: [CLBeacon] inRegion region: CLBeaconRegion 方法中给您一个回调,其中包含它看到的所有 CLBeacon 对象的数组。

但是,由于带有信标数组的回调每秒到达一次,因此如有必要,您将需要添加自定义逻辑以仅在信标首次出现时执行一次操作。

由于您需要背景检测,因此您必须同时进行 测距和监控。即使由于缺少特定的信标信息而没有在监控回调中放置任何内容,您也需要进行监控,以便在检测到新的信标时在后台唤醒您的应用程序。然后,在您的应用程序再次暂停之​​前,您将收到大约 10 秒的范围回调。