v1.3
Спецификация аксессуаров Find Hub Network (FHN) определяет подход к отслеживанию устройств Bluetooth Low Energy (BLE) с использованием сквозного шифрования. На этой странице FHN описывается как расширение спецификации Fast Pair. Поставщикам следует включить это расширение, если у них есть устройства, совместимые с FHN, и они готовы включить отслеживание местоположения для этих устройств.
Спецификация ГАТТ
В службу быстрого сопряжения следует добавить дополнительную характеристику общих атрибутов (GATT) со следующей семантикой:
| Характеристика услуги быстрого сопряжения | Зашифровано | Разрешения | UUID |
|---|---|---|---|
| Действия маяка | Нет | Читать, писать и уведомлять | FE2C1238-8366-4814-8EB0-01DE32100BEA |
Таблица 1: Характеристики услуги быстрого сопряжения для FHN.
Аутентификация
Операции, необходимые для этого расширения, выполняются как операции записи, защищенные механизмом «запрос-ответ». Перед выполнением любой операции ожидается, что «Искатель» выполнит операцию чтения из характеристики, указанной в таблице 1, в результате чего будет создан буфер в следующем формате:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | основной номер версии протокола | 0x01 |
| 1 - 8 | массив байтов | Одноразовый случайный одноразовый код | варьируется |
Каждая операция чтения должна приводить к получению разного одноразового числа (nonce), при этом одно одноразовое число должно быть действительным только для одной операции. Одно одноразовое число должно быть аннулировано, даже если операция завершилась неудачей.
Затем искатель вычисляет одноразовый ключ аутентификации, который будет использоваться в последующем запросе на запись. Ключ аутентификации вычисляется, как описано в таблицах 2–5. В зависимости от запрашиваемой операции искатель подтверждает знание одного или нескольких из следующих ключей:
Ключ учетной записи : 16-байтовый ключ учетной записи Fast Pair, определенный в спецификации Fast Pair.
Ключ учетной записи владельца : При первом обращении пользователя к функции «Действия маяка» поставщик выбирает один из существующих ключей учетной записи в качестве ключа учетной записи владельца. Выбранный ключ учетной записи владельца нельзя изменить до сброса настроек поставщика до заводских. Поставщик не должен удалять ключ учетной записи владельца, когда заканчиваются свободные слоты для ключей учетных записей.
Провайдеры, которые уже поддерживают FHN при первом сопряжении (или поддерживают его при сопряжении после сброса к заводским настройкам), выбирают первый ключ учетной записи, поскольку это единственный существующий ключ учетной записи, когда Seeker считывает состояние инициализации во время сопряжения.
Провайдеры, получившие поддержку FHN после того, как они уже были сопряжены (например, посредством обновления прошивки), могут выбрать любой существующий ключ учетной записи. Целесообразно выбрать первый ключ учетной записи, используемый для считывания состояния инициализации из характеристики действий маяка после обновления прошивки, при условии, что пользователь, выполнивший обновление, является текущим владельцем провайдера.
Временный идентификационный ключ (EIK) : 32-байтовый ключ, выбираемый искомым устройством при выполнении процесса предоставления доступа к FHN. Этот ключ используется для генерации криптографических ключей, применяемых для сквозного шифрования отчетов о местоположении. Искающее устройство никогда не раскрывает его бэкэнду.
Ключ восстановления : определяется как
SHA256(ephemeral identity key || 0x01), усекаемый до первых 8 байт. Ключ хранится на бэкэнде, и искатель может использовать его для восстановления EIK при условии, что пользователь выразит согласие, нажав кнопку на устройстве.Ключ звонка : определяется как
SHA256(ephemeral identity key || 0x02), усекаемый до первых 8 байт. Ключ хранится на бэкэнде, и искатель может использовать его только для звонка на устройство.Ключ защиты от нежелательного отслеживания : определяется как
SHA256(ephemeral identity key || 0x03), усекаемый до первых 8 байт. Ключ хранится на бэкэнде, и искатель может использовать его только для активации режима защиты от нежелательного отслеживания .
Операции
Формат данных, записываемых в характеристику, приведен в таблицах 2–5. Каждая из операций более подробно рассматривается далее в этом разделе.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных |
|
| 1 | uint8 | Длина данных | варьируется |
| 2 - 9 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data) |
| 10 - вар | массив байтов | Дополнительные данные |
|
Таблица 2: Запрос на предоставление маяка.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных | 0x04: Чтение временного ключа идентификации с согласия пользователя. |
| 1 | uint8 | Длина данных | 0x08 |
| 2 - 9 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length) |
Таблица 3: Запрос на восстановление ключа инициализации маяка.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных |
|
| 1 | uint8 | Длина данных | варьируется |
| 2 - 9 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байтов HMAC-SHA256(ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data) |
| 10 - вар | массив байтов | Дополнительные данные |
|
Таблица 4: Запрос на звонок.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных |
|
| 1 | uint8 | Длина данных | варьируется |
| 2 - 9 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data) |
| 10 - вар | массив байтов | Дополнительные данные |
|
Таблица 5: Запрос на защиту от нежелательного отслеживания.
Успешная запись запускает уведомления, как указано в таблице 6.
Уведомления с идентификатором данных, отличным от 0x05: Изменение состояния кольца должно быть отправлено до завершения транзакции записи, которая запускает уведомление, то есть до отправки ответного PDU на запрос записи.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных |
|
| 1 | uint8 | Длина данных | варьируется |
| 2 - 9 | массив байтов | Аутентификация | Подробная информация по каждой операции. |
| 10 - вар | массив байтов | Дополнительные данные |
|
Таблица 6: Ответ службы маяка.
В таблице 7 перечислены возможные коды ошибок ГАТТ, возвращаемые операциями.
| Код | Описание | Примечания |
|---|---|---|
| 0x80 | Неподтвержденный | Возвращается в ответ на запрос на запись при неудачной аутентификации (включая случай использования старого одноразового числа). |
| 0x81 | Недопустимое значение | Возвращается в случае предоставления недопустимого значения или если полученные данные содержат неожиданно большое количество байтов. |
| 0x82 | Согласие пользователя отсутствует | Возвращается в ответ на запрос на запись с идентификатором данных 0x04: Чтение временного ключа идентификации с согласия пользователя, когда устройство не находится в режиме сопряжения. |
Таблица 7: Коды ошибок ГАТТ.
Прочитайте параметры маяка.
Ищущий пользователь может запросить у Поставщика параметры маяка, выполнив операцию записи в характеристику, представляющую собой запрос из таблицы 2 с идентификатором данных 0x00. Поставщик проверяет, совпадает ли предоставленный одноразовый ключ аутентификации с любым из ключей учетных записей, хранящихся на устройстве.
Если проверка не пройдена, поставщик услуг возвращает ошибку "неаутентифицировано".
В случае успеха Поставщик отправляет ответ из таблицы 6 с идентификатором данных 0x00. Поставщик формирует сегмент данных следующим образом:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Калиброванная мощность | Откалиброванная мощность, принимаемая на расстоянии 0 м (значение в диапазоне [-100, 20]). Представлена в виде знакового целого числа с разрешением 1 дБм. |
| 1 - 4 | uint32 | Значение часов | Текущее значение времени в секундах (порядок байтов big endian). |
| 5 | uint8 | Выбор кривой | Эллиптическая кривая, используемая для шифрования:
|
| 6 | uint8 | Компоненты | Количество компонентов, способных издавать звуки:
|
| 7 | uint8 | Возможности звонка | Поддерживаемые варианты:
|
| 8-15 | массив байтов | Набивка | Добавление нулевого заполнения для шифрования AES. |
Данные должны быть зашифрованы с помощью алгоритма AES-ECB-128 с использованием ключа учетной записи, применяемого для аутентификации запроса.
Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data after encryption || 0x01) .
Прочитайте состояние подготовки маяка.
Ищущий пользователь может запросить у Поставщика информацию о состоянии подготовки маяка, выполнив операцию записи в характеристику, представляющую собой запрос из таблицы 2 с идентификатором данных 0x01. Поставщик проверяет, совпадает ли предоставленный одноразовый ключ аутентификации с любым из ключей учетных записей, хранящихся на устройстве.
Если проверка не пройдена, поставщик услуг возвращает ошибку "неаутентифицировано".
В случае успеха Поставщик отправляет ответ из таблицы 6 с идентификатором данных 0x01. Поставщик формирует сегмент данных следующим образом:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Состояние предоставления ресурсов | Битовая маска, имеющая следующие значения:
|
| 1 - 20 или 32 | массив байтов | Текущий временный идентификатор | 20 или 32 байта (в зависимости от используемого метода шифрования), указывающие текущий временный идентификатор, передаваемый маяком, если таковой установлен для устройства. |
Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) .
Установить временный ключ идентификации
Для активации незарегистрированного поставщика в качестве маяка FHN или изменения временного ключа идентификации уже зарегистрированного поставщика, искатель выполняет операцию записи в характеристику, представляющую собой запрос из таблицы 2 с идентификатором данных 0x02. Поставщик проверяет следующее:
- Предоставленный одноразовый ключ аутентификации совпадает с ключом учетной записи владельца.
- Если был предоставлен хеш временного ключа идентификации, то хешированный временный ключ идентификации будет соответствовать текущему временному ключу идентификации.
- Если хеш временного ключа идентификации не был предоставлен, убедитесь, что поставщик услуг еще не зарегистрирован в качестве маяка FHN.
Если проверка не пройдена, поставщик услуг возвращает ошибку "неаутентифицировано".
В случае успеха временный идентификационный ключ восстанавливается путем расшифровки его с помощью AES-ECB-128, используя соответствующий ключ учетной записи. Ключ должен быть сохранен на устройстве, и с этого момента провайдер должен начать передавать кадры FHN. Новый временный идентификационный ключ вступает в силу немедленно после завершения соединения BLE. Провайдер отправляет уведомление в ответе из таблицы 6 с идентификатором данных 0x02.
Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) .
Очистка временного ключа идентификации
Для отмены выделения части маяка у Провайдера, Искатель выполняет операцию записи в характеристику, представляющую собой запрос из таблицы 2 с идентификатором данных 0x03. Провайдер проверяет, что:
- Предоставленный одноразовый ключ аутентификации совпадает с ключом учетной записи владельца.
- Хэшированный временный идентификационный ключ соответствует текущему временному идентификационному ключу.
Если поставщик услуг не зарегистрирован как маяк FHN или проверка не удалась, он возвращает ошибку "неаутентифицирован".
В случае успеха провайдер забывает ключ и прекращает передачу кадров FHN. Провайдер отправляет ответ из таблицы 6 с идентификатором данных 0x03. Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) .
Прочтение временного ключа идентификации с согласия пользователя.
Эта опция доступна только для восстановления утерянного ключа, поскольку ключ хранится локально устройством Seeker. Таким образом, эта возможность доступна только тогда, когда устройство находится в режиме сопряжения, или в течение ограниченного времени после нажатия физической кнопки на устройстве (что является согласием пользователя).
Для восстановления ключа в открытом виде устройство Seeker должно хранить ключ восстановления на бэкэнде, но само устройство EIK оно не хранит.
Для чтения EIK, искатель выполняет операцию записи в характеристику, представляющую собой запрос из таблицы 3 с идентификатором данных 0x04. Поставщик проверяет следующее:
- Хэшированный ключ восстановления совпадает с ожидаемым ключом восстановления.
- Устройство находится в режиме восстановления EIK.
Если проверка не пройдена, поставщик услуг возвращает ошибку "неаутентифицировано".
Если устройство не находится в режиме сопряжения, провайдер возвращает ошибку «Нет согласия пользователя».
В случае успеха Поставщик отправляет ответ из таблицы 6 с идентификатором данных 0x04.
Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) .
Кольцевая операция
Ищущий может запросить у Поставщика воспроизведение звука, выполнив операцию записи в характеристику, представляющую собой запрос из таблицы 4 с идентификатором данных 0x05. Поставщик формирует сегмент данных следующим образом:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Кольцевая операция | Битовая маска, имеющая следующие значения:
|
| 1 - 2 | uint16 | Тайм-аут | Время ожидания в децисекундах. Не должно быть равно нулю и не должно превышать 10 минут. Провайдер использует это значение для определения того, как долго устройство должно звонить, прежде чем перестать звонить. Если какой-либо компонент устройства уже звонит, значение тайм-аута перекрывает уже действующее. Если для режима работы кольца установлено значение 0x00, таймаут игнорируется. |
| 3 | uint8 | Объем |
|
После получения запроса Поставщик проверяет следующее:
- Предоставленный одноразовый ключ аутентификации совпадает с ключом от кольца.
- Запрошенное состояние соответствует компонентам, способным издавать звуки.
Если поставщик не зарегистрирован как маяк FHN или проверка не удалась, он возвращает ошибку неаутентифицированности. Однако, если у поставщика активна защита от нежелательного отслеживания, и запрос на защиту от нежелательного отслеживания имел включенный флаг пропуска проверки подлинности, поставщик должен пропустить эту проверку. Данные аутентификации по-прежнему должны предоставляться искателем, но они могут быть установлены на произвольное значение.
При начале или завершении звонка отправляется уведомление, как указано в таблице 6, с идентификатором данных 0x05. Содержимое уведомления определяется следующим образом:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Состояние звона |
|
| 1 | uint8 | Компоненты звонка | Битовая маска компонентов, активно участвующих в процессе, как определено в запросе. |
| 2 - 3 | uint16 | Тайм-аут | Оставшееся время звонка в децисекундах. Если устройство перестало звонить, следует вернуть значение 0x0000. |
Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(ring key, protocol major version number || the nonce used to initiate the ringing command || data ID || data length || additional data || 0x01) .
Если устройство уже находится в запрошенном состоянии звонка при получении запроса на звонок или его остановку, провайдер должен отправить уведомление со статусом звонка или либо 0x00: Начало звонка, либо 0x04: Остановка звонка (запрос GATT) соответственно. Этот запрос переопределяет параметры существующего состояния, позволяя увеличить продолжительность звонка.
Если у оператора связи есть физическая кнопка (или включена функция сенсорного управления), то при нажатии этой кнопки во время активного звонка функция звонка должна быть отключена.
Узнайте состояние сигнала маяка.
Для получения состояния звонка маяка, искатель выполняет операцию записи в характеристику, представляющую собой запрос из таблицы 4 с идентификатором данных 0x06. Поставщик проверяет, совпадает ли предоставленный одноразовый ключ аутентификации с ключом звонка.
Если поставщик услуг не зарегистрирован как маяк FHN или если проверка не удалась, поставщик возвращает ошибку "неаутентифицирован".
В случае успеха Поставщик отправляет ответ из таблицы 6 с идентификатором данных 0x06. Поставщик формирует сегмент данных следующим образом:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Компоненты звонка | Компоненты, находящиеся в активном режиме звонка, как определено в запросе на звонок. |
| 1 - 2 | uint16 | Тайм-аут | Оставшееся время до звонка в децисекундах. Обратите внимание, что если устройство не звонит, должно быть возвращено значение 0x0000. |
Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256 (ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) .
режим защиты от нежелательного отслеживания
Режим защиты от нежелательного отслеживания предназначен для того, чтобы любой клиент мог идентифицировать устройства, использующие вредоносные функции, без взаимодействия с сервером. По умолчанию провайдер должен менять все идентификаторы, как описано в разделе «Смена идентификаторов» . Сервис Find Hub может передавать запрос на активацию режима защиты от нежелательного отслеживания через сеть Find Hub. При этом сервис заставляет провайдера временно использовать фиксированный MAC-адрес, что позволяет клиентам обнаруживать устройство и предупреждать пользователя о возможном нежелательном отслеживании.
Для активации или деактивации режима защиты от нежелательного отслеживания маяка, устройство Seeker выполняет операцию записи в характеристику, представляющую собой запрос из таблицы 5 с идентификатором данных 0x07 или 0x08 соответственно.
При включении режима защиты от нежелательного отслеживания
Поставщик формирует сегмент данных следующим образом:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Управляющие флаги |
Эти флажки действуют только до тех пор, пока не будет отключен режим защиты от нежелательного отслеживания. |
Поставщик проверяет, соответствует ли предоставленный одноразовый ключ аутентификации ключу защиты от нежелательного отслеживания. Если поставщик не зарегистрирован в качестве маяка FHN или проверка не удается, он возвращает ошибку "неаутентифицировано".
При активации режима защиты от нежелательного отслеживания маяк должен уменьшить частоту смены частного MAC-адреса до одного раза в 24 часа. Объявленный эфемерный идентификатор должен продолжать меняться как обычно. Тип кадра должен быть установлен на 0x41. Состояние также отражается в разделе хешированных флагов .
При отключении режима защиты от нежелательного отслеживания
Поставщик подтверждает, что:
- Предоставленный одноразовый ключ аутентификации совпадает с ключом защиты от нежелательного отслеживания.
- Хэшированный временный идентификационный ключ соответствует текущему временному идентификационному ключу.
Если поставщик услуг не зарегистрирован как маяк FHN или проверка не удалась, поставщик возвращает ошибку "неаутентифицирован".
При отключении режима защиты от нежелательного отслеживания маяк должен снова начать ротацию MAC-адреса с нормальной скоростью, синхронизированной с ротацией временного идентификатора. Тип кадра должен быть возвращен к значению 0x40. Состояние также отражается в разделе хешированных флагов .
В случае успеха Поставщик отправляет ответ из таблицы 6 с идентификатором данных 0x07 или 0x08.
Сегмент аутентификации определяется как первые 8 байтов HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) .
Точный поиск
В этом разделе подробно описан процесс и дополнительные операции, необходимые для точного определения параметров. Здесь применяются те же правила для характеристик ГАТТ и аутентификации, что и в разделе спецификации ГАТТ. Точное определение параметров является необязательным.
Тип точного определения местоположения зависит от типа технологий измерения расстояния, поддерживаемых устройствами, выполняющими эту задачу. Поддерживаемые технологии измерения расстояния можно найти в спецификации «Измерение расстояния: внеполосная последовательность сообщений и полезная нагрузка» . В последующих разделах рассматривается, какой уровень точности измерения местоположения можно ожидать в зависимости от используемой технологии измерения расстояния.
Поток точного поиска
В этом разделе рассматривается поток сообщений FHNA для функции точного поиска. На рисунке 1 показан поток сообщений, а в абзацах более подробно объясняется каждое сообщение.

Рис. 1. Типичный поток сообщений при определении точности.
Инициатором выступает устройство, на котором установлено приложение Find Hub и с которого была активирована функция точного поиска. Инициатор — это устройство, которое пытается найти другое устройство.
Устройство-ответчик — это устройство, которое пытается обнаружить устройство-инициатор.
Устройство-инициатор отправляет устройству-ответчику сообщение с запросом на определение возможностей измерения расстояния, в котором оно перечисляет технологии измерения расстояния, о которых хочет получить информацию от устройства-ответчика. Устройство-ответчик отвечает уведомлением с ответом на запрос о возможности измерения расстояния, содержащим информацию о поддерживаемых технологиях измерения расстояния и их возможностях. Устройство-ответчик включает только запрошенную инициатором информацию. Список возможностей сортируется в зависимости от приоритета технологии измерения расстояния, которую предпочитает устройство-ответчик, при этом первая технология в списке имеет наивысший приоритет.
Затем устройство-инициатор отправит сообщение с конфигурацией определения расстояния, в котором укажет конфигурацию для каждой технологии определения расстояния, которую оно хочет использовать. После получения этого сообщения устройство-ответчик должно начать определение расстояния для соответствующих технологий, используя предоставленные конфигурации. Устройство-ответчик отправит обратно уведомление с конфигурацией определения расстояния, содержащее результаты успешного запуска каждой отдельной технологии определения расстояния. Для успешного сеанса определения расстояния некоторые технологии должны быть запущены как на устройстве-инициаторе, так и на устройстве-ответчике, в то время как для других достаточно запустить их только на устройстве-инициаторе; тем не менее, устройство-ответчик должно ответить с подтверждением успешного запуска таких технологий. Более подробная информация о поведении конкретных технологий определения расстояния приведена в последующих разделах.
Как только устройство-инициатор будет готово завершить сеанс точного поиска, оно отправит ответчику сообщение «Остановить измерение», указывающее, какие технологии измерения необходимо остановить. Ответчик ответит уведомлением «Остановить измерение», подтверждающим успешное завершение измерения с использованием запрошенных технологий.
В случае разрыва соединения канала связи FHNA BLE GATT в середине сеанса точного определения местоположения, но при этом некоторые из технологий измерения расстояния продолжают работу, устройство-ответчик реализует механизм тайм-аута, чтобы гарантировать, что измерение расстояния не будет продолжаться бесконечно. Подробности будут зависеть от конкретного случая использования.
Обратите внимание, что устройство-ответчик не должно предполагать, что порядок операций всегда будет одинаковым. Например, устройство-ответчик должно быть способно обрабатывать несколько запросов на определение дальности подряд или даже прямую операцию настройки дальности без предварительного запроса на определение возможности.
Операции точного поиска
В таблице 8 показаны операции FHNA, определенные в данном документе и необходимые для точного определения местоположения. В каждом подразделе определяется сообщение FHNA для каждой из операций, а содержимое поля «Дополнительные данные» относится к разделу «Определение расстояния: последовательность внеполосных сообщений и спецификация полезной нагрузки» .
| Операция | Идентификатор данных | Описание |
|---|---|---|
| Запрос на определение дальности действия | 0x0A | Операция запроса возможностей, которая будет отправлена устройством-инициатором устройству-ответчику. Содержимое этой операции будет содержать список всех технологий измерения расстояния, о которых инициатор хочет получить информацию от устройства-ответчика. |
| Реагирование на изменение дальности действия | 0x0A | Это ответ на уведомление об операции запроса на определение дальности. Он содержит информацию о возможностях каждой поддерживаемой технологии определения дальности, запрошенной инициатором. |
| Конфигурация диапазона | 0x0B | Операция «Настройка определения дальности» содержит параметры для технологий определения дальности, которые устройство-инициатор хочет использовать для определения дальности с помощью устройства-ответчика. |
| Ответ на запрос конфигурации диапазона | 0x0B | Это ответ на уведомление о выполнении операции настройки определения расстояния. Он содержит данные о том, успешно ли устройство-ответчик начало определение расстояния с использованием запрошенных технологий на основе предоставленной конфигурации. |
| РФУ | 0x0C | Операция с этим идентификатором данных не используется и зарезервирована для будущего использования. |
| Остановить диапазон | 0x0D | Операция Stop Ranging, отправляемая устройством-инициатором, содержит информацию о том, с помощью каких технологий измерения расстояния устройство-ответчик должно прекратить измерение. |
| Остановить ответ на запрос определения расстояния | 0x0D | Это ответ на уведомление об операции остановки измерения расстояния. Он содержит информацию о том, была ли операция остановки для конкретной технологии измерения расстояния успешной или нет. |
Таблица 8: Операции точного поиска.
Операция запроса на определение дальности действия
В таблице 9 дано определение сообщения запроса на определение дальности.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных | 0x0A - Операция запроса на определение дальности действия |
| 1 | uint8 | Длина данных | варьируется |
| 2 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256 (ключ учетной записи, основной номер версии протокола || последний одноразовый код, считанный из характеристики || идентификатор данных || длина данных || дополнительные данные). |
| 10 | массив байтов | Дополнительные данные | Сообщение запроса на определение дальности , как определено в спецификации последовательности сообщений и полезной нагрузки (как заголовка, так и полезной нагрузки) для определения дальности. |
Таблица 9: Запрос на определение дальности.
Операция по реагированию на чрезвычайные ситуации в области определения дальности
В таблице 10 дано определение сообщения ответа о возможностях определения дальности.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных | 0x0A: Ответ службы определения дальности |
| 1 | uint8 | Длина данных | варьируется |
| 2 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256 (ключ учетной записи, основной номер версии протокола || последний nonce, считанный из характеристики || идентификатор данных || длина данных || дополнительные данные || 0x01). |
| 10 | массив байтов | Дополнительные данные | Сообщение Ranging Capability Response, как определено в спецификации последовательности внеполосных сообщений и полезной нагрузки (как заголовка, так и полезной нагрузки) для определения дальности. |
Таблица 10: Ответные меры по определению дальности.
Операция настройки диапазона
В таблице 11 дано определение сообщения конфигурации диапазона.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных | 0x0B - Установка параметров диапазона |
| 1 | uint8 | Длина данных | варьируется |
| 2 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256 (ключ учетной записи, основной номер версии протокола || последний одноразовый код, считанный из характеристики || идентификатор данных || длина данных || дополнительные данные). |
| 10 | массив байтов | Дополнительные данные | Сообщение конфигурации определения дальности , как определено в разделе «Последовательность сообщений внеполосного режима определения дальности и спецификация полезной нагрузки (как заголовка, так и полезной нагрузки)». |
Таблица 11: Конфигурация определения дальности.
Операция ответа конфигурации диапазона
В таблице 12 дано определение сообщения ответа на запрос конфигурации диапазона.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных | 0x0B - Ответ на запрос о настройке диапазона |
| 1 | uint8 | Длина данных | варьируется |
| 2 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256 (ключ учетной записи, основной номер версии протокола || последний nonce, считанный из характеристики || идентификатор данных || длина данных || дополнительные данные || 0x01). |
| 10 | массив байтов | Дополнительные данные | Сообщение ответа на запрос конфигурации определения дальности, как определено в спецификации последовательности внеполосных сообщений и полезной нагрузки (как заголовка, так и полезной нагрузки) для определения дальности. |
Таблица 12: Ответ на запрос конфигурации определения дальности.
Остановить операцию определения дальности
В таблице 13 дано определение сообщения "Остановить определение диапазона".
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных | 0x0D - Остановка измерения диапазона |
| 1 | uint8 | Длина данных | варьируется |
| 2 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256 (ключ учетной записи, основной номер версии протокола || последний одноразовый код, считанный из характеристики || идентификатор данных || длина данных). |
| 10 | массив байтов | Дополнительные данные | Сообщение " Остановить определение дальности" определяется в соответствии со спецификацией последовательности сообщений "Определение дальности: внеполосное сообщение" и полезной нагрузки (как заголовка, так и полезной нагрузки). |
Таблица 13: Остановка диапазона.
Остановить операцию ответа на запрос определения дальности
В таблице 14 дано определение сообщения «Остановить определение дальности».
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Идентификатор данных | 0x0D - Ответ на остановку измерения дальности |
| 1 | uint8 | Длина данных | варьируется |
| 2 | массив байтов | Одноразовый ключ аутентификации | Первые 8 байт HMAC-SHA256 (ключ учетной записи, основной номер версии протокола || последний nonce, считанный из характеристики || идентификатор данных || длина данных || дополнительные данные || 0x01). |
| 10 | массив байтов | Дополнительные данные | Сообщение Stop Ranging Response, как определено в спецификации последовательности сообщений и полезной нагрузки (как заголовка, так и полезной нагрузки) для определения дальности. |
Таблица 14: Ответ на вопрос «Остановить определение диапазона».
Защита от нежелательного отслеживания с помощью функции точного поиска.
При активации режима защиты от нежелательного отслеживания, как описано в разделе о защите от нежелательного отслеживания, тот же алгоритм, который применяется для пропуска проверок аутентификации для сообщений о звонках, также применяется ко всем сообщениям точного поиска, определенным в этом документе, для устройств, которые хотят поддерживать эту функцию.
Технические характеристики дальномерных технологий для точного поиска.
В этом разделе содержится информация, специфичная для конкретной технологии.
Характеристики сверхширокополосной связи (UWB)
Подробная информация о технологии UWB.
Уровень точности поиска
В сеансах точного определения расстояния с использованием технологии UWB можно получить информацию как о расстоянии, так и о направлении. Интервал измерения расстояния должен составлять не менее 240 мс, а для оптимального наведения предпочтительно 96 мс.
Идентификаторы конфигурации
Внеполосные конфигурационные данные, передаваемые для UWB, не содержат полного набора доступных настраиваемых параметров, необходимых для начала сеанса измерения расстояния UWB. Некоторые параметры выбираются неявно на основе выбранного идентификатора конфигурации.
Each config Id is a set of predefined UWB configuration parameters that is publicly documented . For the Precision Finding use case, the responder device must support config Id 6 , and optionally config Id 3 .
UWB Initiator and Responder
For the Precision Finding use case, the device noted as the Initiator device in this document will be the UWB responder, and the device noted as the Responder device in this document will be the UWB initiator. This is because the UWB initiator device consumes less power than UWB responder does, and in most cases the Responder device will be a peripheral with limited battery.
This means that the Responder device needs to indicate that it supports being a UWB initiator role in the Ranging Capability Response message.
Other UWB related parameters
- Channel 9 must be supported
- For optimal guidance, a 96ms ranging interval is recommended, otherwise 240ms must be supported.
- Slot duration of 1ms is recommended for battery savings, but 2ms is also supported.
- The UWB chip must be at least FIRA v1.2 + P-STS compliant.
- BPRF is mandatory, HPRF is recommended but optional. The supported or selected mode is determined by the supported or selected preamble index.
- Session security type: P-STS
BLE Channel Sounding (CS) specifics
BLE CS specific details.
Precision Finding level
Precision Finding sessions using CS as the ranging technology will cause distance only measurements, directionality is not provided at this moment.
Required bond between devices
Precision Finding sessions using Channel Sounding won't work if devices are not bonded. An existing bond between the initiator and the responder device is required. This specification does not provide a way for creating a bond between the devices. Instead, it is up to the developer of the use case to establish this bond between the devices.
Action required by the responder side for CS
Unlike UWB, where both devices are required to call the UWB start ranging and stop ranging API explicitly, for CS, only the initiator device is required to start CS ranging by calling the Bluetooth stack, the rest of the initialization on the responder side happens in-band using Bluetooth (BT). This means that upon receiving the Ranging Configuration message or the Stop Ranging message for CS, the responder side doesn't have to do anything if BT is enabled, other than reply with the Ranging Configuration Response message notification. The responder device could potentially use those messages as a trigger to update the UI where a screen is present, or regardless of having a screen it could be used for visual feedback on the devices state, for example blink the device LEDs.
Wi-Fi NAN RTT
Wi-Fi NAN RTT specific details.
Precision Finding level
Precision Finding sessions using Wi-Fi NAN RTT as the ranging technology will cause distance only measurements, directionality is not provided at this moment.
BLE RSSI
BLE RSSI specific details.
Precision Finding level
Precision Finding sessions using only BLE RSSI as the ranging technology won't be able to get either the distance or the direction information, due to BLE RSSI not being an accurate ranging technology. Instead, the user will see guidance indicating that device is close or device is far.
Advertised frames
After provisioning, the Provider is expected to advertise FHN frames at least once every 2 seconds. If Fast Pair frames are advertised, the Provider should interleave the FHN frames within the regular Fast Pair advertisements. For example, every two seconds, the Provider should advertise seven Fast Pair advertisements and one FHN advertisement.
The conducted Bluetooth transmit power for FHN advertisements should be set to at least 0 dBm.
The FHN frame carries a public key used to encrypt location reports by any supporting client that contributes to the crowdsourcing network. Two types of elliptic curve keys are available: a 160-bit key that fits legacy BLE 4 frames, or 256-bit key that requires BLE 5 with extended advertising capabilities. The Provider's implementation determines which curve is used.
An FHN frame is structured as follows.
| Октет | Ценить | Описание |
|---|---|---|
| 0 | 0x02 | Длина |
| 1 | 0x01 | Flags data type value |
| 2 | 0x06 | Flags data |
| 3 | 0x18 or 0x19 | Длина |
| 4 | 0x16 | Service data data type value |
| 5 | 0xAA | 16-bit service UUID |
| 6 | 0xFE | ... |
| 7 | 0x40 or 0x41 | FHN frame type with unwanted tracking protection mode indication |
| 8..27 | 20-byte ephemeral identifier | |
| 28 | Hashed flags |
Table 15: FHN frame supporting a 160-bit curve.
Table 16 shows the byte offsets and values for a 256-bit curve.
| Октет | Ценить | Описание |
|---|---|---|
| 0 | 0x02 | Длина |
| 1 | 0x01 | Flags data type value |
| 2 | 0x06 | Flags data |
| 3 | 0x24 or 0x25 | Длина |
| 4 | 0x16 | Service data data type value |
| 5 | 0xAA | 16-bit service UUID |
| 6 | 0xFE | ... |
| 7 | 0x40 or 0x41 | FHN frame type with unwanted tracking protection mode indication |
| 8..39 | 32-byte ephemeral identifier | |
| 40 | Hashed flags |
Table 16: FHN frame supporting a 256-bit curve.
Ephemeral identifier (EID) computation
A random is generated by AES-ECB-256 encrypting the following data structure with the ephemeral identity key:
| Октет | Поле | Описание |
|---|---|---|
| 0 - 10 | Набивка | Value = 0xFF |
| 11 | К | Rotation period exponent |
| 12 - 15 | TS[0]...TS[3] | Beacon time counter, in 32-bit big-endian format. The K lowest bits are cleared. |
| 16 - 26 | Набивка | Value = 0x00 |
| 27 | К | Rotation period exponent |
| 28 - 31 | TS[0]...TS[3] | Beacon time counter, in 32-bit big-endian format. The K lowest bits are cleared. |
Table 17: Construction of a pseudorandom number.
The result of this computation is a 256-bit number, denoted r' .
For the rest of the calculation, SECP160R1 or SECP256R1 are used for elliptic curve cryptographic operations. See curve definitions in SEC 2: Recommended Elliptic Curve Domain Parameters , which defines Fp , n and G referenced next.
r' is now projected to the finite field Fp by calculating r = r' mod n . Finally, compute R = r * G , which is a point on the curve representing the public key being used. The beacon advertises Rx , which is the x coordinate of R , as its ephemeral identifier.
Hashed flags
The hashed flags field is calculated as follows (bits are referenced from most significant to least significant):
- Bits 0-4: Reserved (set to zeros).
- Bits 5-6 indicates the battery level for the device as follows:
- 00: Battery level indication unsupported
- 01: Normal battery level
- 10: Low battery level
- 11: Critically low battery level (battery replacement needed soon)
- Bit 7 is set to 1 if the beacon is in unwanted tracking protection mode, and 0 otherwise.
To produce the final value of this byte, it is xor-ed with the least significant byte of SHA256(r) .
Note that r should be aligned to the curve's size. Add zeros as most significant bits if its representation is shorter than 160 or 256 bits, or the most significant bits should be truncated if its representation is larger than 160 or 256 bits.
If the beacon doesn't support battery level indication, and isn't in unwanted tracking protection mode, it's allowed to omit this byte entirely from the advertisement.
Encryption with EID
To encrypt a message m , a sighter (having read Rx from the beacon) would do the following:
- Choose a random number
sinFp, as defined in the EID computation section. - Compute
S = s * G. - Compute
R = (Rx, Ry)by substitution in the curve equation and picking an arbitraryRyvalue out of the possible results. - Compute the 256-bit AES key
k = HKDF-SHA256((s * R)x)where(s * R)xis thexcoordinate of the curve multiplication result. Salt isn't specified. - Let
URxandLRxbe the upper and lower 80-bits ofRx, respectively, in big-endian format. In a similar way, defineUSxandLSxforS. - Compute
nonce = LRx || LSx. - Compute
(m', tag) = AES-EAX-256-ENC(k, nonce, m). - Send
(URx, Sx, m', tag)to the owner, possibly through an untrusted remote service.
Decryption of values encrypted with EID
The owner's client, which is in possession of the EIK and the rotation period exponent, decrypts the message as follows:
- Given
URx, obtain the beacon time counter value on whichURxis based. This can be done by the owner's client computingRxvalues for beacon time counter values for the recent past and near future. - Given the beacon time counter value on which
URxis based, compute the anticipated value ofras defined in the EID computation section. - Compute
R = r * G, and verify a match to the value ofURxprovided by the sighter. - Compute
S = (Sx, Sy)by substitution in the curve equation and picking an arbitrarySyvalue out of the possible results. - Compute
k = HKDF-SHA256((r * S)x)where(r * S)xis thexcoordinate of the curve multiplication result. - Compute
nonce = LRx || LSx. - Compute
m = AES-EAX-256-DEC(k, nonce, m', tag).
ID rotation
A resolvable (RPA) or non-resolvable (NRPA) BLE address must be used for advertising FHN frames. RPA is required for LE Audio (LEA) devices and is recommended for other devices, with the exception of locator tags that don't use bonding.
Fast Pair advertisement, FHN advertisement and the corresponding BLE address(es) should rotate at the same time. Rotation should happen every 1024 seconds on average. The precise point at which the beacon starts advertising the new identifier must be randomized within the window.
The recommended approach to randomize the rotation time is to set it to the next anticipated rotation time (if no randomization was applied) plus a positive randomized time factor in the range of 1 to 204 seconds.
When the device is in unwanted tracking protection mode, the BLE address of the FHN advertisement should be fixed, but the RPA for FP non-discoverable advertisement (such as Fast Pair) must keep rotating. It's acceptable to use different addresses for the different protocols.
Recovery from power loss
Resolving the ephemeral identifier is strongly tied to its clock value at the time of the advertisement, so it's important that the Provider can recover its clock value if there's a power loss. It is recommend that the Provider writes its current clock value to nonvolatile memory at least once per day, and that at boot time the Provider checks the NVM to see if there's a value present from which to initialize. Resolvers of the ephemeral identifier would implement resolution over a time window sufficient to allow for both reasonable clock drift and this type of power loss recovery.
Providers should still make all efforts to minimize clock drifts, as the resolution time window is limited. At least one additional clock synchronization method should be implemented (advertising non-discoverable Fast Pair frames or implementing the message stream ).
Fast Pair implementation guidelines
This section describes special aspects of the Fast Pair implementation on Providers that support FHN.
Locator tag specific guidelines
- If the Provider was paired, but FHN wasn't provisioned within 5 minutes (or if an OTA update was applied while the device is paired but not FHN-provisioned), the Provider should revert to its factory configuration and clear the stored account keys.
- After the Provider is paired, it shouldn't change its MAC address until FHN is provisioned or until 5 minutes pass.
- If the ephemeral identity key is cleared from the device, the device should perform a factory reset and clear the stored account keys as well.
- The Provider should reject normal Bluetooth pairing attempts and accept only Fast Pair pairing.
- The Provider must include a mechanism that lets users temporarily stop advertising without factory resetting the device (for example, pressing a combination of buttons).
- After a power loss, the device should advertise non-discoverable Fast Pair frames until the next invocation of read beacon parameters . This lets the Seeker detect the device and synchronize the clock even if a significant clock drift occurred.
- When advertising non-discoverable Fast Pair frames, UI indications shouldn't be enabled.
- Discoverable Fast Pair frames shouldn't be advertised while the Provider is provisioned for FHN.
- The Provider shouldn't expose any identifying information information in an unauthenticated manner (eg names or identifiers).
Classic Bluetooth device-specific guidelines
This section describes special aspects of classic Bluetooth devices that support FHN.
FHN provisioning of already paired devices
The Provider isn't always provisioned for FHN when pairing with the Seeker, but a while after that. In that case, the Provider might not have an up-to-date BLE MAC address that's required to establish a GATT connection. The Provider must support at least one of the following ways for the Seeker to get its BLE address while it's already paired:
- The Provider can periodically advertise the Fast Pair account data that lets the Seeker find its BLE address through a BLE scan.
This approach suits Providers that don't implement the message stream. - The Provider can provide this data through the Fast Pair message stream over classic Bluetooth.
This approach suits Providers that don't advertise Fast Pair frames while connected to the Seeker over Bluetooth.
Supporting both approaches increases the chances that the user can provision the device for FHN.
Fast Pair message stream
The Provider can implement Fast Pair message stream and use it to notify the Seeker about Device information . Implementing the message stream enables certain features as described in this section.
The Provider should send device information messages once every time the message stream RFCOMM channel is established.
Firmware version (device information code 0x09) and the tracking capability
When a firmware update adds FHN support to the Provider, a connected Seeker can notify the user about that and offer to provision it. Otherwise, the user has to navigate to the Bluetooth device list manually to initiate FHN provisioning.
To allow that, the Provider should use the Firmware version property (code 0x09) to report a string value that represents the firmware version. In addition, the Provider should support the protocol that lets the Seeker know about Capability changes due to firmware updates.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Device information event | 0x03 |
| 1 | uint8 | Версия прошивки | 0x09 |
| 2 - 3 | uint16 | Additional data length | варьируется |
| вар | byte array | Version string | варьируется |
Table 18: Device information event: updated firmware version.
Upon receiving a capability update request (0x0601), if the Provider has enabled support for FHN tracking, it should respond as shown in table 12.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Device capability sync event | 0x06 |
| 1 | uint8 | FHN tracking | 0x03 |
| 2 - 3 | uint16 | Additional data length | 0x0007 |
| 4 | uint8 | FHN provisioning state | 0x00 if unprovisioned; 0x01 if provisioned by any account |
| 5 - 10 | byte array | The current BLE MAC address of the device | варьируется |
Table 19: Device capability sync event: added tracking capability.
Current ephemeral identifier (device information code 0x0B)
The Provider can use the current ephemeral identifier (code 0x0B) to report the current EID and clock value when the Provider is provisioned for FHN, to sync the Seeker in case of a clock drift (for example, due to drained battery). Otherwise, the Seeker initiates a more expensive and less reliable connection for this purpose.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Device information event | 0x03 |
| 1 | uint8 | Current ephemeral identifier | 0x0B |
| 2 - 3 | uint16 | Additional data length | 0x0018 or 0x0024 |
| 4 - 7 | byte array | Clock value | Example: 0x13F9EA80 |
| 8 - 19 or 31 | byte array | Current EID | Example: 0x1122334455667788990011223344556677889900 |
Table 20: Device information event: clock sync.
Сброс к заводским настройкам
For devices that support factory reset: if a factory reset is performed, the Provider must stop beaconing and wipe out the ephemeral identity key and all stored account keys, including the owner's account key.
After a factory reset (either manual or programmatic), the Provider shouldn't start advertising Fast Pair right away, to prevent the pairing flow to start immediately after the user deletes the device.
Unwanted tracking prevention
Certified FHN devices must also meet the requirements in the implementation version of the cross-platform specification for Detecting Unwanted Location Trackers (DULT).
Relevant guidelines specific to FHN to be compliant with DULT spec:
- Any FHN compatible device must be registered in the Nearby Device Console, and have the "Find Hub" capability activated.
- The device must implement the Accessory Non-Owner service and characteristic defined in the implementation version of the DULT spec, including the Accessory Information operations and Non-owner controls .
- During the backward compatibility period, as defined in the DULT spec, there are no changes to the advertised frame as defined in this document.
- "Unwanted tracking protection mode" defined in this document maps to the "separated state" defined by the DULT spec.
- Guidelines for implementing the Accessory Information opcodes:
- Get_Product_Data should return the model ID provided by the console, zero padded to fit the 8-byte requirement. For example, model ID 0xFFFFFF is returned as 0x0000000000FFFFFF.
- Get_Manufacturer_Name and Get_Model_Name should match the values provided in the console.
- Get_Accessory_Category can return the generic "Location Tracker" value if no other category better fits the type of the device.
- Get_Accessory_Capabilities must indicate the support for ringing as well as BLE identifier lookup.
- Get_Network_ID should return Google's identifier (0x02).
- Guidelines for implementing the Get_Identifier opcode:
- The operation should only return a valid response for 5 minutes after the user activated the 'identification' mode, which requires a combination of button presses. A visual or audio signal should indicate to the user that the provider entered that mode. The model-specific instructions for activating that mode must be provided to Google as a requirement for certification and at least 10 days prior to any update or modification to the instructions.
- The response is constructed as: the first 10 bytes of current ephemeral identifier, followed by the first 8 bytes of
HMAC-SHA256(recovery key, the truncated current ephemeral identifier).
- Guidelines for implementing Identifier over NFC:
- As a URL, use
find-my.googleapis.com/lookup. - As the
eparameter, use the same response as constructed for Get_Identifier , hex encoded. - As the
pidparameter, use the same response as constructed for Get_Product_Data , hex encoded.
- As a URL, use
- It is mandatory for the device to include a sound maker and support the ringing function. Per the DULT spec, the sound maker must emit a sound with minimum 60 Phon peak loudness as defined by ISO 532-1:2017.
- Guidelines for implementing the Sound_Start opcode:
- The command should trigger ringing in all available components.
- The maximal supported volume should be used.
- The recommended duration for ringing is 12 seconds.
- Locator tags must include a mechanism that lets users temporarily stop advertising without factory resetting the device (for example, pressing a combination of buttons).
- The disablement instructions must be documented in a publicly available URL and provided to Google as a requirement for certification and at least 10 days prior to any update or modification to the instructions.
- The URL should support localization. Depending on the client, the language will be provided either as a query param ("hl=en") or using the "accept-language" HTTP header.
Switchable protocol guidelines
- Only one protocol should be used at a time. Ensure that no more than one network can operate on the device simultaneously. This requirement is needed to ensure that there is no commingling of sensitive user data between varying protocols.
- It is suggested to incorporate a hard reset workflow into the device that allows a user to re-setup a device with a different network.
- The process of updating a device to a network should be user friendly and equitable between networks. A user must be able to choose which network they want to use without giving preference to one of the networks. This flow needs to be approved by the Google team.
Обновления прошивки
The process and distribution of OTA updates should be managed by the partner using their own Mobile or Web app workflow.
Fast Pair supports delivering notifications to the user, informing of available OTA updates. In order to use this mechanism:
- The latest firmware version should be updated in the Nearby Device Console.
- A companion App should be set in the Nearby Device Console. It should support the firmware update intent .
- Provider should implement the Firmware revision GATT characteristic.
To prevent tracking, access to the Firmware revision characteristic should be restricted. Seeker will first read the provisioning state and provide an authentication key, as defined in this specification, and only then read the firmware revision. This will be done over the same connection. If an attempt is made to read the firmware revision, and the Provider isn't bonded nor an authenticated operation was successfully completed over that same connection, the Provider should return an unauthenticated error.
Совместимость
Find Hub network requires location services and Bluetooth to be turned on. Requires cell service or internet connection. Works on Android 9+ and in certain countries for age-eligible users.
Список изменений
| FHN Version | Дата | Комментарий |
|---|---|---|
| v1 | Initial release of the FHN spec for early access. | |
| v1.1 | Февраль 2023 г. |
|
| v1.2 | Апрель 2023 г. |
|
| v1.3 | Декабрь 2023 г. |
|