Come ottenere la posizione dell'utente

Postato su 24. gennaio 2023 da Jan Bunk


Le nostre applicazioni modificano l'API JavaScript navigator.geolocation per offrirti il massimo delle possibilità di sviluppo e agli utenti delle tue app un'esperienza ottimale.

Puoi utilizzare normalmente le funzioni JavaScript di geolocalizzazione, purché tu tenga presente le limitazioni indicate in questa pagina.

Funzioni aggiuntive

openAppLocationSettings

Questa funzione apre la schermata informativa dell'app su Android e l'app delle impostazioni su iOS, dove l'utente può abilitare l'accesso alla posizione per l'app, anche se in precedenza ha rifiutato le richieste di autorizzazione.

Puoi trovare un esempio di codice e i casi in cui potrebbe avere senso chiamare questa funzione nella sezione sulla gestione degli errori.

Puoi ascoltare l'evento appResumed per rilevare quando l'utente è tornato dalle impostazioni.

openDeviceLocationSettings

Questa funzione apre l'app delle impostazioni su Android dove l'utente può abilitare i servizi di localizzazione. Anche su iOS apre l'app delle impostazioni ma, a causa di limitazioni tecniche, non la pagina esatta in cui vengono gestiti i servizi di localizzazione.

Puoi trovare un esempio di codice e i casi in cui potrebbe avere senso chiamare questa funzione nella sezione sulla gestione degli errori.

Puoi ascoltare l'evento appResumed per rilevare quando l'utente è tornato dalle impostazioni.

Gestione degli errori

Ci sono un paio di potenziali fonti di errore quando si ottiene la posizione corrente. Manteniamo la compatibilità con l'API di geolocalizzazione originale, ma forniamo anche informazioni aggiuntive su cosa è andato esattamente storto.


function getAppErrorMessage(error) {
    if (error.hasOwnProperty("appMessage")) {
        return error.appMessage;
    }
    else {
        return null;
    }
}

var options = {
    enableHighAccuracy: true,
    timeout: 5000,
    maximumAge: 0
};

navigator.geolocation.getCurrentPosition(function(position) {
    // success
    console.log("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
}, async function(error) {
    // error
    switch(error.code) {
        case error.PERMISSION_DENIED:
            // error.message is always "User denied Geolocation" to be consistent with browser behaviour
            console.log("User denied Geolocation");

            // Additional information only available for app users:
            if (getAppErrorMessage(error) === "Permission denied") {
                console.log("User did not grant the app permission to access the location, but we can try again later.");
            }
            else if (getAppErrorMessage(error) === "Permission denied permanently") {
                console.log("User did not grant the app permission to access the location and can only enable the permissions via the app settings.");

                // You can open the app settings like this:
                await openAppLocationSettings();
            }
            else if (getAppErrorMessage(error) === "Location service disabled") {
                console.log("User did not enable the location service setting in the device settings, even after being prompted to do so by the app.");

                // You can open the device's location settings like this:
                await openDeviceLocationSettings();
            }

            break;
        case error.POSITION_UNAVAILABLE:
            // can occurr in browsers with message "Unknown error acquiring position", but not used by the app at the moment
            console.log("Unknown error acquiring position");
            break;
        case error.TIMEOUT:
            // error.message is always "Position acquisition timed out" to be consistent with browser behaviour
            console.log("The request to get user location took longer than " + options.timeout + " milliseconds.");
            break;
    }

}, options);
    

Limitazioni

  • Quando chiami navigator.geolocation.getCurrentPosition, non otterrai un oggetto GeolocationCoordinates o GeolocationPositionError, quindi non controllarne il tipo. Puoi comunque accedere a tutte le proprietà previste.
  • Se alcune proprietà non sono supportate dal dispositivo, ad esempio GeolocationCoordinates.altitudeAccuracy, un browser normalmente restituirebbe null, mentre noi potremmo restituire 0, dato che è quello che otteniamo dal dispositivo.