Карты в мобильном приложении: Google Maps SDK или Yandex MapKit
Практика3 минРедакция Innovialabs
Коротко
Для приложений, работающих в Узбекистане и СНГ, Yandex MapKit часто даёт более подробные адреса и объекты, а Google Maps SDK удобнее для международного продукта и экосистемы Google. Выбор делайте после проверки на реальных адресах ваших пользователей и с учётом цены геокодинга и маршрутов.
Короткий ответ
Если пользователи в основном в Узбекистане, Казахстане или других странах СНГ, а продукт завязан на адреса (доставка, такси, сервисы на дом), начните с проверки Yandex MapKit: в регионе у Яндекса обычно подробнее адресный план и база организаций. Если продукт международный или вы уже используете Firebase и сервисы Google, удобнее Google Maps SDK.
Но решает не репутация, а данные: возьмите 30–50 реальных адресов ваших клиентов и проверьте, как каждый сервис их находит.
Покрытие в Узбекистане и СНГ
Что проверять в своём городе:
- Адреса до дома: находится ли дом по улице и номеру, или только улица.
- Ориентиры: в Ташкенте и регионах люди часто описывают адрес через махаллю или ориентир. Посмотрите, как поиск справляется с такими запросами.
- Организации (POI): актуальность магазинов, кафе, офисов.
- Языки: как отображаются и ищутся названия на узбекском латиницей, кириллицей и на русском.
- Новостройки и пригороды: насколько быстро обновляются данные.
Вне СНГ покрытие Google, как правило, шире и ровнее, поэтому для приложения с аудиторией в разных регионах мира часто берут Google или комбинируют провайдеров.
Тарифы и лимиты
Точные цены меняются, поэтому сравнивайте по структуре и сверяйтесь с актуальными страницами тарифов.
| Google Maps Platform | Yandex MapKit | |
|---|---|---|
| Показ карты в мобильном SDK | Нет отдельной платы за загрузки карты в нативных SDK | Бесплатное использование с ограничениями и условиями, далее коммерческая лицензия |
| Геокодинг, поиск, маршруты | Отдельные API с оплатой за запрос и бесплатным месячным лимитом | Входят в полную версию SDK, условия зависят от лицензии |
| Ключ и ограничения | API-ключ с ограничением по пакету и bundle ID | API-ключ, лимиты по условиям использования |
Главные факторы стоимости: сколько раз вы вызываете геокодинг и маршруты, а не сколько раз показываете карту. Кешируйте результаты геокодинга, не запрашивайте адрес на каждое движение карты и делайте запросы с задержкой (debounce) при вводе текста.
Геокодинг и маршруты
- Google: Geocoding API, Places API для автодополнения адресов и Routes API для маршрутов и времени в пути. Это веб-сервисы, их часто вызывают с бэкенда, чтобы не держать ключ в приложении.
- Yandex MapKit: есть облегчённая версия SDK (только карта) и полная — с поиском, геокодингом, маршрутизацией для авто, пешеходов и общественного транспорта и офлайн-картами. Полная версия заметно увеличивает размер приложения.
Для Flutter у Google есть официальный плагин google_maps_flutter, для MapKit используются плагины от сообщества или собственная обёртка над нативным SDK — заложите на это время.
Фоновая геолокация: правила сторов
Фоновое отслеживание — самая проверяемая часть.
Android:
- разрешение
ACCESS_BACKGROUND_LOCATIONзапрашивается отдельно, после разрешения на точную или приблизительную геолокацию; - в Google Play Console нужно задекларировать, зачем приложению фоновая геолокация, и показать это в видео;
- для длительного отслеживания нужен foreground service с типом
locationи видимым уведомлением.
iOS:
- в
Info.plistнужны понятные текстыNSLocationWhenInUseUsageDescriptionиNSLocationAlwaysAndWhenInUseUsageDescription; - режим фона
locationвUIBackgroundModes— только если без него функция не работает; - сначала просите «При использовании», а «Всегда» — когда пользователь включил функцию, которой это нужно.
Если фоновая геолокация не ключевая функция, стор может отклонить приложение. Часто достаточно геолокации только во время использования.
Расход батареи
- Выбирайте точность под задачу: для города достаточно приблизительной геолокации, GPS нужен для навигации и трекинга курьера.
- Увеличивайте интервал и минимальное расстояние между обновлениями.
- Используйте Fused Location Provider на Android и significant location changes или геозоны на iOS вместо постоянного GPS.
- Останавливайте обновления, когда экран с картой закрыт.
- Отправляйте координаты на сервер пачками, а не каждую точку отдельным запросом.