一个应用程序可以使用 startMonitoringForRegion 注册多少个 UUID?

How many UUID can an app register using startMonitoringForRegion?

目前我的接收器应用程序可以使用一个 UUID,这是我的代码:

- (void)startMonitoringItem {
    CLBeaconRegion *beaconRegion = [self beaconRegionWithItem];
    [self.locationManager startMonitoringForRegion:beaconRegion];
    [self.locationManager startRangingBeaconsInRegion:beaconRegion];
}

- (CLBeaconRegion *)beaconRegionWithItem{

    NSUUID *iPadTransmitterUUID = [[NSUUID alloc] initWithUUIDString:@"A77A1B68-49A7-4DBF-914C-760D07FBB87B"];

    CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:iPadTransmitterUUID
                                                                       major:1
                                                                       minor:1
                                                                  identifier:@"iPadTransmitter"];
    return beaconRegion;
}

我可以增加为应用程序注册的 UUID 的数量。但是,有一个限制。来自苹果文档:

An app can register up to 20 regions at a time

这让我怀疑我的应用程序的可行性...我想为一个拥有大约 500 家商店的购物中心设置一个 iBeacon 接收器应用程序。我想注册约 500 个 UUID,但应用程序一次只能检测大约 5 个商店的 iBecon UUID。最大区域只有20怎么办?

minor 和 major 值的最大组合是多少?

处理大量信标的关键是为 major 和 minor 创建一个带有通配符的区域,这样任何组合都会被匹配。这样您就可以使用单一区域来监控同一 UUID 下的所有信标:

CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:commonUUID identifier:@"commonRegion"];

以上假定您可以使所有商店的信标具有相同的 UUID。如果不能,您可以添加更多基于 UUID 的区域,但 iOS.

总共限制为 20 个区域

如果您使用此技术,您还需要确定信标的范围,以便您可以读取每个信标上的实际主要和次要标识符。您的代码表明您无论如何都在这样做。对特定信标采取行动的逻辑将包含在测距回调中。