Entonces, estoy creando una aplicación web usando JavaScript y en mi teléfono, la llamada a la API de Permisos que hago dice que tengo "concedido" acceso a mi giroscopio, pero cuando trato de llamar al new Gyroscope({frequency: 60}) atrapo un error que dice que mi navegador no lo admite. Estoy ejecutando mi código a través de una configuración de nodejs usando vite para servir mi contenido.
navigator.permissions.query({ name: 'gyroscope' }) .then(result => { if(result.state === 'granted') { // <-- this returns true try { this.gyroscope = new Gyroscope({frequency: 60}); this.gyroscope.addEventListener('reading', e => { console.log(e); }); this.gyroscope.start(); } catch(error) { // Handle construction errors. if (error.name === 'SecurityError') { // See the note above about feature policy. alert('Sensor construction was blocked by a feature policy.'); } else if (error.name === 'ReferenceError') { alert('Sensor is not supported by the User Agent.'); } else { alert(error); } } } else { alert('No gyroscope or denied, computer assumed, falling back to keyboard.'); // fallback setup here } }); El error que se desencadena es que este Sensor is not supported by the User Agent.
Decidí investigar más y me topé con este repositorio lleno de pruebas de sensores: https://intel.github.io/generic-sensor-demos/sensor-tester/build/bundled/accelerometer y cuando las ejecuté en mi teléfono, Pasé todas las pruebas.
Entonces, ¿qué me estoy perdiendo aquí sobre el uso de la API del sensor? Traté de mirar el código del repositorio anterior, pero no puedo por mi vida averiguar cómo lo hacen funcionar, cuando no puedo.
Para cualquiera que se encuentre con este problema en el futuro, el problema fue que la API del sensor requiere que SSL funcione para todo . Entonces, para resolver mi problema, seguí adelante y usé mkcert para crear un archivo key.pem y cert.pem válido para usar con la configuración de mi servidor web local.
Esta es también una forma de hacer que SSL funcione para cualquier configuración de desarrollo web localhost donde se necesite SSL.