Hoe werkt het: opvragen van de locatie van de gebruiker

Geplaatst op 24. januari 2023 door Jan Bunk


Onze apps passen de navigator.geolocation JavaScript-API aan om jou de meeste ontwikkelingsmogelijkheden en de gebruikers van je app de optimale ervaring te geven.

Je kunt de geolocatie JavaScript functies gewoon gebruiken, zolang je de op deze pagina genoemde beperkingen in gedachten houdt.

Extra functies

openAppLocationSettings

Deze functie opent het app-infoscherm op Android en de instellingen App op iOS, waar de gebruiker locatietoegang voor de app kan inschakelen, zelfs als hij eerder de toestemmingsverzoeken heeft afgewezen.

In het gedeelte over foutenafhandeling hierdoor kan je een codevoorbeeld vinden samen met wanneer het zinvol kan zijn om deze functie aan te roepen.

Je kunt luisteren naar de appResumed gebeurtenis om te detecteren wanneer de gebruiker terugkeerde van de instellingen.

openDeviceLocationSettings

Deze functie opent op Android de instellingen-app waar de gebruiker locatiediensten kan inschakelen. Op iOS opent het ook de instellingen-app, maar vanwege technische beperkingen niet de exacte pagina waar de locatiediensten worden beheerd.

In het gedeelte over foutenafhandeling hierdoor kan je een codevoorbeeld vinden samen met wanneer het zinvol kan zijn om deze functie aan te roepen.

Je kunt luisteren naar de appResumed gebeurtenis om te detecteren wanneer de gebruiker terugkeerde van de instellingen.

Foutafhandeling

Er zijn een aantal mogelijke foutbronnen die kunnen optreden bij het ophalen van de huidige locatie. We behouden de compatibiliteit met de oorspronkelijke geolocatie-API, maar bieden ook aanvullende informatie over wat er precies is misgegaan.


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);
    

Beperkingen

  • Als je navigator.geolocation.getCurrentPosition aanroept, krijg je geen GeolocationCoordinates of GeolocationPositionError object terug, dus controleer het type niet. Je hebt echter wel toegang tot alle verwachte eigenschappen.
  • Als sommige eigenschappen niet worden ondersteund door het apparaat, bijvoorbeeld GeolocationCoordinates.altitudeAccuracy, zou een browser normaal gesproken nul teruggeven, terwijl wij 0 zouden kunnen teruggeven, omdat dat is wat we van het apparaat krijgen.