Как проверить, предоставлены ли / заблокированы ли разрешения дополненной реальности в мобильном браузере Chrome?

Проблема:

WebXR в браузере Chrome требует явного согласия (разрешений) пользователя для пространственного отслеживания, но у нас возникают проблемы с пользователями, которые его блокируют. Поэтому, чтобы предоставить пользователям с этой проблемой соответствующий UX (в отличие от других ошибок, которые могут возникнуть), нам нужно проверить, были ли предоставлены разрешения (дополненная реальность) в Chrome или нет, как показано на изображении ниже:

дополненная реальность заблокирована img

Что я пробовал:

Хотя имя дескриптора разрешений 'xr' не указано в реестре разрешений, оно описано в Спецификация API устройства WebXR 14.2. Однако следующий код возвращает ошибку.

navigator.permissions.query({name: 'xr'});

Ошибка (я предполагаю, что это ожидаемо, поскольку ее нет в реестре разрешений, я просто подумал, что, возможно, Chrome как-то расширил ее):

TypeError: Failed to execute 'query' on 'Permissions': The provided value 'xr' is not a valid enum value of type PermissionName.

Я также пробовал immersive-ar, xr-space-tracking и т. Д., Но безуспешно. «Xr-space-tracking» - это политика функций, но, если я правильно понимаю, цель политики функций - не предоставлять разрешения, а скорее ограничивать разрешения определенных элементов на вашей странице (например, фреймов).

WebXR также использует камеру и, скорее всего, гироскоп и акселерометр, но разрешения для них не зависят от разрешенной / заблокированной дополненной реальности. Я думаю, это связано с тем, что часть камеры / отслеживания работает изначально на устройстве, а не в браузере (я могу ошибаться).

Пример:

Вы можете посетить этот пример three.js с мобильным устройством в браузере Chrome, чтобы увидеть разрешенное / заблокированное разрешение дополненной реальности под кнопкой блокировки рядом с URL-адресом.

Как я могу проверить, были ли эти разрешения предоставлены или заблокированы? Я не спрашиваю, как побудить пользователя запросить разрешение, просто значение статуса разрешения только для чтения было бы идеально.

Спасибо!


person Erich Loob    schedule 11.11.2020    source источник


Ответы (1)


Лучшее, что вы можете сделать прямо сейчас, - это запросить пространственное отслеживание во время жеста пользователя и отобразить пользовательский интерфейс, если обещание отклонено.

Вы можете увидеть набор имен разрешений, которые поддерживает Chrome, прочитав ParsePermissionDescriptor в исходном коде Chromium. Он не поддерживает xr. Я подал эту ошибку Chromium, чтобы добавить ее, и эту проблему с тестами веб-платформы, чтобы добавить его в набор тестов W3C для WebXR.

Вот список того, что Chrome поддерживает в этом API. Некоторые из них могут быть экспериментальными.

  • акселерометр
  • доступность-события
  • датчик освещенности
  • фоновая выборка
  • фоновая синхронизация
  • камера
  • чтение из буфера обмена
  • запись в буфер обмена
  • дисплей-захват
  • доступ к шрифту
  • геолокация
  • гироскоп
  • обнаружение холостого хода
  • магнитометр
  • микрофон
  • миди
  • NFC
  • уведомления
  • обработчик платежей
  • периодическая фоновая синхронизация
  • постоянного хранения
  • push (только с {userVisible: true})
  • экран-пробуждение-блокировка
  • доступ к хранилищу
  • система-пробуждение-блокировка
  • размещение окон
person Dominic Cooney    schedule 18.01.2021