• Android-Kotlin: офлайн-first модуль сбора полевых данных с картой, треками и синхронизацией в существующее приложение

    2 часа назад
    • Желаемый бюджет до 450.83 USD
    • Ожидает исполнителя...
  • Исходная ситуация - есть действующее Android-приложение для полевых инженеров (Kotlin, Android 12+, minSdk 26) с авторизацией и базовой навигацией. Сейчас данные о выездах и осмотрах фиксируются в бумажных формах и потом вручную заносятся в систему, из-за чего теряются координаты, фото и время. Нужно добавить в приложение полноценный офлайн-first модуль - создание задания, сбор данных на точке, запись трека, прикрепление фото и заметок, а также надежную синхронизацию на сервер при появлении сети.

    Техническая среда - Android Studio, Kotlin, Jetpack (ViewModel, Room, WorkManager), Coroutines/Flow, Hilt, Retrofit/OkHttp. Карта - Mapbox SDK или Google Maps SDK - можно выбрать, но решение должно быть обосновано по ограничениям ниже. Сервер уже существует, менять его нельзя. API - REST, JSON, HTTPS, токен Bearer. Документация API будет предоставлена, но в ней нет офлайн-сценариев.

    Что должно получиться - релизный модуль в составе текущего проекта, который позволяет:
    1) Открыть список заданий, скачать задания на устройство и хранить локально
    2) Внутри задания заполнить форму осмотра с валидацией полей, сохранить черновик локально без сети
    3) Записать GPS-трек во время выезда и привязать к заданию - хранить локально и отображать на карте
    4) Сделать до 10 фото на задание, сжать и сохранить локально, показывать превью и привязку ко времени/координатам
    5) Синхронизировать изменения и вложения на сервер через очередь - с ретраями, дедупликацией и защитой от дублей при повторной отправке

    Ограничения - приложение работает в условиях плохой связи и ограниченного питания, поэтому фоновые задачи должны быть бережными. Нельзя добавлять тяжёлые сторонние библиотеки кроме стандартных Jetpack и выбранного SDK карты. Нельзя требовать постоянной геолокации в фоне - запись трека должна корректно работать в foreground service с уведомлением, а при остановке записи не удерживать ресурсы. Данные должны переживать перезапуск приложения и перезагрузку устройства.

    Измеримые критерии приемки - функциональность должна быть воспроизводима на 2 устройствах - Android 10 и Android 14:
    - Без сети можно создать/отредактировать 3 задания, записать трек минимум 2 км и сделать 10 фото на каждое - после перезапуска приложения все остается на месте
    - При появлении сети синхронизация запускается через WorkManager, догружает все изменения и фото, и после успешной отправки локальные записи получают отметку synced
    - Повторная синхронизация не создает дубликатов на сервере при сценарии - отправка началась, сеть пропала, пользователь повторил отправку
    - Среднее время открытия экрана задания с 10 фото - не более 2 секунд на среднем устройстве (уровень Pixel 4a или аналог)
    - Ошибки синхронизации отображаются человеку понятным сообщением и остаются в журнале внутри приложения минимум по последним 50 операциям

    Этапы выполнения - анализ текущей архитектуры и точек интеграции, проектирование схемы Room и модели конфликтов, реализация UI и хранения, реализация трекера и карты, реализация очереди синхронизации и ретраев, покрытие ключевых частей тестами (минимум unit-тесты для маппинга и очереди), финальная сборка и инструкции как прогнать сценарии приемки.

    Результат - PR или набор коммитов в Git с рабочим модулем, краткое README по настройке ключей карты и тестовым сценариям, список принятых допущений по API и офлайн-конфликтам.
Ваше предложение

Вы ещё не оставили предложение к этому заказу.
Нажмите «Предложить услугу», чтобы отправить своё предложение.

Нужно похожее задание?

Если задача похожа на вашу, можно посмотреть готовые услуги в категории или создать свое задание с нужным бюджетом, сроками и требованиями.

Задание «Android-Kotlin: офлайн-first модуль сбора полевых данных с картой, треками и синхронизацией в существующее приложение» можно использовать как ориентир для своего брифа: что нужно сделать, какой результат нужен и какой бюджет указать.