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

Joh*_*Doe 5 core-location cllocationmanager ios7 ibeacon

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

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

我已经看到人们使用它来放置com.companyname.app这样的地方的例子,我认为这更有意义,以防标识符被用来匹配应用程序的签名证书(但似乎没有!).其他人一直在使用它来命名像"Beacon Example","Apple","Kitchen"这样的名字.

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

dav*_*ung 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];
Run Code Online (Sandbox Code Playgroud)

这最常用于停止对区域的监控.像这样:

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];
Run Code Online (Sandbox Code Playgroud)

在我们停止区域监视的第二个示例中,区域对象中的字符串标识符实际上是使CoreLocation停止监视该区域的重要因素.