Creé un código javascript de geolocalización que detecta la ubicación del usuario en función de la variable del navegador.
La verificación de ubicación se realiza en función de los permisos que tiene actualmente el usuario.
Compruebo navigator.permissions.query({name: 'geolocation'}) y, en función de los resultados granted|prompt|denied , realizo una consulta navigator.geolocation.getCurrentPosition o una solicitud de API alternativa.
Mi problema aquí es que en los dispositivos IOS, navegador Safari, los navigator.permissions no están definidos.
Si realizo una consulta directa navigator.geolocation.getCurrentPosition , entonces siempre se abre el mensaje "permitir ubicación en el dispositivo", que es algo que no quiero.
Solo si el usuario ya ha permitido el uso de ubicación y el estado es granted realizaré una consulta de posición.
En caso de que el permiso esté en estado denied , hay un botón "Permitir ubicación" que, al hacer clic, aparecerá el aviso del navegador.
Funciona perfectamente en dispositivos de escritorio/Android, pero en IOS no podemos usar la variable navigator.permissions y no queremos que a nuestros usuarios se les solicite "permitir ubicación" en la entrada del sitio web.
Parte del código de referencia:
if (navigator.permissions) { permissionsIsActive = true; } ...... if (permissionsIsActive){ makePermissionsQuery(); }else{ makePositionQuery(); } ...... var makePositionQuery = function () { navigator.geolocation.getCurrentPosition(function (devicePos) { isAccurate = true; position = { lat: parseFloat(devicePos.coords.latitude), lng: parseFloat(devicePos.coords.longitude) } //inject granted status as this is an if dependent variable //so we make sure its in place for the prompt statement permissionsStatus = 'granted'; isFinished = true; },function () { handleGeoError(); }); } ...... var makePermissionsQuery = function() { navigator.permissions.query({name: 'geolocation'}).then(function (result) { permissionsStatus = result.state; switch (result.state) { case "granted": makePositionQuery(); break; case "prompt": handleGeoError(); break; case "denied": handleGeoError(); break; } }); }Entonces mi pregunta es, ¿cómo podemos detectar el estado de permisos en un dispositivo IOS, safari?
No estoy seguro de si me equivoqué o me perdí algo, ¡pero cualquier consejo sería útil!