Перейти к содержимому
обсудить проект
Aimoto

приложения для экосистемы детских устройств

Приложения для экосистемы детских устройств

сайт проекта →
приложения для экосистемы детских устройств
технологии

flutter python Janus tornado

отрасль

iot

услуги

mobile, frontend, backend

Вводные данные

Клиент

AIMOTO — российская компания, которая уже 10 лет разрабатывает умные гаджеты и сервисы для всей семьи. В 2019 году, согласно исследованию аналитического агентства Counterpoint Research, компания заняла десятое место в рейтинге ведущих мировых брендов, производящих детские умные часы.

Проблема

У клиента уже был готовый продукт с клиентской базой и сложной, устаревшей кодовой базой, которую создавали разные команды разработчиков. В коде было много ошибок, которые нам нужно было исправить. Также клиент предоставил нам полуготовое мобильное приложение на Flutter, которое нужно было доработать, а также реализовать новые бизнес-требования. Общие проблемы проекта:

  • Большой технический долг: Низкокачественная кодовая база, множество ошибок и отсутствие единой архитектуры.
  • Устаревшие технологии и инструменты: Привязка к конкретным не самым удобным инструментам.
  • Проблемы с репозиторием: Беспорядок в репозитории и в миграциях SQLAlchemy.
  • Сложности локальной разработки: Трудности с развертыванием проекта на локальной машине.
  • Нерентабельный глобальный рефакторинг: из-за большого объема кода и отсутствия общей архитектуры.

Задача

Перед нашей командой стояла задача обеспечить стабильную работу уже имеющегося мобильного приложения и разработать новые продукты внутри экосистемы Aimoto.

Экран приложения, 1

Процесс работы

1.Проектирование

В работе над проектом с нашей стороны участвовали четыре человека: один Python разработчик, один разработчик на Flutter, менеджер проекта и тестировщик.

Для разработки серверной части было решено продолжить использовать Python, так как проект был написан на этом языке. Для разработки клиентской части был выбран Flutter по той-же причине.

2.Разработка

Разработка разделялась на итерации, в ходе которых нужно было реализовать определенный функционал и/или пофиксить баги. До начала спринта все задачи на разработку определялись совместно с клиентом. Можно выделить несколько основных этапов работы над приложением:

  • Исправление проблем легаси приложения.
  • Осуществление миграции механизмов оплаты с Google Play и App Store на Yookassa.
  • Доработа мобильного приложения Aimoto Connect.
  • Реализация звонков с часов на Aimoto Connect и обратно.
  • Верстка и инициализация Aimoto Kids.
  • Реализация работы в фоновом режиме Aimoto Kids.

Доработка Aimoto Connect

Aimoto Connect — это умные часы, которые оснащены функциями:

Экран приложения, 2
  • встроенный микрофон и динамик
  • GPS-трекер
  • кнопка SOS
  • мониторинг здоровья
  • напоминания о приёме лекарств

Данные часы предназначены для взрослых и пожилых людей, чтобы их родственники или опекуны могли отслеживать разные показания владельца часов через приложение Aimoto Connect.

Реализация звонков с часов на Aimoto Connect и обратно.

Одной из самых длительных задач была настройка обмена звонками между умными часами для детей и приложением для родителей Aimoto Connect.

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

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

Также сами устройства (умные часы) были физически привязаны к использованию именно этой технологии, поэтому переход на другую технологию был невозможен.

  • Мы многократно перенастраивали Janus, чтобы добиться стабильной работы. Сервер управлял созданием и завершением сессий, а также передачей учетных данных и параметров сессии между устройствами.
  • Переписали механизм взаимодействия с Janus на стороне приложения, обеспечив корректную работу звонков.
  • Для реализации звонков мы использовали библиотеку flutter_callkit_incoming, которая предоставляет интерфейс для входящих звонков, аналогичный системному приложению телефона.
  • Периодически возникали ошибки, связанные с соединением и передачей данных, которые было сложно отладить из-за сложности взаимодействия с Janus.

Несмотря на исходные трудности с Janus WebRTC, в конечном итоге мы смогли настроить и оптимизировать систему до уровня, обеспечивающего удовлетворительную работу. Однако, проект потребовал постоянного внимания и доработок из-за возникающих проблем.

Доработка Aimoto Kids

Aimoto Kids оснащены схожим функционалом:

Экран приложения, 3
  • GPS-трекер
  • кнопка SOS
  • совершение и приём звонков
  • геозоны
  • камера
  • будильник
  • напоминания.

Данные часы предназначены для детей, управление происходит через приложение Aimoto Kids App.

Реализация работы в фоновом режиме Aimoto Kids.

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

Однако мы не смогли найти готовое решение на Flutter, которое бы полностью подходило для нашего приложения. Поэтому нам пришлось использовать библиотеку carp_background_location, которая выполняет схожие функции, и адаптировать её под требования нашего приложения.

За шесть месяцев мы смогли успешно доработать и улучшить мобильное приложение Aimoto, обеспечив стабильную работу системы и реализовав новый функционал. Были решены проблемы с техническим долгом и улучшена кодовая база. В результате клиент получил обновленное и функциональное мобильное приложение, готовое к использованию и дальнейшему развитию. В настоящий момент мы продолжаем сотрудничество с клиентом, расширяя функционал приложения и добавляя новые возможности.

«Мы работаем с командой по модели T&M, для нас это идеальная система в нашем продукте, получилось хорошее соотношение цена/качество. Мы смогли запустить MVP для новой поставки за пару месяцев и продолжаем сотрудничество с командой» — Дмитрий Н., CTO Aimoto.

результаты

За шесть месяцев мы смогли успешно доработать и улучшить мобильное приложение Aimoto, обеспечив стабильную работу системы и реализовав новый функционал.

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

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