приложения для экосистемы детских устройств
Приложения для экосистемы детских устройств
сайт проекта →
flutter python Janus tornado
iot
mobile, frontend, backend
Вводные данные
Клиент
AIMOTO — российская компания, которая уже 10 лет разрабатывает умные гаджеты и сервисы для всей семьи. В 2019 году, согласно исследованию аналитического агентства Counterpoint Research, компания заняла десятое место в рейтинге ведущих мировых брендов, производящих детские умные часы.
Проблема
У клиента уже был готовый продукт с клиентской базой и сложной, устаревшей кодовой базой, которую создавали разные команды разработчиков. В коде было много ошибок, которые нам нужно было исправить. Также клиент предоставил нам полуготовое мобильное приложение на Flutter, которое нужно было доработать, а также реализовать новые бизнес-требования. Общие проблемы проекта:
- Большой технический долг: Низкокачественная кодовая база, множество ошибок и отсутствие единой архитектуры.
- Устаревшие технологии и инструменты: Привязка к конкретным не самым удобным инструментам.
- Проблемы с репозиторием: Беспорядок в репозитории и в миграциях SQLAlchemy.
- Сложности локальной разработки: Трудности с развертыванием проекта на локальной машине.
- Нерентабельный глобальный рефакторинг: из-за большого объема кода и отсутствия общей архитектуры.
Задача
Перед нашей командой стояла задача обеспечить стабильную работу уже имеющегося мобильного приложения и разработать новые продукты внутри экосистемы Aimoto.

Процесс работы
1.Проектирование
В работе над проектом с нашей стороны участвовали четыре человека: один Python разработчик, один разработчик на Flutter, менеджер проекта и тестировщик.
Для разработки серверной части было решено продолжить использовать Python, так как проект был написан на этом языке. Для разработки клиентской части был выбран Flutter по той-же причине.
2.Разработка
Разработка разделялась на итерации, в ходе которых нужно было реализовать определенный функционал и/или пофиксить баги. До начала спринта все задачи на разработку определялись совместно с клиентом. Можно выделить несколько основных этапов работы над приложением:
- Исправление проблем легаси приложения.
- Осуществление миграции механизмов оплаты с Google Play и App Store на Yookassa.
- Доработа мобильного приложения Aimoto Connect.
- Реализация звонков с часов на Aimoto Connect и обратно.
- Верстка и инициализация Aimoto Kids.
- Реализация работы в фоновом режиме Aimoto Kids.
Доработка Aimoto Connect
Aimoto Connect — это умные часы, которые оснащены функциями:

- встроенный микрофон и динамик
- GPS-трекер
- кнопка SOS
- мониторинг здоровья
- напоминания о приёме лекарств
Данные часы предназначены для взрослых и пожилых людей, чтобы их родственники или опекуны могли отслеживать разные показания владельца часов через приложение Aimoto Connect.
Реализация звонков с часов на Aimoto Connect и обратно.
Одной из самых длительных задач была настройка обмена звонками между умными часами для детей и приложением для родителей Aimoto Connect.
В этом приложении можно добавлять и привязывать конкретных пользователей к устройствам, просматривать их геолокацию и различные доступные показатели.
Изначально нам предоставили кодовую базу с частично реализованными звонками через технологию Janus WebRTC, однако эта база была неполной и содержала множество ошибок, в связи с чем система была непригодна для использования.
Также сами устройства (умные часы) были физически привязаны к использованию именно этой технологии, поэтому переход на другую технологию был невозможен.
- Мы многократно перенастраивали Janus, чтобы добиться стабильной работы. Сервер управлял созданием и завершением сессий, а также передачей учетных данных и параметров сессии между устройствами.
- Переписали механизм взаимодействия с Janus на стороне приложения, обеспечив корректную работу звонков.
- Для реализации звонков мы использовали библиотеку flutter_callkit_incoming, которая предоставляет интерфейс для входящих звонков, аналогичный системному приложению телефона.
- Периодически возникали ошибки, связанные с соединением и передачей данных, которые было сложно отладить из-за сложности взаимодействия с Janus.
Несмотря на исходные трудности с Janus WebRTC, в конечном итоге мы смогли настроить и оптимизировать систему до уровня, обеспечивающего удовлетворительную работу. Однако, проект потребовал постоянного внимания и доработок из-за возникающих проблем.
Доработка Aimoto Kids
Aimoto Kids оснащены схожим функционалом:

- GPS-трекер
- кнопка SOS
- совершение и приём звонков
- геозоны
- камера
- будильник
- напоминания.
Данные часы предназначены для детей, управление происходит через приложение Aimoto Kids App.
Реализация работы в фоновом режиме Aimoto Kids.
Для того чтобы приложение работало в фоновом режиме, необходимо было обеспечить постоянный обмен данными о местоположении. Это позволило приложению продолжать функционировать и обновлять информацию о местонахождении пользователя, даже когда экран свернут или когда пользователь работает с другими приложениями.
Однако мы не смогли найти готовое решение на Flutter, которое бы полностью подходило для нашего приложения. Поэтому нам пришлось использовать библиотеку carp_background_location, которая выполняет схожие функции, и адаптировать её под требования нашего приложения.
За шесть месяцев мы смогли успешно доработать и улучшить мобильное приложение Aimoto, обеспечив стабильную работу системы и реализовав новый функционал. Были решены проблемы с техническим долгом и улучшена кодовая база. В результате клиент получил обновленное и функциональное мобильное приложение, готовое к использованию и дальнейшему развитию. В настоящий момент мы продолжаем сотрудничество с клиентом, расширяя функционал приложения и добавляя новые возможности.
«Мы работаем с командой по модели T&M, для нас это идеальная система в нашем продукте, получилось хорошее соотношение цена/качество. Мы смогли запустить MVP для новой поставки за пару месяцев и продолжаем сотрудничество с командой» — Дмитрий Н., CTO Aimoto.
результаты
За шесть месяцев мы смогли успешно доработать и улучшить мобильное приложение Aimoto, обеспечив стабильную работу системы и реализовав новый функционал.
Были решены проблемы с техническим долгом и улучшена кодовая база. В результате клиент получил обновленное и функциональное мобильное приложение, готовое к использованию и дальнейшему развитию.
В настоящий момент мы продолжаем сотрудничество с клиентом, расширяя функционал приложения и добавляя новые возможности.


