iBeacon:如何区分具有相同次要和重要值的iBeacons

时间:2015-07-16 09:05:18

标签: ios bluetooth-lowenergy hardware uuid ibeacon

iBeacon specifications说:

  

UUID,主要和次要值提供识别信息   对于iBeacon。

主要次要值用于区分区域内的产品或元素。 Apple文档很清楚,如何做到这一点,商店的例子很安静。

然而,只有当每个区域(或子区域)有一个元素类别时,所有这些都能很好地工作但是如果我们希望APP能够区分它就不能正常工作在相同区域内具有相同次要和主要的元素

是否存在与iBeacon关联的其他唯一标识符,可以对其进行监控/检测,以便区分具有相同次要值和主要值的iBeacons?

编辑:其他信息

为了测试这个,我创建了两个具有相同UUID和相同主要和次要值的iBeacons,然后开始监视我指定的UUID中的iBeacons。

我为iBeacons实施的回调代码区域如下:

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {

    NSLog(@"Did range %lu beacon in region %@", (unsigned long)[beacons count], region.identifier);

    for (int i=0; i<[beacons count]; i++) {
        CLBeacon *beacon = [beacons objectAtIndex:i]; 
        // <- breakpoint!
        NSString *_cnt = [[NSString alloc] initWithFormat:@"Number of beacons is : %lu and the current one %i is %f away from you %@",(unsigned long)[beacons count], i, beacon.accuracy, beacon.description];
        }
   }

当我向信标线添加断点时,我发现检测到的两个CLBeacon对象都具有相同的信息:

CLBeacon (uuid:<__NSConcreteUUID 0x17003d8e0> 74278BDA-B644-4520-8F0C-720EAF059935, major:20, minor:0, proximity:1 +/- 0.17m, rssi:-42)
CLBeacon (uuid:<__NSConcreteUUID 0x17003e840> 74278BDA-B644-4520-8F0C-720EAF059935, major:20, minor:0, proximity:2 +/- 0.28m, rssi:-47)

因此,除非我指定一个主要和次要值,否则我无法区分它们。

以下是我用来配置iBeacons的应用程序的屏幕截图(我没有其他可以配置的字段):

enter image description here

我想知道在蓝牙信号中是否有某种识别每个硬件的唯一标识符。

3 个答案:

答案 0 :(得分:5)

这实际上是一个常见的问题,很难解决。虽然最佳做法通常说不同的信标不应该共享相同的ProximityUUID / major / minor,有时候合法多个信标在同一个地方传输相同标识符的边缘情况。(例如,在Radius Networks,我们将默认标识符放入我们的信标中,因此如果您订购其中两个信标,它们最初将具有相同的标识符,直到您改变它们。)

使用CoreLocation API,两个具有相同标识符的不同信标将在didRangeBeacons:InRegion:回调中显示为两个信标。这是因为在内部,iOS使用硬件地址保持唯一性。遗憾的是, CoreLocation不公开硬件mac地址或任何其他指示哪个具有相同标识符的信标是哪个。

在前台使用CoreBluetooth API,您可以看到每个iBeacon的回调。虽然你无法获得他们的硬件mac地址,但iOS确实为每个人分配了一个唯一的标识符(可能基于mac地址的哈希值),因此你可以区分它们。不幸的是,iOS不允许您使用CoreBluetooth读取广告的内容,因此您无法读取iBeacon标识符。你所能做的就是计算有多少不同的蓝牙LE可能会或可能不是iBeacons。

可以通过使用何时出现设备及其RSSI读数的时间戳来尝试关联CoreBluetooth和CoreLocation中的信息,从而做一些hacky技巧。但是,当许多信标出现时,这些技巧并不是非常可靠,容易失败。

答案 1 :(得分:3)

UUID,major和minor之间的组合应该是唯一的。不应该是具有相同组合的两个信标,这是信标标识符!

答案 2 :(得分:1)

您希望“能够区分同一区域内同一个次要和主要的元素”的陈述没有意义,因为UUID,major和minor的组合是您可以获得的最具体的。

如果您需要获得更大的地理覆盖范围,您可以拥有多个具有相同UUID /主要/次要的信标,但这些信标将无法区分。

如何对主要值和次要值应用含义完全取决于您 - 如果您需要区分两个位置,则只需应用不同的次要值。