iBeacon - 近程UUID和区域标识符的区别

6

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

由于用户无法像扫描和连接WiFi(和SSID)那样扫描和连接信标区域,而接收器应用程序需要预编码和预定义CLBeaconRegion以便进入和范围内的信标区域,标识符的真正用途是什么?

我看到一些人将其用于放置像com.companyname.app这样的东西,我认为这更有意义,以防标识符用于匹配应用程序的签名证书(但似乎并不是!)。其他人则将其用于放置名称,例如“信标示例”、“苹果”、“厨房”。

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

1个回答

17

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停止监视该区域方面起到了关键作用。

谢谢David。现在完美回答并理解了。 - John Doe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接