При автодоповненні адрес у мобільних додатках для Росії Google Places часто помиляється на корпусах, будовах та СНТ. Типовий кейс: клієнт логістичної компанії втрачав 3–5% замовлень через некоректну адресу під час оформлення. Після впровадження DaData кількість помилок скоротилася в 4 рази. Ще один приклад: інтернет-магазин знизив повернення через невірну адресу з 12% до 2% за місяць. DaData — стандарт де-факто: база на основі ФІАС та КЛАДР покриває 99% адрес. Ми впроваджуємо DaData в iOS, Android та Flutter — з дебаунсом, кешуванням та контролем квот. Маємо досвід впровадження DaData для логістики, доставки та ритейлу — понад 80 проектів. Це дозволило клієнтам скоротити кількість помилок введення адрес у 3–4 рази та прискорити оформлення замовлень.
Чому DaData краще Google Places для Росії?
Порівняємо за ключовими параметрами:
| Критерій | DaData | Google Places Autocomplete |
|---|---|---|
| База адрес | ФІАС/КЛАДР, включає корпуси, будови, СНТ | OpenStreetMap + Google Maps, часто неповні |
| Геокодування | POST /geolocate з radius_meters | Reverse Geocoding, неточний для РФ |
| Швидкість відповіді | 100–200 мс | 200–400 мс |
| Квота безкоштовно | 10 000 запитів/день | 150 000 запитів/міс (Android) |
| Вартість за 1000 запитів | від $2 (платні тарифи) | від $5 (Places API) |
DaData виграє за точністю для російських адрес у 2–3 рази — менше користувацьких помилок та відмов. Продуктивність DaData в 2 рази вища за Google Places. Додатковий плюс — геокодування з прив'язкою до контуру будівлі, а не до центру вулиці.
Ми спеціалізуємося на інтеграції DaData в мобільні додатки (iOS, Android, Flutter). Використовуємо Swift Combine, Kotlin Retrofit та Flutter Dio. Реалізуємо автодоповнення адрес, геокодування та стандартизацію. Порівняння DaData з Google Places показує перевагу 2-3 рази. Наш досвід впровадження DaData — понад 80 проектів.
Інтеграція покроково:
- Отримайте API-ключ на dadata.ru.
- Налаштуйте HTTP-клієнт з авторизацією.
- Реалізуйте дебаунс запитів (300 мс).
- Створіть UI-компонент автодоповнення.
- Обробіть вибір адреси та збережіть координати. Ці кроки однакові для всіх платформ, з незначними відмінностями в коді.
Що ми інтегруємо
Основний ендпоінт — POST https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address. Тіло запиту — JSON з полем query (введений рядок) та опціональним locations для обмеження за регіоном. Відповідь — масив suggestions, кожен з value, data.geo_lat, data.geo_lon, data.house, data.street, data.city_with_type. Другий ендпоінт — геокодування за координатами: POST .../geolocate/address з lat/lon та radius_meters. Використовуємо як fallback до Google Reverse Geocoding. DaData також дозволяє стандартизувати адреси — привести їх до єдиного формату ФІАС. Це корисно для баз даних та звітності.
Реалізація DaData на iOS, Android та Flutter
iOS
Створюємо DaDataService з URLSession або Alamofire. Авторизація через заголовок Authorization: Token . Ключ зберігаємо в xcconfig — не хардкодимо в коді. Підказки показуємо в UITableView під текстовим полем. Запити дебаунсимо через Combine: searchSubject.debounce(for: .milliseconds(300), scheduler: RunLoop.main). Без дебаунса при швидкому введенні надсилається запит на кожен символ.
Код для iOS (Swift)
struct DaDataSuggestion: Decodable { let value: String let data: DaDataAddress } struct DaDataAddress: Decodable { let geoLat: String? let geoLon: String? let city: String? let street: String? let house: String? enum CodingKeys: String, CodingKey { case geoLat = "geo_lat" case geoLon = "geo_lon" case city, street, house } } Важливо: geo_lat та geo_lon приходять як String, не Double. Конвертуємо через Double(geoLat ?? "") з перевіркою на nil.
Android
Retrofit-інтерфейс з @POST та @Header("Authorization"). Корутина в ViewModel, StateFlow<List<DaDataSuggestion>> для UI. Дебаунс через Flow.debounce(300) в collectLatest. В compose-проекті LazyColumn під TextField з DropdownMenuItem. При виборі підказки прибираємо фокус через LocalFocusManager.current.clearFocus() та ховаємо клавіатуру через LocalSoftwareKeyboardController.
Flutter
Пакета під DaData немає — пишемо свій DaDataRepository з Dio. Підказки віддаємо через StreamController з дебаунсом Timer(Duration(milliseconds: 300)). Для UI — ListView.builder в Overlay або пакет flutter_typeahead з кастомним suggestionsCallback.
Коли потрібна міграція з Google Places?
Якщо поточний додаток вже використовує Google Places Autocomplete, заміна на DaData — це заміна одного HTTP-запиту на інший, але з іншою моделлю даних. Ми адаптуємо існуючий код під відповідь DaData, зберігаючи логіку відображення та вибору адреси. Типовий кейс: клієнт з 50 000 щомісячних запитів платив $250 за Google Places, а з DaData — $100. Термін міграції — 1 день на платформу.
Як контролювати квоти?
Безкоштовний тариф DaData — 10 000 запитів/день. Для комерційних проектів рекомендуємо платний план. Налаштовуємо:
- Мінімальна довжина запиту — 3 символи (не надсилаємо запити на "М")
- Дебаунс 300 мс — виключаємо зайві виклики при швидкому введенні
- Кешування результатів: повторні запити ідентичного рядка не йдуть у мережу
Це знижує кількість запитів до 40% від числа натискань клавіш. Контроль реалізовано на рівні сервісу та UI. Наприклад, для проекту з 100 000 запитів на місяць вартість DaData складе $200.
Порівняння підходів інтеграції за платформами
| Параметр | iOS | Android | Flutter |
|---|---|---|---|
| HTTP-клієнт | URLSession / Alamofire | Retrofit | Dio |
| Дебаунс | Combine .debounce | Flow.debounce | Timer |
| UI | UITableView + делегат | LazyColumn | ListView / flutter_typeahead |
| Серіалізація | Codable | Gson / Moshi | json_serializable |
Обсяг та терміни робіт
До складу робіт входить:
- Клієнтський сервіс для iOS/Android/Flutter з авторизацією та дебаунсом
- UI-компонент автодоповнення (кастомний або адаптований)
- Обробка вибору адреси та маппінг координат
- Контроль квот: мінімальна довжина запиту — 3 символи, немає запитів на порожній рядок
- Документація з інтеграції та код з коментарями — Доступ до репозиторію з кодом — Навчання розробників замовника (1-2 години) — Технічна підтримка на 14 днів після здачі
Інтеграція на одну платформу займає 1–2 дні. Вартість розраховується індивідуально — залежить від складності UI та додаткових вимог (наприклад, геокодування або стандартизація ПІБ). Економія бюджету на геодані після міграції може досягати 60%.
Ми гарантуємо якість інтеграції та надаємо технічну підтримку після впровадження.
Зв'яжіться з нами для аудиту поточного рішення. Замовте інтеграцію DaData та отримайте консультацію з оптимізації бюджету.
Джерело: документація API DaData







