Вращение deviceMotionRate равно нулю iOS 13,4 - PullRequest
1 голос
/ 21 апреля 2020

Я использую событие devicemotion для доступа к гироскопу в Safari с iOS 11.

История:

  • Вкл. iOS 11/12, доступ к гироскопу открыт и просто необходим чтобы прослушать событие устройства.
  • Начиная с iOS 12.2, Apple заблокировала доступ к гироскопу, и вам нужно активировать опцию в настройках сафари
  • После iOS 13 Apple реализовала " DeviceOrientationEvent.requestPermission "запрашивать доступ к гироскопу, и когда пользователь соглашается, у события devicemotion есть ключ" translationRate "со значениями альфа / бета / гамма (до согласования значение равно нулю).

Проблема:

Вкл. iOS 13.4 без изменения кода на моей стороне и во всех моих проектах, использующих эту функцию ,rationRate всегда равен нулю, даже если пользователь согласен с доступом к гироскопу.

Я искал официальный ответ от Apple, но ничего не нашел. Это похоже на ошибку, но, возможно, реализация на моей стороне не так?

Полезно знать о моем коде:

Во-первых, я прослушиваю событие движения устройства (с нулевым поворотом), когда интерфейс готов, пользователь нажимает на кнопку, запрашивается доступ к гироскопу, и у вращения есть значения.

Есть идеи?

1 Ответ

0 голосов
/ 27 апреля 2020

Это похоже на ошибку в iOS 13.4, потому что даже polyfill *1001* не может определить, какие возможности есть у устройства, потому что они имеют (строка 3770):

if (this.isWithoutDeviceMotion) {
  window.addEventListener('deviceorientation', this.onDeviceOrientationCallback_);
} else {
  window.addEventListener('devicemotion', this.onDeviceMotionCallback_);
}

условие оценивается как ложное, поэтому используется devicemotion, и тогда оба значения rotationRate и accelerationIncludingGravity равны нулю.

Поэтому я думаю, что обходной путь теперь состоит в прослушивании события deviceorientation вместо devicemotion, даже если заранее были запрошены разрешения , что в любом случае является обязательным.

...