Cuando se utiliza la API geolocation.getCurrentPosition en dispositivos móviles, iOS probado en este momento, se solicita a los usuarios más de una vez a través de una sesión según la página. En comparación con un sitio de escritorio, como Chrome en Windows 10, donde una vez que un usuario presiona Allow , ya no se le solicitarán permisos a menos que se deshabilite explícitamente. iOS Safari parece estar basado en sesiones y luego posiblemente basado en páginas dentro de la sesión.
¿Se pregunta si alguien sabe si hay reglas explícitas definidas por Apple para esta verificación de permisos? ¿ maximumAge también juega un papel en la frecuencia con la que se solicita al usuario?
const LOCATION_OPTIONS = { timeout: 15000, enableHighAccuracy: true, maximumAge: 86400000, }; useEffect(() => { const { geolocation } = navigator; // If the geolocation is not defined in the used browser we handle it as an error if (!geolocation) { setError("Geolocation is not supported."); return; } // Call Geolocation API geolocation.getCurrentPosition(handleSuccess, handleError, options); }, [options]); return { location, error };Ejemplo NextJS CodeSandbox https://u11vn.sse.codesandbox.io/
Desafortunadamente, parece que no hay forma de otorgar acceso permanente al sitio web a la privacidad del iPhone, como la ubicación de la cámara, dentro de Safari. pero en el lado del usuario, hay tres opciones ( Ask , Allow , Deny ) que pueden establecer
si usa JavaScript en iOS WKWebView , puede obtener una solución que solicite la ubicación con la API de ubicación de la aplicación
si usa JavaScript en la web, bueno, no puede lograr esto.
En la web, haga lo siguiente / o use el navegador con un cuadro de diálogo emergente
var options = { enableHighAccuracy: true, timeout: 7000, maximumAge: 0 }; function log(data) { const tag = document.createElement('p'); tag.textContent = data; document.body.appendChild(tag); } function success(pos) { var crd = pos.coords; console.log('Successfully determined a user position:', crd); log('Your current position is:'); log(`Latitude : ${crd.latitude}`); log(`Longitude: ${crd.longitude}`); log(`More or less ${crd.accuracy} meters.`); } function error(err) { console.warn(`ERROR(${err.code}): ${err.message}`); } navigator.geolocation.getCurrentPosition(success, error, options);O
$scope.watchId = navigator.geolocation.watchPosition(function (position) { if ($scope.t1 == 0) { $scope.t1 = position.timestamp; } else { if (Math.abs($scope.t1 - position.timestamp) > 5000) { $scope.t1 = position.timestamp; SellerRef.update({ Location: { Lat: position.coords.latitude, Long: position.coords.longitude } }) } } }, function (error) { if (error.code == 1) { $scope.showAlert("An error occured \n" + " Please goto Settings->Privacy->LocationServices and give permission for " + bowser.name + " which is your browser "); } } );Para cargar tu web dentro de una app
webView , simplemente agregue descripciones de permisos de ubicación al archivo info.plist .NSLocationWhenInUseUsageDescription frente NSLocationAlwaysUsageDescription frente a NSLocationUsageDescriptionCuál es el error de geolocalización, mira aquí
navigator.geolocation.getCurrentPosition(success => { /* Do some magic. */ }, failure => { if (failure.message.startsWith("Only secure origins are allowed")) { // Secure Origin issue. } });Incluya/establezca una opción de "características requeridas" en el archivo manifest.webapp:
{ "required_features": ["geolocation"] }Usuario:
En iPhone:
Settings -> Location Services -> [your Browser] [apple ref][1]Chrome requiere https para el uso de geolocalización
Verifique, el SISTEMA OPERATIVO y el NAVEGADOR BOTH usuario tienen habilitados los servicios de ubicación, el navegador del usuario admite la verificación de los servicios de ubicación
// options for current position const navigatorLocationOptions = { enableHighAccuracy: true, timeout: 7000, maximumAge: 0 }; // does browser have geo services enabled navigator.permissions.query({name:'geolocation'}) .then((result) => { if (result.state === 'granted') {// you are good navigator.geolocation.getCurrentPosition(position => { console.log('granted user location permission', position ); //.. do your stuff }, (error) => { // OS services are not enabled console.log('Please turn on OS located services', navigator); errorLocation(); }, navigatorLocationOptions); } else { // browser issues seriveces console.log('Browser location services disabled', navigator); errorLocation(); } }, (error) => { /* Browser doesn't support querying for permissions */ console.log('Please turn on BROWSER location services', navigator); errorLocation() } ); //handle errors function errorLocation() { ... }