Интеграция сервиса DaData для подсказок адресов в мобильном приложении

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

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция сервиса DaData для подсказок адресов в мобильном приложении
Простой
от 1 дня до 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

Интеграция сервиса DaData для подсказок адресов в мобильном приложении

Google Places Autocomplete хорошо работает в Европе и США. В России — хуже: незнакомые корпуса, строения вида «1А», адреса в промзонах, садовые товарищества. DaData решает именно это: их база построена на ФИАС/КЛАДР и знает адресное пространство России значительно глубже.

Что интегрируем

Основной эндпоинт для подсказок при вводе: 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 для российских адресов.

Реализация на iOS

Создаём DaDataService с URLSession или Alamofire. Авторизация через заголовок Authorization: Token <API_KEY>. Ключ храним в xcconfig и читаем через Bundle.main.infoDictionary — не хардкодим в коде.

Подсказки показываем в UITableView под текстовым полем. Запросы дебаунсируем через Combine: searchSubject.debounce(for: .milliseconds(300), scheduler: RunLoop.main). Без дебаунса при быстром вводе улетает по запросу на каждый символ.

Пример обработки ответа:

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 или кастомным Popup. Тут важно правильно управлять фокусом: при выборе подсказки убираем фокус с поля через LocalFocusManager.current.clearFocus() и скрываем клавиатуру через LocalSoftwareKeyboardController.

Flutter

Пакета под DaData нет в pub.dev с нормальным рейтингом — пишем свой DaDataRepository с Dio. Подсказки отдаём через StreamController с дебаунсом Timer(Duration(milliseconds: 300), ...). Для UI — ListView.builder в Overlay или пакет flutter_typeahead с кастомным suggestionsCallback.

Важные нюансы

Квота на бесплатном плане — 10 000 запросов в день. Для приложений с активной аудиторией этого не хватит с первой недели. Учитывайте квоту при выборе тарифа ещё на этапе архитектуры.

При первичной загрузке страницы — не запрашивать подсказки для пустой строки, это тратит квоту без пользы. Минимальная длина запроса — 3 символа.

Срок интеграции: один-два дня. Включает клиентский сервис, UI-компонент с дебаунсом, обработку выбора адреса и маппинг координат.