The iBeacon standard is an extension of iOS Location Services. An iBeacon device is a BLE (Bluetooth Low Energy) device that transmits its identification information: UUID, major and minor. This information is hierarchical and the UUID is the beacon’s principal identifier.
The iBeacon functionality provided by iOS allows two types of actions:
- Region Monitoring. Notifies when the user has entered the specified region.
- Beacon Ranging. Determines the estimated proximity to the beacons in range: Immediate, Near, Far or Unknown.
A Region in iBeacon terms is a network of iBeacons defined by a shared identifier. A region can be specified by its UUID, major and minor. Major and minor identifiers are optional for a region, but the UUID is necessary.
iOS limits to 20 the number of regions that may be simultaneously monitored by a single app.
For example, if only the UUID is specified for a region, all the iBeacons with that UUID will be considered part of that region.
If we specify the UUID and also a major value for the region, then only the iBeacons with that UUID and major are considered as part of that region.
Once a region has been detected, the details of the iBeacons in range inside that region are obtained by ranging, not by monitoring.
While the app is running in the foreground it can range to determine the signal strength between the iBeacons and the device. This ranging process is not allowed while the app is not running in the foreground. Only monitoring is allowed while the app is in the background/not running.
Region monitoring is capable of waking the app up from running in the background/not running when the app enters or exits the region. These are the only triggers that will wake the app from running the background/not running: entering or exiting a region. Once the app is awoken it can run for ~10 seconds if closed completely and ~2 minutes if it is running in the background.
Core Location Framework
iBeacon APIs are available in the Core Location Framework. The central point of this framework is the CLLocationManager class. An instance of this class is necessary to start/stop the location services, to configure them, and to receive the related events.
The CLLocationManager reference can be found here.