Реалізація відстеження геолокації в реальному часі

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація відстеження геолокації в реальному часі
Середній
~2-3 дні
Часті запитання

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація відслідження геолокації в реальному часі

Показати точку користувача на карті — п'ять строк коду. Передавати її на сервер кожні 5 секунд з мінімальним розрядом батареї, поки додаток у фоні, коректно обробляти втрату сигналу і переподключення — це зовсім інша історія.

Де звичайно виникають проблеми

Найчастіша помилка — не розділяти foreground і background режим відслідження. У foreground можна запускати CLLocationManager з desiredAccuracy: .bestForNavigation і distanceFilter: 5 — користувач активно дивиться на карту, батарея не в пріоритеті. В background той же режим убиває заряд за дві години і вызивает скарги.

На Android проблема гостріша: з версії 8.0 система агресивно убиває фонові процеси. LocationManager.requestLocationUpdates() з Service без startForeground() перестає отримувати обновлення через кілька хвилин на більшості прошивок. MIUI і One UI з налаштуванням «Оптимізація батареї» роблять це ще швидше — незалежно від налаштувань розробника.

Стек і архітектура

iOS

Для foreground — CLLocationManager з CLLocationAccuracy.best, callback в didUpdateLocations. Для background — allowsBackgroundLocationUpdates = true + capability «Background Modes → Location updates» в entitlements. Без цього флага фонові обновлення просто не приходять, і ні одна помилка в консоль не виводиться.

Координати буферизуємо локально (массив у пам'яті або Core Data) і відправляємо пачками через URLSession.shared.uploadTask кожні N секунд або при накопленні K точок. Одиночні HTTP-запити на кожне обновлення — антипаттерн: при поганому інтернеті черга зростає швидше, ніж розгребується.

Для економії батареї переключаємо режим залежно від контексту:

  • Додаток активний: desiredAccuracy = kCLLocationAccuracyBest, distanceFilter = 10
  • Екран вимкнено: desiredAccuracy = kCLLocationAccuracyHundredMeters, distanceFilter = 50
  • Режим «довгий трекинг»: Significant Location Changes API замість постійного моніторингу

Android

FusedLocationProviderClient з play-services-location — єдиний правильний вибір для більшості проектів. Платформенний LocationManager дає менше контролю над слиянням джерел.

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 5_000L)
    .setMinUpdateDistanceMeters(10f)
    .setWaitForAccurateLocation(false)
    .build()

fusedLocationClient.requestLocationUpdates(
    request,
    locationCallback,
    Looper.getMainLooper()
)

Фоновий трекинг — тільки через Foreground Service з повідомленням. Повідомлення не можна приховати за вимогами Android 9+. Сервіс регіструємо через startForeground() з FOREGROUND_SERVICE_TYPE_LOCATION (Android 10+).

При втраті з'єднання — Room як локальний буфер. WorkManager з Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED) відправляє накопичні точки при відновленні зв'язку.

Flutter

geolocator пакет для отримання позицій, background_locator_2 або flutter_background_geolocation (платний, але надійний) для фонового режиму. Координати через Isolate або FlutterEngine-background service передаємо в Dart-шар, зберігаємо в Isar або sqflite, синхронізуємо через Dio з retry-логікою.

Передача на сервер у реальному часі

Якщо потрібно показувати позицію іншим користувачам у реальному часі — HTTP-поллинг не підходить. WebSocket (socket.io або нативний URLSessionWebSocketTask / OkHttp WebSocket) або MQTT (легше по трафіку, краще для нестабільного з'єднання). Для Flutter — mqtt_client пакет.

Топік MQTT вида tracking/{userId}/location, QoS 1 для гарантії доставки без підтвердження прочитання. Сервер (Node.js + mosquitto broker або AWS IoT Core) рассилає обновлення підписникам.

Процес роботи

Проектування: режими трекинга, інтервали, буферизація, протокол передачі. Реалізація iOS та/або Android з коректним управлінням жизненным циклом сервісу. Реалізація серверної частини прийому координат (якщо потрібно). Тестування на реальних поїздках, перевірка поведінки при переключенні мережа/без мережі.

Строк: три-вісім днів залежно від платформ, наявності серверної частини і вимог до real-time відображення.