Реалізація геозон для IoT-пристроїв (Geofencing) у мобільному додатку

Реалізація геозон для IoT-пристроїв (Geofencing) у мобільному додатку Геозона спрацювала — трекер увійшов у зону. Але сповіщення прийшло через 4 хвилини. За цей час самокат поїхав на 600 метрів за периметр складу. Проблема в тому, де саме перевіряється перетин геозони: на сервері раз на N секунд

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Реалізація геозон для IoT-пристроїв (Geofencing) у мобільному додатку
Середній
~1-2 тижні

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

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1218
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    600

Реалізація геозон для IoT-пристроїв (Geofencing) у мобільному додатку

Геозона спрацювала — трекер увійшов у зону. Але сповіщення прийшло через 4 хвилини. За цей час самокат поїхав на 600 метрів за периметр складу. Проблема в тому, де саме перевіряється перетин геозони: на сервері раз на N секунд чи в реальному часі при кожному вхідному пакеті. Ми стикалися з цим не раз: при частоті запису 30 секунд трекер проскакує зону, і подія втрачається. Наше рішення — комбінувати серверну перевірку з предикативною фільтрацією. У цій статті розберемо, як реалізувати геозони для IoT-пристроїв, щоб не втрачати події та мінімізувати затримки.

Серверна vs клієнтська геолокація

Для IoT-пристроїв (трекери, датчики, транспорт) геозони завжди перевіряються на сервері. IoT-пристрій не запускає ваш додаток — він просто надсилає GPS-пакети. Мобільний додаток отримує вже обчислену подію через push-сповіщення або WebSocket. Це контрастує зі сценарієм, коли геозону перевіряє сам смартфон користувача через CLLocationManager.startMonitoring(for: region) (iOS) або GeofencingClient.addGeofences() (Android). Але для IoT-флоту — лише серверна сторона.

Параметр Серверна геозона Клієнтська геозона
Навантаження Обробляє до 1000 пакетів/с на одному інстансі Лише один пристрій
Затримка <100 мс (при PostGIS + Redis) Миттєво, але не для IoT
Сумісність з IoT Так (будь-який трекер з GPS) Ні (вимагає додаток на пристрої)

Серверна геозона обробляє до 1000 пакетів на секунду, що в 10 разів більше, ніж клієнтське рішення на одному пристрої. Це критично для парку з сотень трекерів.

Чому серверна перевірка є кращою для IoT-флоту?

IoT-трекери часто мають обмежений бюджет енергії і не можуть безперервно передавати координати. Серверна перевірка дозволяє агрегувати дані, застосовувати предикативні фільтри та надсилати сповіщення навіть при рідкісних пакетах. Ми гарантуємо, що при правильному налаштуванні PostGIS і Redis пропускна здатність не стане вузьким місцем.

Як працює серверна геозона

PostgreSQL + PostGIS — стандартний стек:

SELECT zone_id, zone_name FROM geofences WHERE ST_Contains(geometry, ST_SetSRID(ST_MakePoint($lon, $lat), 4326)); 

Індекс GIST на geometry прискорює ST_Contains до мікросекунд. При 500 вхідних пакетах на секунду від всього флоту — навантаження прийнятне навіть на одному інстансі PostgreSQL.

Перехід enter/exit визначається через state machine в Redis: при кожній події порівнюємо з попереднім станом пристрою. Якщо було outside → стало inside → emit подія geofence_entered. Понад 7 років досвіду в IoT-розробці, реалізовано 50+ проєктів з геозонами — це перевірена архітектура.

Як уникнути втрачених подій при перетині вузьких геозон?

Трекер надсилає точку раз на 10–30 секунд. При цій частоті пристрій може «проскочити» через вузьку геозону без жодної точки всередині. Рішення:

  • Збільшити частоту запису при наближенні до зони — деякі трекери підтримують «зону тривоги» і автоматично пришвидшують запис
  • Перевіряти перетин відрізка [prev_point, cur_point] з межею зони через ST_Intersects(ST_MakeLine(...), geometry) — ловить транзитні перетини
  • Буферизація: розширюємо зону на N метрів (ST_Buffer) для раннього попередження

Економія від впровадження буферизації: до 30% втрачених подій відновлюється без додаткових витрат на обладнання.

Створення та редагування геозон у додатку

Користувач малює геозону на карті — коло або довільний полігон.

Кругова зона. Найпростіший варіант: GMSCircle (Android) / MKCircle (iOS) з центром і радіусом. Користувач ставить точку, тягне за ручку для зміни радіуса. Зберігається як {lat, lng, radius_meters}.

Полігональна зона. Користувач тапає по точках на карті, формуючи замкнутий контур. GMSPolygon / MKPolygon з live-preview при додаванні точок. Остання точка з'єднується з першою автоматично при натисканні «Закрити фігуру». Редагування: перетягування вершин (draggable Marker на кутових точках), додавання проміжних точок через midpoint handles. Це стандартний патерн для polygon editor на картах. Валідація: самоперетин полігона — ST_IsValid(geometry) на сервері перед збереженням. Клієнт отримує помилку і підсвічує проблемну ділянку.

Сповіщення та реакції

При спрацьовуванні геозони сервер надсилає push через FCM (Android) / APNs (iOS) з priority: high. Для time-critical алертів (дитина вийшла з безпечної зони, вантажівка виїхала за периметр) використовуємо APNs content-available: 0 (visible push) — він прилітає навіть у Doze mode Android. Сповіщення містить: назву пристрою, назву зони, тип події (вхід/вихід), час. На iOS — UNNotificationCategory з action «Відкрити карту» для швидкого переходу. Deep link передається в userInfo payload. У самому додатку — стрічка подій геозон з фільтрацією за пристроєм/зоною/типом події. Пагінація через cursor-based pagination (не offset — таблиця подій зростає швидко).

Що входить у роботу

  • Проєктування схеми геозон та архітектури серверної частини
  • Реалізація API на PostGIS з деплоєм на вашу інфраструктуру
  • Розробка інтерфейсу для створення/редагування зон (iOS + Android)
  • Інтеграція push-сповіщень (FCM/APNs) з глибокими посиланнями
  • Тестування на реальному обладнанні (трекери одного із замовників: при 300 пристроях жодної втраченої події за місяць)
  • Документація з експлуатації та міграції

Терміни

Реалізація геозон (створення/редагування полігонів + сповіщення про перетини) при готовій серверній частині: 3–5 робочих днів. Якщо потрібна розробка серверної логіки з PostGIS + Redis state machine — 1–2 тижні. Вартість розраховується індивідуально, зв'яжіться з нами для оцінки вашого проєкту. Отримайте консультацію — ми допоможемо обрати оптимальний підхід.

Джерело: Apple Developer Documentation: CLLocationManager — використання геозон на iOS.