Стартап
Развлечение и спорт
Россия, Москва
iOS, Android
Октябрь 2025
Заказчик обратился с задачей – разработать кроссплатформенное мобильное приложение для фитнес-браслета. Девайсы он заказал в Китае. Приложение должно было подключаться к браслету, считывать пользовательские метрики (пульс, шаги, сон и др.) и передавать их в API клиента.
Главной сложностью проекта стало отсутствие актуальной документации и нестандартный BLE-протокол.
Смарт-устройства сопровождались SDK 2017 года. Такая устаревшая документация означала, что:
· Android-версия написана на Java — язык, который практически не используется в современных проектах;
· iOS-версия — на Objective-C, исходные коды закрыты полностью;
· код частично нерабочий.;
· комментарии — исключительно на китайском, без технической ценности.
Такое SDK не позволяло понять, как именно ведет себя устройство и какие данные оно может передавать. Чтобы снизить риски, вместе с заказчиком мы решили разделить проект на два этапа.
1. Создание MVP-приложения без дизайна, для проверки подключения и передачи данных между браслетом и API.
2. Разработка кроссплатформенного мобильного приложения с полным функционалом и продуманным интерфейсом после подтверждения стабильной работы устройства.
Для взаимодействия со смарт-устройствами используется протокол Bluetooth Low Energy (BLE). Обычно процесс работы с BLE выглядит так:
1. Система обнаруживает устройство и подключается к нему.
2. Отправляется запрос: какие характеристики доступны для чтения и записи.
3. В ответ устройство возвращает список GUID-параметров (Heart Rate, Weight, Blood Pressure и т.д.) — уникальных идентификаторов.
Обычно GUIDов порядка 20ти. Однако в нашем случае производитель вместо стандартных двадцати характеристик реализовал только два поля: одно для записи запроса и одно для чтения ответа. Это означало, что все запросы команде придется формировать вручную в бинарном формате.
Протокол BLE не использует привычные форматы вроде JSON или XML. Взаимодействие с устройством происходит через последовательности байт: отправляешь набор чисел и получаешь в ответ другой. Без понимания того, что означает каждая байтовая позиция, расшифровать данные невозможно. Поэтому при работе с нестандартным BLE-протоколом основная сложность заключалась не в подключении устройства, а в исследовании и отладке протокола — чтобы восстановить логику кодирования данных.
Итак, в этом проекте все бинарные запросы пришлось формировать вручную — документации не существовало.
Часть данных для создания запросов удалось извлечь из Android-кода на Java. Мы использовали только те фрагменты, назначение которых удалось определить: экспериментально проверяли, какие последовательности байт соответствуют конкретным показателям устройства. Оставшиеся данные пришлось восстанавливать через анализ iOS-библиотеки. Команда ItFox выполнила декомпиляцию и дизассемблирование закрытой библиотеки, чтобы разобраться в логике BLE-взаимодействия. Так как она была собрана под архитектуру Darwin, мы перевели ее в ассемблерный код, а затем преобразовали в C при помощи Ghidra. Это позволило проанализировать алгоритмы обмена и извлечь недостающие параметры протокола.
Во время тестирования устройства команда столкнулась с полями, названия которых не имели очевидного смысла — например, HeartRateReability_TestData и несколько других. Мы собрали их список и передали заказчику, чтобы уточнить значения у производителя.
В процессе общения выяснилось, что у китайской стороны уже существует обновлённая версия SDK, разработанная на Flutter. Клиент получил её и передал нам для анализа. Новое SDK также потребовало доработок, однако содержало рабочие исходники.
Это позволило определить недостающие параметры, уточнить структуру данных и корректно реализовать их обработку в приложении.
По итогам первого этапа был создан рабочий прототип мобильного приложения.
Функционал прототипа включает:
· поиск и подключение к фитнес-браслету;
· создание и авторизацию пользователя на сервере клиента;
· получение и передачу данных.
Сейчас команда приступила ко второму этапу — разработке интерфейса и финального дизайна приложения. Мы формируем структуру экранов, прорабатываем UX и добавляем функционал, который сделает продукт удобным для пользователей.
