iBeacon — это проприетарный протокол Apple для Bluetooth Low Energy маячков, позволяющий iOS-устройствам определять своё местоположение внутри помещений с точностью до сантиметров. В основе протокола лежит широковещательная рассылка BLE-пакетов с уникальным идентификатором, содержащим UUID, Major и Minor значения. По данным Apple iBeacon Design Guidelines (2025), технология используется в навигации по торговым центрам, музеям, аэропортам и на стадионах, поддерживая пассивное обнаружение без активного сопряжения устройств.
Главное
iBeacon — это технология позиционирования внутри помещений, разработанная Apple и представленная на WWDC 2013. В отличие от GPS, который не работает внутри зданий, iBeacon использует Bluetooth Low Energy маячки — небольшие устройства с батарейным питанием, которые передают фиксированные идентификационные пакеты. Устройства на iOS и Android принимают эти пакеты и вычисляют приблизительное расстояние до маячка на основе уровня сигнала (RSSI).
Протокол iBeacon стал первым массовым стандартом BLE-маячков, запущенным Apple в 2013 году в iOS 7. Первоначально технология использовалась в розничной торговле: магазины Apple Store внедрили iBeacon для информирования покупателей о скидках при входе в определённые зоны. К 2025 году инфраструктура iBeacon насчитывает миллионы установленных маячков по всему миру, хотя появились альтернативные протоколы — Eddystone от Google и AltBeacon с открытым исходным кодом.
iBeacon применяется в пяти основных сценариях: навигация внутри помещений (торговые центры, аэропорты, музеи), контекстные уведомления (скидки при входе в магазин), автоматизация рабочих процессов (отметка о присутствии), логистика и складской учёт, а также туристические гиды с автоматическим воспроизведением контента при приближении к объекту. По данным ABI Research (2025), рынок BLE-маячков оценивается в 3,2 млрд устройств в эксплуатации.
Пакет iBeacon — это Advertising PDU (Protocol Data Unit), передаваемый в BLE-рекламном канале на частотах 2402, 2426 и 2480 МГц. Формат пакета жёстко фиксирован и состоит из четырёх полей: префикса Apple iBeacon (0x4C000215), 16-байтового UUID, 2-байтового Major и 2-байтового Minor значения, а также 1-байтового TX Power для калибровки расстояния. Общий размер данных — 30 байт, что помещается в один BLE Advertising PDU.
| Поле | Размер | Описание |
|---|---|---|
| Префикс Apple | 9 байт | Company ID (0x004C) + iBeacon type (0x0215) |
| UUID | 16 байт | Уникальный идентификатор организации или приложения |
| Major | 2 байта | Идентификатор зоны (0-65535), например номер магазина |
| Minor | 2 байта | Идентификатор точки (0-65535), например номер полки |
| TX Power | 1 байт | Калибровочная мощность сигнала на расстоянии 1 метр (dBm) |
Идентификаторы iBeacon образуют трёхуровневую иерархию. UUID назначается организации (например, сеть магазинов), Major — конкретному магазину или этажу, Minor — конкретной точке внутри зоны (кассовая зона, отдел товара). Такая иерархия позволяет приложению гибко реагировать на разные уровни контекста: при входе в магазин (UUID + Major) приложение может загрузить карту этажа, а при подходе к конкретному отделу (Minor) показать информацию о товаре.
Поле TX Power — это опорное значение уровня сигнала (RSSI) на расстоянии 1 метр от маячка. При получении пакета устройство фиксирует фактический RSSI и вычисляет расстояние по формуле: distance = 10^((TX_Power - RSSI) / (10 * n)), где n — коэффициент затухания среды (обычно 2-4). Правильная калибровка TX Power критически важна для точности позиционирования: ошибка в 1 dBm даёт погрешность до 30% на расстоянии 5 метров.
iOS определяет три зоны приближения на основе вычисленного расстояния до маячка: Immediate (менее 0,5 метра), Near (от 0,5 до 3 метров) и Far (от 3 до 30-50 метров в зависимости от условий). Точное расстояние не сообщается — только категория. Это сделано намеренно: RSSI подвержен помехам, отражениям сигнала и влиянию человеческого тела, поэтому категории дают более стабильное определение местоположения.
Immediate — зона прямого контакта, когда устройство находится в нескольких сантиметрах от маячка. Используется для сценариев, требующих максимальной точности: оплата через терминал, открытие цифрового замка, верификация на пропускном пункте. В зоне Immediate RSSI обычно составляет от -30 до -60 dBm.
Зона Near — основная рабочая зона iBeacon, охватывающая расстояние от 0,5 до 3 метров. Используется для навигации внутри помещений — например, при подходе к витрине с товаром приложение показывает подробную информацию. В зоне Near RSSI колеблется от -60 до -80 dBm при калибровке TX Power = -59 dBm.
Far — максимальная зона обнаружения сигнала маячка. Используется для мониторинга входа в регион (например, вход в торговый центр). На дистанции Far RSSI обычно слабее -80 dBm, и точность определения расстояния значительно падает. Для мониторинга входа используются системные API region monitoring, а не определение точной зоны.
Регион iBeacon — это виртуальная область, определяемая по UUID (и опционально Major + Minor). iOS позволяет мониторить до 20 регионов одновременно с помощью CLLocationManager. При входе в регион система пробуждает приложение даже в фоновом или убитом состоянии и отправляет уведомление через делегат locationManager:didEnterRegion. При выходе из региона вызывается locationManager:didExitRegion.
import CoreLocation
let locationManager = CLLocationManager()
let region = CLBeaconRegion(
uuid: UUID(uuidString: "E2C56DB5-DFFB-48D2-B060-D0F5A71096E0")!,
identifier: "myBeaconRegion"
)
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.startMonitoring(for: region)
Для определения зоны (Immediate, Near, Far) используется ranging — сканирование маячков в реальном времени. В отличие от мониторинга, ranging работает только в активном режиме приложения и требует разрешения на доступ к местоположению. Метод locationManager:didRangeBeacons:inRegion возвращает массив CLBeacon с полями proximity (CLProximity.immediate, .near, .far, .unknown), accuracy (калиброванное расстояние в метрах) и rssi.
func locationManager(
_ manager: CLLocationManager,
didRangeBeacons beacons: [CLBeacon],
in region: CLBeaconRegion
) {
for beacon in beacons {
switch beacon.proximity {
case .immediate:
print("Immediate proximity")
case .near:
print("Near proximity")
case .far:
print("Far proximity")
default:
print("Unknown proximity")
}
}
}
Android не имеет встроенной поддержки iBeacon, так как протокол является проприетарным решением Apple. Однако с помощью сторонних библиотек, таких как AltBeacon от Radius Networks (ныне часть организации Open Beacon), разработчики могут интегрировать iBeacon в Android-приложения. Библиотека AltBeacon реализует сканирование BLE-пакетов, парсинг iBeacon-формата и эмуляцию ranging и мониторинга регионов, аналогичных iOS API.
val beaconManager = BeaconManager.getInstanceForApplication(context)
beaconManager.beaconParsers.add(
BeaconParser().setBeaconLayout(
"m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"
)
)
beaconManager.backgroundBetweenScanPeriod = 5000
beaconManager.foregroundScanPeriod = 1100
beaconManager.bind(this)
Формат парсинга iBeacon в библиотеке AltBeacon определяется строкой layout: "m:2-3=0215" — проверка двух байтов iBeacon-маркера, "i:4-19" — 16-байтовый UUID, "i:20-21" — Major, "i:22-23" — Minor, "p:24-24" — TX Power. Такой же формат поддерживается для Eddystone и других протоколов, что делает AltBeacon универсальной библиотекой для работы с BLE-маячками на Android.
На Android работа с iBeacon имеет три ключевых ограничения: фоновое сканирование ограничено производителями (Xiaomi, Huawei, Samsung часто убивают фоновые процессы), точность RSSI ниже, чем на iOS, из-за различий в BLE-стеках, и для сканирования требуется разрешение ACCESS_FINE_LOCATION начиная с Android 6.0 и BLUETOOTH_SCAN с Android 12.
Eddystone — открытый протокол BLE-маячков от Google, представленный в 2015 году. В отличие от iBeacon, Eddystone поддерживает четыре типа пакетов: Eddystone-UID (фиксированный идентификатор), Eddystone-URL (передача URL для Physical Web), Eddystone-TLM (телеметрия маячка — заряд батареи, температура) и Eddystone-EID (шифрованный идентификатор для защиты от клонирования). Несмотря на то что Google прекратила развитие Physical Web в 2022 году, протокол Eddystone продолжает использоваться в корпоративных решениях.
| Параметр | iBeacon | Eddystone |
|---|---|---|
| Владелец | Apple | Google (открытый) |
| Типы пакетов | 1 (UID) | 4 (UID, URL, TLM, EID) |
| Данные | UUID+Major+Minor | ID/URL + телеметрия |
| Нативная поддержка iOS | Да (CoreLocation) | Нет (через CoreBluetooth) |
| Физический Web | Нет | Да (Eddystone-URL) |
| Безопасность | Нет шифрования | EID с ротацией ключей |
Выбор между iBeacon и Eddystone зависит от целевой платформы и сценария использования. iBeacon предпочтителен для iOS-приложений благодаря нативной интеграции с CoreLocation и мониторингу регионов в фоновом режиме. Eddystone лучше подходит для Android-ориентированных проектов и сценариев Physical Web, где маячок передаёт URL без установки приложения. Для кроссплатформенных проектов часто используют AltBeacon, поддерживающий оба протокола.
При внедрении iBeacon разработчики сталкиваются с рядом ограничений, которые необходимо учитывать на этапе проектирования архитектуры. Некорректный учёт этих факторов приводит к нестабильной работе навигации, ложным срабатываниям и разряду батареи маячков быстрее расчётного срока.
Уровень сигнала RSSI подвержен значительным колебаниям из-за отражений от стен, металлических конструкций, присутствия людей и других wireless-устройств в диапазоне 2.4 ГГц. В помещении разброс RSSI для одного маячка может достигать 10-15 dBm за минуту, что делает вычисление расстояния неточным без использования фильтров (сглаживание скользящим средним, Калмановская фильтрация).
iOS поддерживает мониторинг не более 20 регионов одновременно на одно приложение. Для проектов, требующих покрытия большой территории (аэропорт, стадион), этого недостаточно. Решение — использовать динамическое переключение регионов: при входе в один регион активируются соседние, а удалённые деактивируются.
Задержка между входом в регион и получением уведомления может составлять от 1 до 30 секунд в зависимости от условий. iOS сканирует маячки периодически для экономии батареи, поэтому мгновенной реакции ожидать не следует. Для критичных по времени сценариев (открытие двери при подходе) рекомендуется использовать Immediate ranging, но оно работает только в активном режиме приложения.
Часто задаваемые вопросы
iBeacon — это протокол Apple для Bluetooth Low Energy маячков, позволяющий iOS и Android устройствам определять своё местоположение внутри помещений с точностью до сантиметров на основе анализа уровня сигнала (RSSI) передаваемых BLE-пакетов.
Bluetooth — это общий протокол беспроводной связи для передачи данных между устройствами, требующий сопряжения. iBeacon — специализированный протокол поверх BLE, предназначенный исключительно для широковещательной передачи идентификаторов без установления соединения. iBeacon маячки не передают данные — они только сообщают своё присутствие.
iBeacon работает в режиме Advertising — маячок постоянно передаёт широковещательные BLE-пакеты с ID-информацией. Устройство принимает пакет, но не подключается к маячку. Это позволяет экономить батарею маячка (до 2-3 лет работы от одной CR2032) и обнаруживать маячки пассивно без активного сканирования.
Нет, iBeacon не предназначен для поиска устройств. Маячки iBeacon — это стационарные передатчики, а iPhone выступает в роли приёмника. iPhone не передаёт iBeacon-сигналы (за исключением функции Find My, использующей другой протокол на базе BLE). Для поиска телефона используются другие технологии (Find My network, UWB).
Радиус действия iBeacon зависит от настроек маячка и условий среды. Типичная дальность: Immediate — до 0,5 м, Near — до 3 м, Far — до 30-50 м. При использовании маячков с усилителем сигнала и в открытых пространствах дальность может достигать 70 м, но точность определения расстояния на такой дистанции минимальна.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также