Перейти к содержанию

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 и автоматически проверяет те же пределы, ошибочные исходы и отсутствие повторного эффекта через его публичный контракт.