es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ionic 5 / capacitor @capacitor/motion persist DeviceMotionEvent.requestPermission Ionic 5 / capacitor @capacitor/motion persiste DeviceMotionEvent.requestPermission

Tengo un problema en iOS y Ionic.

Desarrollé una aplicación Ionic y quiero usar el complemento de movimiento. Necesito la dirección del smartphone para mostrar al usuario hacia dónde está mirando.
Logré que esto funcionara cuando creé una alerta, que forzaba un clic y aparecía el mensaje para permitir los permisos de movimiento.
Para eso utilizo la función DeviceMotionEvent.requestPermission().
Pero parece que estos permisos no se guardan. En el siguiente inicio de la aplicación (eliminada de la tarea y reiniciada una nueva instancia), los permisos no están allí y el usuario tiene que concederlos nuevamente.

Entonces, mis preguntas son:

  1. ¿Hay alguna manera de guardar este permiso como todos los demás permisos, como por ejemplo la ubicación?
    Busqué durante todo el día en la web, pero no encontré nada al respecto.

2.

El próximo problema es poder comprobar si el permiso ya ha sido otorgado para poder omitir la alerta molesta y la posterior solicitud.
¿Hay alguna manera de verificar el permiso sin llamar a la función requestPermission()?
Espero que puedas ayudarme aquí.
Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Posible solución

    Desafortunadamente, el complemento de movimiento no tiene una forma de guardar el permiso como otros permisos como la ubicación. Una posible solución para esto es crear una solución alternativa haciendo que el usuario otorgue el permiso solo una vez, y luego guardar la respuesta en almacenamiento local o en una base de datos. Luego, puedes usar esta información guardada para verificar si el usuario ha otorgado el permiso.

    Para verificar si se ha otorgado el permiso, puedes utilizar el método ondevicemotion de DeviceMotionEvent para escuchar los cambios en el movimiento del dispositivo. Si el método se ejecuta sin errores, puedes asumir que se ha otorgado el permiso.

    Aquí tienes un ejemplo de código:

    if (typeof(DeviceMotionEvent) !== 'undefined' && typeof(DeviceMotionEvent.requestPermission) === 'function') {
       DeviceMotionEvent.requestPermission()
          .then(response => {
             if (response === 'granted') {
                window.addEventListener('devicemotion', deviceMotionHandler, false);
             }
          })
          .catch(console.error);
    
    } else {
       // movimiento del dispositivo no disponible
    }
    

    En la función deviceMotionHandler, ahora puedes recuperar los datos del movimiento del dispositivo para determinar la dirección del teléfono inteligente.

    function deviceMotionHandler(eventData) {
       var acceleration = eventData.accelerationIncludingGravity;
       // utilizar los datos de aceleración para determinar la dirección
    }
    

    Espero que esta solución te ayude con tu problema. Si tienes alguna otra pregunta, no dudes en preguntar.

Comments are closed.