iBeacon - proximityUUID和region.identifier之间的区别

时间:2013-12-13 08:39:11

标签: ios7 core-location cllocationmanager ibeacon

我对CLBeaconRegion UUID和字符串标识符的重要性感到有点困惑。 如果我的CLBeaconRegion已经有一个唯一的ID,那么强制使用另一个非唯一字符串标识符有什么意义呢?它纯粹是“化妆品”吗?

由于用户将无法扫描和连接到信标区域,例如,因为他们使用WiFi(和SSID),并且因为接收器应用程序需要预先编码和预定义的CLBeaconRegion才能输入和范围一个地区的信标,标识符的实际用途是什么?

我见过人们使用它来举办com.companyname.app这样的地方的例子,我觉得这更有意义,以防标识符被用来匹配应用程序的签名证书(但似乎没有! )。其他人一直在使用它来命名“Beacon Example”,“Apple”,“Kitchen”等名称。

换句话说,我不明白为什么接收器还需要指定region.identifier,因为它不知道它将连接到哪个广播器名称。无论我如何命名广播公司,接收方总是会获得其侧面定义的标识符。

1 个答案:

答案 0 :(得分:15)

CLBeaconRegion字符串标识符与iBeacon传输中的ID无关。它只是CoreLocationManager用于跟踪多个区域的查找键。

您可以随心所欲地创建其值,但人们通常使用包式样限定符,因为它是一种简单的方法来创建特定于应用程序的唯一字符串。

如果您想要修改或停止对您所在地区进行测距/监控,则会出现ID的主要用途。通过使用相同的ID,CoreLocation确切地知道您指的是哪个区域。

在下面的示例中,我们构造region1,然后开始监视它。然后,我们在region2中更改我们正在监视的次要标识符,并开始监视它。由于在region1和region2中使用了完全相同的字符串标识符,因此CoreLocation知道用第二个监视区域替换第一个受监视区域。

CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major: 1 minor: 1 identifier: @"my.made.up.unique.identifer];
[_locationManager startMonitoringForRegion:region1];
CLBeaconRegion *region2 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major: 1 minor: 2 identifier: @"my.made.up.unique.identifer];
[_locationManager startMonitoringForRegion:region2];

这最常用于停止对某个地区的监控。像这样:

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major: 1 minor: 1 identifier: @"another.made.up.unique.identifer];
[_locationManager startMonitoringForRegion:region];
...
[_locationManager stopMonitoringForRegion:region];

在我们停止区域监视的第二个例子中,区域对象中的字符串标识符实际上是让CoreLocation停止监视该区域的重要信息。