Bluetooth нативных мобильных приложений¶
Требования применяются к приложениям iOS и Android, которые обнаруживают
Bluetooth-устройства, устанавливают соединение или обмениваются прикладными
данными через Bluetooth Classic либо Bluetooth Low Energy (BLE). Уровни
обязательности определены в корневом README.md.
MOB-BT-001. Разрешение и ограниченное обнаружение¶
Уровень: MUST
Применяется к: поиску Bluetooth-устройств или установлению соединения
Приложение должно запрашивать применимое platform permission непосредственно перед объявленным пользовательским сценарием и различать отсутствие поддержки, выключенный Bluetooth, отказ или отзыв permission, отсутствие peer и техническую ошибку.
Discovery должно использовать минимально достаточный filter и иметь конечную длительность. Scan и незавершённое соединение должны прекращаться при отмене сценария и завершении владельца lifecycle. Background discovery допускается только для объявленной функции, поддерживаемой системным режимом, и не должно использоваться для бессрочного удержания процесса.
Обоснование¶
Неограниченный scan расходует battery, раскрывает окружающие устройства и переживает пользовательский сценарий.
Проверка¶
- тест unsupported, Bluetooth off, allow, deny и revoke;
- тест filter и достижения предела discovery;
- проверка отмены scan и connection при уходе;
- тест background-ограничений платформы.
Исключения¶
Системный picker MAY выполнять discovery вместо приложения; приложение должно сохранять различимые исходы выбора, отмены и недоступности.
MOB-BT-002. Проверяемая identity peer¶
Уровень: MUST
Применяется к: Bluetooth-соединению, передающему защищённые данные или выполняющему защищённую операцию
Отображаемое имя, radio address и advertisement не должны считаться доказательством identity peer: они могут изменяться, ротироваться или подменяться. До передачи защищённых данных либо команды приложение должно проверить peer через platform pairing с требуемым уровнем защиты, прикладной credential или криптографический ключ, связанный с ожидаемым устройством.
После reconnect, изменения bonding state или замены ключа проверка должна выполняться заново. Неизвестный либо ранее удалённый peer не должен получать данные только из-за совпавшего имени, адреса или service identifier.
Обоснование¶
Обнаружение радиосигнала подтверждает доступность передатчика, но не его владельца или право выполнить операцию.
Проверка¶
- тест peer с тем же именем и другим credential;
- тест изменившегося address при той же подтверждённой identity;
- тест reconnect, удаления bond и ротации ключа;
- негативный тест команды до завершения проверки peer.
Исключения¶
Публичный broadcast без защищённых данных и команд MAY приниматься без
аутентификации peer, но его payload остаётся недоверенным вводом и должен
проходить ограничения MOB-BT-003.
MOB-BT-003. Контракт обмена и восстановление¶
Уровень: MUST
Применяется к: прикладным сообщениям или командам поверх Bluetooth
Протокол должен иметь версию и определять типы сообщений, предел размера, fragmentation и reassembly, timeout, подтверждение, допустимость duplicate и порядок там, где эти свойства влияют на результат. Неизвестная версия, необъявленный тип, превышение предела, неполный fragment и невалидный payload должны отклоняться до обязательного эффекта.
Потеря соединения должна оставлять различимый результат pending, confirmed, failed или unknown согласно контракту операции. Reconnect и retry должны быть конечными; повтор команды после неизвестного результата должен использовать стабильный идентификатор и не должен дублировать необратимый эффект.
Обоснование¶
Bluetooth допускает фрагментацию, разрыв и повтор на границе фактического выполнения команды.
Проверка¶
- contract-тест поддерживаемых и неизвестных версий сообщения;
- граничный тест размера, fragments, duplicate и reorder;
- fault-injection разрыва до и после выполнения команды;
- тест ограниченного reconnect и повтора со стабильным идентификатором.
Исключения¶
Закрытый vendor SDK MAY скрывать wire protocol, если проект фиксирует версию SDK и автоматически проверяет те же пределы, ошибочные исходы и отсутствие повторного эффекта через его публичный контракт.