Две недели назад я нахожусь в эпической саге, чтобы разгадать микшер сбоя связи с подключением miband bluetooth. Я новичок в флаттере, но видимо это что-то новое в сообществе, я не нашел конкретного материала по языку.
Перейдем к проблеме!
Задача: Считать и записать данные на умном браслете xiaomi (MiBand3) через гибридное приложение (В случае флаттера).
Ошибка:
Браслет отключается через 30 секунд, при отправке данные не принимаются.
Файл Pubspec.yaml:
environment:
sdk: "> = 2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
flutter_blue: ^ 0.7.2
typed_data: ^ 1.2.0
encrypt: ^ 4.0.3
cupertino_icons: ^ 0.1.3
byte_data_wrapper:
git: git: //github.com/Taym95/byte_data_wrapper.git
dev_dependencies:
flutter_test:
sdk: flutter
Причина возникшей ошибки:
Согласно некоторым материалам на других языках, которые я нашел в Интернете, мне нужно выполнить процесс аутентификации с помощью браслета. Эта ссылка содержит наиболее полное объяснение, которое я нашел https://leojrfs.github.io/writing/miband2-part1-auth/
ВОПРОС:
Как мне реализовать это во флаттере? Этот процесс отправки на определенный UUID, затем получение байтов и чтение только начала, затем получение только последних 16 байтов и шифрование, отправка снова ... Это очень запутано в моей голове! И ничем не могло быть иначе для новичка во флаттере. Хороший! Мне удалось отобразить весь процесс аутентификации и описать краткое изложение ниже. Я хотел бы, чтобы вы помогли мне понять, как это реализовать и отправить с помощью flutter_blue?
Шаги по аутентификации:
- Создайте ключ размером 16 байт. Пример: {0x30, 0x31, ..., 0x46, 0x45}
- Включите уведомления на miband, отправив TRUE сервису UUID 0x0009
- Отправьте {0x01, 0x08, KEY} на UUID 0x0009.
- Убедитесь, что первые три байта возврата были {0x10, 0x01, 0x01}, что означает успешное получение.
- Отправьте еще один запрос сейчас с дополнительным битом в первом элементе и без ключа {0x02, 0x08}
- Проверьте возврат еще раз, если значение {0x10, 0x02, 0x01} означает успех.
- Возьмите последние 16 байтов ответа с шага 6 и зашифруйте его с помощью AES / ECB / NoPadding, используя ключ, созданный на первом шаге. Сохраните в переменной RESPONSE_KEY.
- Отправьте еще один запрос с зашифрованным ответом, созданным выше. Пример: {0x03, 0x08, RESPONSE_KEY}, аналогично шагу 3.
- Проверьте возврат, если он равен {0x10, 0x03, 0x01}, данные, вероятно, уже были отправлены.