Aimoto
2 560 000
Промышленность и оборудование
Россия, Москва
iOS, Android
Ноябрь 2023
AIMOTO — российская компания, которая уже 10 лет разрабатывает умные гаджеты и сервисы для всей семьи. В 2019 году, согласно исследованию аналитического агентства Counterpoint Research, компания заняла десятое место в рейтинге ведущих мировых брендов, производящих детские умные часы.
Перед нашей командой стояла задача обеспечить стабильную работу уже имеющегося мобильного приложения и разработать новые продукты внутри экосистемы Aimoto.
В рамках проекта мы:
• Обеспечили стабильную работу существующего мобильного приложения (исправление критических багов и снижение технического долга).
• Привели в порядок репозиторий и миграции SQLAlchemy (структуризация, единые правила и чистые миграции).
• Модернизировали платёжную схему (миграция механизмов оплаты с Google Play/App Store на YooKassa).
• Доработали Aimoto Connect (двусторонние звонки часы↔приложение на базе Janus WebRTC; настройка серверного управления сессиями и параметрами; интеграция flutter_callkit_incoming для системных входящих).
• Реализовали инициализацию и вёрстку Aimoto Kids (GPS, SOS, звонки, геозоны, камера, будильник и напоминания).
• Обеспечили фоновую работу Aimoto Kids (адаптация и внедрение carp_background_location для постоянной передачи геоданных).
• Улучшили архитектуру взаимодействия сервисов (упрощение интеграций и снижение связности).
• Наладили процесс итерационной разработки (спринты, совместное планирование задач с клиентом и приоритизация).
В работе над проектом с нашей стороны участвовали четыре человека: один Python разработчик, один разработчик на Flutter, менеджер проекта и тестировщик.Для разработки серверной части было решено продолжить использовать Python, так как проект был написан на этом языке. Для разработки клиентской части был выбран Flutter по той же причине.
Разработка разделялась на итерации, в ходе которых нужно было реализовать определенный функционал и/или пофиксить баги. До начала спринта все задачи на разработку определялись совместно с клиентом.Можно выделить несколько основных этапов работы над приложением:
- Исправление проблем легаси приложения.
- Осуществить миграцию механизмов оплаты с Google Play и App Store на Yookassa.
- Доработать мобильное приложение Aimoto Connect.
- Реализация звонков с часов на Aimoto Connect и обратно.
- Верстка и инициализация Aimoto Kids.
- Реализация работы в фоновом режиме Aimoto Kids.
Aimoto Connect - это умные часы, которые оснащены функциями: встроенный микрофон и динамик, GPS-трекер, кнопка SOS, мониторинг здоровья и напоминания о приёме лекарств. Данные часы предназначены для взрослых и пожилых людей, чтобы их родственники или опекуны могли отслеживать разные показания владельца часов через приложение Aimoto Connect.
Одной из самых длительных задач была настройка обмена звонками между умными часами для детей и приложением для родителей Aimoto Connect.В этом приложении можно добавлять и привязывать конкретных пользователей к устройствам, просматривать их геолокацию и различные доступные показатели.Изначально нам предоставили кодовую базу с частично реализованными звонками через технологию Janus WebRTC, однако эта база была неполной и содержала множество ошибок, в связи с чем система была непригодна для использования.Также сами устройства (умные часы) были физически привязаны к использованию именно этой технологии, поэтому переход на другую технологию был невозможен.

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