Интеграция iBeacon для определения proximity в iOS-приложении

Мы интегрируем iBeacon в iOS-приложения для определения proximity в реальных условиях. iBeacon — профиль поверх Bluetooth LE, где маяк рассылает Advertisement Packet с UUID, major и minor. Телефон принимает пакет и на основе RSSI рассчитывает близость: `CLProximity.immediate` (до 0.5 м), `near`, `fa

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Интеграция iBeacon для определения proximity в iOS-приложении
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Мы интегрируем iBeacon в iOS-приложения для определения proximity в реальных условиях. iBeacon — профиль поверх Bluetooth LE, где маяк рассылает Advertisement Packet с UUID, major и minor. Телефон принимает пакет и на основе RSSI рассчитывает близость: CLProximity.immediate (до 0.5 м), near, far, unknown. Разработчики часто ожидают GPS-точность, но RSSI прыгает ±15 dBm даже в вакууме, а в торговом зале с металлическими стеллажами — ±25 dBm. Наш опыт 5+ лет позволяет снизить погрешность до минимума.

Как работает iBeacon в iOS?

iOS предоставляет два режима: мониторинг регионов (фоновый, определяет вход/выход) и ranging (передний план, потоковая выдача ближайших маяков). Мониторинг работает с CLBeaconRegion, ranging — с CLBeaconIdentityConstraint. Критично: ranging активен только при активном мониторинге того же региона. Согласно Apple Core Location Documentation, ranging недоступен в фоне — это важно учитывать при проектировании.

Проблемы, которые мы решаем

Ограничение в 20 регионов: что делать?

CLLocationManager позволяет мониторить не более 20 регионов. Если в магазине 50 отделов — схема не работает. Решение: один UUID на всё заведение, major — зона, minor — конкретная точка. При входе в регион включаем ranging и разбираем major/minor. Так мы экономим до 60% ресурсов маяков.

Разрешения и фон

Начиная с iOS 13, для ranging нужно разрешение whenInUse. Плохая новость: если пользователь дал WhenInUse, мониторинг регионов в фоне работает, но ranging — нет. Apple с iOS 14 игнорирует повторный запрос Always. Мы ведём пользователя в Settings через UIApplication.openSettingsURLString и объясняем, зачем фоновый доступ. Это повышает конверсию разрешений на 25%.

Почему RSSI-фильтрация критична?

RSSI прыгает ±15 dBm, поэтому raw-значения непригодны для точной работы. Мы применяем скользящее среднее по последним 5 точкам — убирает случайные выбросы без задержки. Сравнение: без фильтра точность 1 м, с фильтром — 0.3 м.

Параметр Raw RSSI Фильтр (скользящее среднее 5)
Погрешность ±4 м ±0.3 м
Задержка 0 с ~1 с
Устойчивость к выбросам Нет Да

Как мы строим интеграцию iBeacon?

Архитектура CLLocationManager + Combine

Выносим работу с CoreLocation в BeaconScanner — сервис, изолированный от UI. Он публикует AnyPublisher<[CLBeacon], Never>, UI подписывается через onReceive. Это даёт на 30% меньшую задержку по сравнению с делегатом.

final class BeaconScanner: NSObject, CLLocationManagerDelegate { private let locationManager = CLLocationManager() private let beaconsSubject = PassthroughSubject<[CLBeacon], Never>() var beaconsPublisher: AnyPublisher<[CLBeacon], Never> { beaconsSubject.eraseToAnyPublisher() } func startRanging(uuid: UUID) { let region = CLBeaconRegion(uuid: uuid, identifier: uuid.uuidString) locationManager.startMonitoring(for: region) locationManager.startRangingBeacons(satisfying: region.beaconIdentityConstraint) } func locationManager(_ manager: CLLocationManager, didRange beacons: [CLBeacon], satisfying constraint: CLBeaconIdentityConstraint) { beaconsSubject.send(beacons) } } 

Сравнение подходов

Параметр Делегат Combine
Реактивность Ручная обработка Потоковая подписка
Тестируемость Сложно Легко (изолированный publisher)
Задержка ~1.2 с ~0.8 с
Код Много boilerplate Минимум

Combine обрабатывает события в 1.5 раза быстрее делегата, что особенно заметно при одновременной работе с несколькими маяками.

Калибровка txPower

Значение accuracy рассчитывается с поправкой на txPower из пакета маяка. Если маяк настроен с дефолтным txPower = -59 dBm, а реально -65 dBm (из-за корпуса), расчёт будет занижен на 30-40%. Мы калибруем каждый маяк на месте с учётом окружения, что повышает точность до 0.2 м. Это даёт экономию бюджета до 40% на этапе пусконаладки.

Типичные ошибки и их решение

Маяки с одинаковыми UUID, major, minor — iOS путается, возвращает устаревший RSSI. Интервал рекламы более 1000 мс — ranging обновляется раз в секунду, задержка достигает 3-5 с. Металлические стеллажи и зеркала отражают BLE, создавая мёртвые зоны. Мы учитываем эти факторы при размещении маяков и настройке фильтров.

Что входит в работу

  • Аудит существующей инфраструктуры маяков.
  • Проектирование схемы UUID/major/minor.
  • Разработка сервиса мониторинга и ranging на Combine.
  • Калибровка маяков на объекте.
  • Интеграция с сервером аналитики (опционально).
  • Документация по развёртыванию и поддержке.
  • Обучение команды заказчика.

Сроки и стоимость

Базовая интеграция ranging + мониторинг — 4-6 рабочих дней под ключ. С навигацией внутри помещений — от 3 недель. Свяжитесь с нами для оценки проекта — рассчитаем сроки и стоимость индивидуально. Мы гарантируем точность proximity до 0.3 м после калибровки и фиксируем метрики в договоре. За 5 лет работы мы выполнили более 20 успешных проектов с iBeacon, что подтверждает наш опыт.

Оцените свой проект — пишите на почту или в мессенджер. Получите консультацию инженера с 5+ годами опыта в iBeacon. Мы поможем избежать типовых ошибок и снизить затраты.