Карти та геолокація у мобільних застосунках

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

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

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

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

Послуги, які ми пропонуємо
Показано 30 з 78Усі 1735 послуг
Інтеграція Apple MapKit в iOS-додаток
Середній
від 1 дня до 3 днів
Інтеграція 2ГІС SDK в мобільний додаток
Середній
від 1 дня до 3 днів
Інтеграція Mapbox SDK в мобільний додаток
Середній
від 1 дня до 3 днів
Розробка мобільного додатку для таксі
Складний
від 2 тижнів до 3 місяців
Розробка мобільного додатку для доставки їжі
Складний
від 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

Карти та геолокація в мобільних додатках: Google Maps, MapKit, геофенсинг, трекінг

Геолокація в мобільних додатках—це не просто «додати карту». Це робота з дозволами, точністю, енергоспоживанням та поведінкою ОС, яка принципово різниться на iOS та Android. Трекер доставки, програма для бігу, карта магазинів—кожен випадок вимагає різного підходу до того, як та коли запитувати координати.

Дозволи: один з найчастіших джерел поганих відгуків

На iOS дозвіл на геолокацію—найчутливіший після мікрофона та камери. З iOS 14 система показує індикатор у рядку стану при використанні геолокації у фоні—користувачі це помічають. NSLocationWhenInUseUsageDescription та NSLocationAlwaysAndWhenInUseUsageDescription повинні містити чесне пояснення, інакше додаток буде відхилений під час перевірки. Запитання always дозволу під час запуску—гарантований спосіб втратити більшість користувачів. Правильна схема: спочатку whenInUse, потім always тільки коли користувач дійшов до функції, яка його потребує, з поясненням навіщо.

На Android з API 29+ ACCESS_BACKGROUND_LOCATION — окремий дозвіл, який не можна запитати разом із foreground. Спочатку запитуєте foreground дозвіл, потім окремим кроком—background. Google Play вимагає обґрунтування для background location у анкеті при публікації. Якщо обґрунтування слабке—додаток можуть відхилити або потребувати видалення background location.

Точність та енергоспоживання: як не розрядити акумулятор

Постійний GPS на максимальній точності споживає 100–150 мВт—акумулятор розряджається за 4–6 годин. Для більшості завдань це надлишково.

На Android FusedLocationProviderClient (Google Play Services) об'єднує GPS, Wi-Fi та мобільну мережу, вибираючи оптимальне джерело. LocationRequest.Builder з пріоритетами:

  • PRIORITY_HIGH_ACCURACY—GPS включений, для навігації
  • PRIORITY_BALANCED_POWER_ACCURACY—точність ~100 метрів, Wi-Fi + мобільна
  • PRIORITY_LOW_POWER—точність ~10 км, тільки мобільна
  • PRIORITY_PASSIVE—координати від інших додатків, без активного запиту

Для трекера активного бігу—HIGH_ACCURACY з інтервалом 2–5 секунд. Для геофенсинг уведомлень у фоні—PASSIVE або LOW_POWER, система сама пробудить за подією.

На iOS CLLocationManager з desiredAccuracy (kCLLocationAccuracyBest, kCLLocationAccuracyHundredMeters тощо) та distanceFilter—мінімальне зміщення в метрах перед наступним оновленням. Для трекінгу маршруту з економією батареї: desiredAccuracy = kCLLocationAccuracyNearestTenMeters, distanceFilter = 10—отримуємо оновлення тільки при реальному русі.

Significant Location Changes—режим iOS, який працює на рівні ОС без активного GPS: оновлення при зміні мобільної вежі, витрата батареї мінімальна. Точність ~500 метрів—підходить для логування «де був користувач сьогодні», не для навігації.

Google Maps SDK vs MapKit vs Mapbox vs OpenStreetMap

SDK Платформа Офлайн-карти Кастомний стиль Без Google Services
Google Maps SDK iOS/Android Ні (тільки Maps API) Так (Cloud-based) Ні
MapKit iOS Ні Обмежено Так
Mapbox Maps iOS/Android Так Повністю Так
HERE Maps iOS/Android Так Так Так
OpenStreetMap + MapLibre iOS/Android/Flutter Так Повністю Так

Google Maps SDK—вибір за замовчуванням для більшості проектів: звичний UI, хорошої документація, Directions API, Places Autocomplete. Обмеження—залежність від Google Play Services (проблема для Huawei) та цінова політика при високих обсягах запитів.

Mapbox бажаний, коли потрібен кастомний стиль карти (корпоративний брендинг, темна тема), офлайн-карти для роботи без мережі, або доступність на пристроях без GMS. MapboxNavigation SDK—повнофункціональна навігація з голосовими інструкціями, перепрокладкою маршруту, lane guidance.

Для Flutter—google_maps_flutter (офіційний), flutter_map (OpenStreetMap + MapLibre, повністю open-source), mapbox_maps_flutter (офіційний Mapbox SDK з 2023 року).

Геофенсинг: сповіщення за зоною

Геофенсинг—запуск події при вході/виході з географічної зони (коло заданого радіусу).

На AndroidGeofencingClient із Google Location Services. Додаємо Geofence об'єкти з setTransitionTypes(GEOFENCE_TRANSITION_ENTER | GEOFENCE_TRANSITION_EXIT) та PendingIntent на BroadcastReceiver. Обмеження: максимум 100 активних геофенсів на додаток, мінімальний радіус ~150 метрів (насправді через точність), спрацювання з затримкою до кількох хвилин для економії батареї.

На iOSCLCircularRegion + CLLocationManager.startMonitoring(for:). Ліміт: 20 регіонів на додаток. ОС керує коли перевіряти—розробник не контролює затримку. Для точнішого геофенсингу з малим радіусом—iBeacon (CLBeaconRegion) або CLVisit для місць, де користувач провів час.

Якщо потрібно більше 20 (iOS) або 100 (Android) зон—потрібна серверна логіка: періодично відправляємо координати на сервер, сервер перевіряє попадання в зони та відправляє push. Менш точно за часом, але масштабується на тисячи зон.

Трекінг маршрутів та фонова геолокація

Трекінг маршруту бігу або маршруту кур'єра у фоні—технічно різні завдання.

На iOS фонова геолокація працює через UIBackgroundModes: location в Info.plist. Без цього ключа при переході додатку у фон CLLocationManager отримує кілька хвилин та засинає. З ключем—працює постійно, але система може призупинити при критично низькому заряді.

Для трекера бігу на iOS паттерн: startUpdatingLocation при старті тренування, координати пишемо в Core Data кожні 5 секунд, на паузі—stopUpdatingLocation, але залишаємо startMonitoringSignificantLocationChanges щоб додаток не «заблудився» зовсім.

На Android для трекінгу кур'єра потрібен Foreground Service з FOREGROUND_SERVICE_TYPE_LOCATION (обов'язково з API 29). Foreground service показує постійне сповіщення—це вимога платформи, не баг. Без нього Android Doze вбиває оновлення геолокації. WorkManager для фонових завдань тут не підходить—не гарантує безперервність.

Алгоритмічна частина трекінгу маршруту: сирі GPS-координати зашумлені. Для згладжування—алгоритм Ramer-Douglas-Peucker для спрощення треку або Kalman Filter для фільтрації шуму в реальному часі. Без фільтрації трек виглядає як випадкові зигзаги, а розраховується відстань на 20–30% більше за реальну.

Обсяг та графік робіт

Базова інтеграція карти з маркерами та пошуком адрес—1–2 тижні. Геофенсинг з push-сповіщеннями—2–3 тижні з урахуванням тестування на реальних пристроях (емулятор погано імітує затримки геофенсингу). Повнофункціональний трекінг маршрутів з фоновим режимом, згладжуванням та синхронізацією серверу—4–6 тижнів.