Платформа управления автопарком с помощью AI
Задача
Разработать клиентское и водительское приложение на Android и iOS. Внедрить функционал обнаружения неполадок в машине с помощью мобильного клиента и машинного обучения.
О проекте
Платформа объединяет заказчиков и исполнителей: таксопарки, логистические компании, станции техобслуживания. Позволяет обеспечить весь жизненный цикл перевозки — от бюджетирования, создания заявки и выполнения маршрута до формирования итоговой отчетности.
Результаты
Разработали возможность проходить полную проверку автомобиля по фотографиям, которые обрабатывает AI. Внедрили функции для ремонта автомобиля, бронирования парковки, шиномонтажа и автомойки.
Добавили многофакторную аутентификацию, защиту от плохого соединения, актуализацию часового пояса, а также системы авторизации, смены статуса и распределения заявок.
Технологии
RxJava
Koin
Live Data
Single Activity
Combine
Kotlin
Swift
Retrofit
Интеграции
2GIS
Водительское приложение
Здесь пользователь получает заявки на такси, доставку груза и записывается на техосмотр и ремонт автомобиля.
Студия разработала системы авторизации, смены статуса в приложении и распределения заявок (на такси и доставку груза). Выстроила процесс использования такси, работу встроенной камеры и AI.
Безопасность данных
Чтобы данные пользователей были в безопасности, добавили многофакторную аутентификацию. Если входить по логину и паролю, приложение запросит проверочный код из письма в электронной почте. Дополнительно предложит установить защитный код-пароль, который можно ввести с помощью биометрии.
Автоматическая смена статуса водителя
После первого входа в приложение на главном экране появляется кнопка «Выйти на линию». Когда пользователь нажимает на нее, сервер отправляет запрос на автомобиль. Затем водитель принимает машину, и его статус меняется на «Онлайн» — это значит, что можно принимать заказы. Когда смена закончилась и водитель не получает заказы, статус меняется на «Офлайн».
Продуманная навигация
Водитель принимает заявку, и карта переключается в режим навигатора. Благодаря NavigationControl в интерфейсе появляется информация об ограничении скорости, прогресс маршрута и оповещения о поворотах.
Когда водитель на месте, появляется кнопка «Завершить поездку», затем статус поездки меняется и проходит оплата.
Связкой RxJava+Retrofit создали сетевой слой приложения. RxJava используется для многопоточности — запросы отправляются в отдельном потоке и не блокируют UI основного приложения. При этом Retrofit генерирует запросы к серверу.
Актуальный часовой пояс
Иногда водителю приходится ездить в другие часовые пояса. Если приложение будет брать информацию о поясе с устройства, могут возникнуть ошибки. Чтобы исключить проблемы, задействовали библиотеку TimeZoneMap. С ней сервис получает актуальный часовой пояс через местоположение.
Защита от плохого соединения
Даже если водитель окажется в зоне с плохим соединением, приложение не даст сбой. Кэширование маршрутных точек настроили через библиотеку Room, а подключение к интернету можно отследить благодаря ConnectivityManager. Когда соединение восстановится, важные данные синхронизируются с сервером, и водитель спокойно продолжит поездку.
Ускоренная загрузка заявок
Использовали пагинацию (paging library 3), чтобы сократить время на получение заявок для водителя. За счет этого загрузка верхних элементов списка ускорилась в 10 раз. Давние заявки можно посмотреть, пролистывая список.
Техосмотр с помощью фотографий
Чтобы сделать предрейсовый техосмотр удобным, добавили встроенную камеру на основе библиотеки CameraX. Водитель сможет фотографировать показатели приборов перед поездкой и отправлять их на обработку, не переключаясь на сторонние приложения.
Экономия ресурсов за счет AI
В приложении есть функции искусственного интеллекта для обработки фотографий. Это позволяет экономить ресурсы и систематизировать поток данных. Когда пользователь загружает фото, отправляется запрос на backend с помощью библиотеки Alamofire. Затем сервер присылает ответ от AI.
Клиентское приложение
Здесь можно заказать такси и доставку груза, забронировать парковочное место, создать заявку на ремонт, а также записаться на мойку и шиномонтаж.
Присвоение ролей
Когда пользователь заходит в аккаунт, система присваивает ему роль. И у каждой роли есть свои возможности. Чтобы это реализовать, написали метод, который берет из JWT-токена нужную информацию о пользователе. Например, при роли ROLE_DRIVER пользователю доступна ячейка с функциями выхода на линию.
Полезный функционал
для бронирования парковки
На главном экране есть карта 2ГИС с выезжающей панелью, где находится UICollectionView. Здесь можно добавить свой автомобиль, а также забронировать краткосрочную и долговременную парковку благодаря запросам, которые выполняются с помощью библиотеки Alamofire.
Есть возможность узнать номер стоянки, выбрать парковочные часы, посмотреть, какие места уже заняли, а также отменить или продлить бронь.
Удобная отправка машины в сервис
Чтобы отправить машину в автосервис, пользователь заходит в раздел «Ремонт», выбирает услугу и тип повреждений.
Студия использовала RxJava и Retrofit, что позволило не загружать главный поток приложения. Теперь пользователь может совершать операции, пока запрос на сервер обрабатывается в фоновом режиме.
Онлайн-запись на шиномонтаж и автомойку
Пользователи смогут записаться на шиномонтаж и автомойку прямо в приложении. Функционал позволяет выбрать на карте место, где можно помыть машину и куда заказать выездной сервис по установке или снятию шин. Также получится отследить статус заказа и оценить выполненную работу.