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.
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.
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);
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.GeolocationCoordinates.altitudeAccuracy
, zou een browser normaal gesproken nul teruggeven, terwijl wij 0 zouden kunnen teruggeven, omdat dat is wat we van het apparaat krijgen.