Ios 使用不同UUID检测iBeacon

Ios 使用不同UUID检测iBeacon,ios,ibeacon,Ios,Ibeacon,我尝试使用UUID作为特定信标的标识符(在本例中使用电话)。我知道major和minor用于实现这一点,但我更愿意使用UUID或标识符字符串 话虽如此,是否不管使用CLBeacon API的UUID如何,都可以扫描信标?据我所知,使用不同UUID监控iBeacon区域没有任何限制。您可以执行以下操作: NSArray *uuids = [NSArray arrayWithObjects:@"####-####-###1", @"####-####-###2", nil]; for (NSStri

我尝试使用UUID作为特定信标的标识符(在本例中使用电话)。我知道major和minor用于实现这一点,但我更愿意使用UUID或标识符字符串


话虽如此,是否不管使用CLBeacon API的UUID如何,都可以扫描信标?

据我所知,使用不同UUID监控iBeacon区域没有任何限制。您可以执行以下操作:

NSArray *uuids = [NSArray arrayWithObjects:@"####-####-###1", @"####-####-###2", nil];
for (NSString *uuidString in uuids) {
    CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:uuidString] identifier:identifier];
    region.notifyOnEntry = entry;
    region.notifyOnExit = exit;
    region.notifyEntryStateOnDisplay = YES;
    [_locationManager startMonitoringForRegion:region];
}
您只需要确保在locationManager的委托方法中检查UUID。您可以使用以下内容:

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
    if ([region isKindOfClass:[CLBeaconRegion class]]) {
        CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
        NSLog(@"ProximityUUID:%@", beaconRegion.proximityUUID);
        NSLog(@"ProximityMajor:%@", beaconRegion.major);
        NSLog(@"ProximityMinorD:%@", beaconRegion.minor);
    }
}
您应该看到委托方法是用不同的UUID调用的


希望这有帮助。

在Android上,您可以扫描所有UUID。在iOS上你不能。见:


在iOS上,CoreLocation限制您最多监视20个不同的UUID。测距没有20的限制,但您仍然必须提前知道UUID。

谢谢您的评论。但是,如果我希望监视数百/数千个不同的UUID,其中一些可能不在扫描仪附近,该怎么办。当然,我不能扫描所有的UUID,所以我想没有一种方法可以嗅探空气中所有可用的UUID?如果你有“数百/数千”个不同的UUID,然后要么a)你的系统设计得很糟糕,没有利用每个UUID中40多亿个唯一的主/次代码,要么b)你打算通过将他们的信标放在几个常见的UUID中来检测属于其他人的信标,这些人不愿意与你合作。在第一种情况下,这是你的错误,在第二种情况下,苹果可能不打算让你这么做,不管其他BLE实现是否可行。我希望Chris Stratton的评论可以成为这里的官方答案。说得很好。你确定吗,我们可以在iOS的同一个应用程序中用不同的UUID监控不同的信标吗。(20个不同的UUID)是的,这是真实的,并且在我的回答中提到过。但问题是不管UUID如何检测iBeacons,这是不可能的。需要明确的是,iOS上的20个地区限制仅适用于监控。您可以覆盖更多的区域,但仍然必须提前设置UUID。