Is there any limitation to monitor more than 40 beacons in iOS SDK at a time?

// start beacon monitor
[beaconManager startMonitoringForRegion:region];

Hi Kumaresan,

iOS has a limit of beacon regions it can be monitoring for simultaneously. It's 20 regions. However, each region can be defined by UUID, UUID + Major or UUID + Major + Minor. Therefore, there's no limit to how many beacons can be included in a single region.

To put it shortly: you can easily monitor for 40 or even much more beacons :)

Cheers.

Thank you Wojtek for your response, we need some more clarification.

From you response we can able to monitor more than 40 beacons with same UUID and different Major & Minor values.

We are using UUID + Major + Minor option in 40 region monitoring with same UUID(B9407F30-F5F8-466E-AFF9-25556B57FE6D) and different Major & Minor values. But first 20 regions only iOS detects remains are failed.

Can you verify the below code and correct me if anything is wrong.
Code,
ESTBeaconRegion* region = [[ESTBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:UUID] major:major.intValue minor:minor.intValue identifier:identifier];
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
region.notifyEntryStateOnDisplay = YES;
[beaconManager startMonitoringForRegion:region];

Hi there,

Happy to clarify: iOS only allows you to monitor up to 20 regions per app - but keep in mind 1 region can comprise of more than 1 beacon, thus allowing you to monitor more than 20 or 40 beacons at a time.

Example:
Say you have 4 beacons:
1) UUID: X, Major: 1, minor: 1
2) UUID: X, Major: 1, minor: 2
3) UUID: X, Major: 2, minor: 1
4) UUID: X, Major: 2, minor: 2

If you define a region as following...

[[ESTBeaconRegion alloc]
 initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"X"]
 identifier:identifier]

...then you essentially end up with 1 region monitoring all 4 beacons. Your app is still free to register another 19 regions to monitor.

If you instead define a region per beacon...

[[ESTBeaconRegion alloc]
 initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"X"]
 major:1 minor:1 identifier:identifier1];
[[ESTBeaconRegion alloc]
 initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"X"]
 major:1 minor:2 identifier:identifier2];
[[ESTBeaconRegion alloc]
 initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"X"]
 major:2 minor:1 identifier:identifier3];
[[ESTBeaconRegion alloc]
 initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"X"]
 major:2 minor:2 identifier:identifier4];

...then you end up with 4 regions, all counting against your limit of 20 and thus leaving you with only 16 more region slots, but you still monitor the same 4 beacons.

As you see, a lot depends on how you architect your regions and UUID/major/minor values. If you want to monitor more than 20 beacons, you'll need to make your regions comprise of more than 1 beacon per region.

To my knowledge when you scan for just a UUID the events for entering a beacon region will not provide you with significant information to distinguish that beacon from any other beacon with the same UUID.

So which you can monitor over 20 beacons you can't tell which is which.

Hi TJ,

But after you enter the region and receive the notification, you can wake up the app and start ranging for the specific beacon. Also, monitoring can be dynamic. You can monitor up to 20 regions at a time, but you can shuffle them, so the app can store as many regions as you need.

Regards.

TJ, spot on. 20 regions can monitor more than 20 beacons, but you won't be able to tell the beacons apart. Could use ranging for that.

Wojtek,

Ya, there are some possible workarounds that may or may not be sufficient for different situations. I'm not sure dynamically changing the Regions is as easy as you think. We ran into some major problems attempting a similar solution. And Apple is cracking down on anything that could lead to scanning for all iBeacons in vicinity.

You're right - it's a complex process, but in rare cases where you need more than 20 regions can be tired as a workaround.

Cheers.