Location Permission is de toestemming die een mobiele app aan de gebruiker vraagt om toegang te krijgen tot gegevens over zijn geografische locatie. Zonder deze toestemming kan de app de coördinaten van het apparaat niet bepalen en dus geen geolocatiefuncties bieden. Volgens Apple Developer Documentation, 2024 zijn alle apps die gebruikmaken van locatiediensten verplicht om expliciete toestemming van de gebruiker te vragen via een systeemdialoog.
Belangrijkste punten
Location Permission is een mechanisme van het besturingssysteem dat de toegang van apps tot gegevens over de geografische locatie van het apparaat regelt. Zonder expliciete toestemming van de gebruiker kan de app geen GPS-coördinaten, Wi-Fi-netwerkgegevens of informatie over mobiele zendmasten verkrijgen.
De mobiele platforms Android en iOS implementeren hun eigen machtigingssysteem, maar de algemene logica is hetzelfde: de app declareert de benodigde machtigingen in het manifest of configuratiebestand en vraagt ze vervolgens tijdens runtime aan. Volgens Android Developers, 2024 behoren vanaf Android 10 alle geolocatiemachtigingen tot de categorie gevaarlijk en vereisen ze een runtime-verzoek.
De reden voor deze aanpak is de bescherming van de privacy van gebruikers. Locatiegegevens maken het mogelijk om reisroutes te maken, werk- en rustplaatsen te bepalen en de identiteit te achterhalen. Daarom vereisen beide platforms transparante uitleg in het aanvraagdialoog: de app moet de reden aangeven waarom hij toegang tot geolocatie nodig heeft.
Geolocatietoestemming is noodzakelijk voor elke app waarvan de functionaliteit afhangt van kennis van de fysieke locatie van de gebruiker. Kaarten en navigatie, bezorgapps, weerdiensten, sociale netwerken met geotagging — al deze categorieën software vereisen Location Permission.
Zonder deze toestemming kan de app de coördinaten van het apparaat op geen enkele beschikbare manier bepalen: niet via de GPS-module, niet via Wi-Fi-scanning, niet via locatiebepaling op basis van mobiele zendmasten. De gebruiker kan op elk moment de toestemming intrekken in de systeeminstellingen, waarna de app de weigering correct moet afhandelen.
Volgens onderzoek van Pew Research Center (2024) trekt ongeveer 45% van de gebruikers de toegang tot geolocatie in bij apps die het niet gebruiken voor de kernfunctionaliteit. Dit betekent dat de ontwikkelaar het verzoek duidelijk moet motiveren en alternatieve mechanismen moet bieden voor degenen die Location Permission hebben geweigerd.
AVG in Europa en wet 152-FZ in Rusland vereisen het verkrijgen van geïnformeerde toestemming voor de verwerking van locatiegegevens. De app moet niet alleen via de systeemdialoog om toestemming vragen, maar ook een aparte melding geven over de doeleinden van gegevensverzameling. Schending van deze vereisten leidt tot boetes tot 20 miljoen euro of 4% van de jaarlijkse omzet van het bedrijf.
Als de app geen Location Permission vraagt of de gebruiker weigert toegang, moet de ontwikkelaar een back-upscenario voorzien. Voor een kaartapp kan dit handmatige invoer van het adres zijn, voor een bezorgapp — selectie uit een lijst met opgeslagen adressen, voor een weerdienst — bepaling van de stad op basis van het IP-adres. Graceful degradation (sierlijke degradatie) is een standaardpraktijk aanbevolen door Google en Apple.
Toegangsniveaus tot geolocatie verschillen op Android en iOS, hoewel het algemene idee hetzelfde is: hoe nauwkeuriger de toegang, hoe strengere eisen het platform aan de app stelt.
| Toegangsniveau | Android | iOS |
|---|---|---|
| Tijdens gebruik | Alleen wanneer de app actief is | When In Use — alleen in de app |
| Achtergrond | Always — permanent, zelfs op de achtergrond | Always — vereist extra App Store-beoordeling |
| Bij benadering | ACCESS_COARSE_LOCATION (nauwkeurigheid tot 500 m) | Met optie Precision = Off (iOS 14+) |
ACCESS_FINE_LOCATION geeft toegang tot nauwkeurige GPS-coördinaten met een foutmarge van enkele meters. Voor het declareren van deze machtiging in het manifest wordt de constante android.permission.ACCESS_FINE_LOCATION gebruikt. ACCESS_COARSE_LOCATION biedt op zijn beurt een benaderende locatie met een nauwkeurigheid tot 500 meter op basis van Wi-Fi en mobiele zendmasten.
When In Use (tijdens gebruik) stelt de app in staat coördinaten alleen te verkrijgen wanneer deze op het scherm geopend is. Always (altijd) geeft toegang tot geolocatie, zelfs in de achtergrondmodus, maar vereist een verplichte beoordeling in de App Store. Vanaf iOS 14 kan de gebruiker nauwkeurige positionering voor elke app afzonderlijk uitschakelen via de schakelaar Precision.
Location Permission aanvragen op Android gebeurt in twee fasen: declaratie van machtigingen in het manifest en runtime-verzoek in de code. Vanaf Android 6.0 (API 23) worden alle gevaarlijke machtigingen aangevraagd tijdens het gebruik van de app, niet bij installatie.
De eerste stap is het toevoegen van de benodigde machtigingen aan het bestand AndroidManifest.xml. Voor nauwkeurige en benaderende positionering worden verschillende constanten gebruikt.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Na declaratie in het manifest moet de systeemdialoog voor het aanvragen van toestemming in de app-code worden aangeroepen. Laten we een voorbeeld in Kotlin bekijken met behulp van de Activity Result API.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Toestemming verkregen
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Alleen bij benadering locatie
getCoarseLocation()
}
else -> {
// Gebruiker heeft geweigerd
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Als de gebruiker de toegang heeft geweigerd, staat het Android-systeem niet toe de dialoog automatisch opnieuw te tonen. De ontwikkelaar moet shouldShowRequestPermissionRationale aanroepen om een voorafgaande uitleg te tonen. Bij herhaalde weigering met de vlag Never Ask Again moet de gebruiker naar de systeeminstellingen worden verwezen.
private fun checkLocationPermission() {
when {
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED -> {
getLocation()
}
ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION) -> {
showRationaleDialog {
requestLocationPermission()
}
}
else -> {
openAppSettings()
}
}
}
Location Permission aanvragen op iOS vereist toevoeging van speciale sleutels aan het Info.plist-bestand en het aanroepen van de methode van de klasse CLLocationManager. Apple besteedt bijzondere aandacht aan privacy, daarom moet de uitleg in het aanvraagdialoog zo specifiek mogelijk zijn.
Om locatie op iOS aan te vragen, moet u een of beide sleutels toevoegen aan Info.plist: NSLocationWhenInUseUsageDescription voor toegang tijdens gebruik en NSLocationAlwaysAndWhenInUseUsageDescription voor achtergrondtoegang. De waarde van elke sleutel is een tekenreeks die aan de gebruiker wordt getoond in de dialoog.
<key>NSLocationWhenInUseUsageDescription</key>
<string>De app heeft uw locatie nodig om de dichtstbijzijnde punten op de kaart weer te geven.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>De app heeft toegang tot geolocatie op de achtergrond nodig om de route te volgen.</string>
In Swift-code wordt het verzoek uitgevoerd via een instantie van CLLocationManager. Afhankelijk van het benodigde toegangsniveau wordt requestWhenInUseAuthorization of requestAlwaysAuthorization aangeroepen.
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
func requestLocationAccess() {
manager.delegate = self
manager.requestWhenInUseAuthorization()
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .authorizedWhenInUse, .authorizedAlways:
startLocationUpdates()
case .denied, .restricted:
showSettingsAlert()
case .notDetermined:
break
}
}
}
In tegenstelling tot Android biedt iOS de ontwikkelaar geen methode om shouldShowRequestPermissionRationale te controleren. Het systeem beslist zelf wanneer het de uitleg toont. Bovendien kan de gebruiker op iOS de machtiging alleen wijzigen via de systeeminstellingen — de app kan de systeemdialoog niet opnieuw aanroepen nadat de gebruiker een keuze heeft gemaakt. RequestAlwaysAuthorization vraagt eerst When In Use en vervolgens, na ontvangst van de eerste toestemming, een aparte dialoog voor achtergrondtoegang.
Beste praktijken voor werken met Location Permission helpen om weigeringen van gebruikers te verminderen en te voldoen aan de eisen van app-winkels. Google en Apple hebben aanbevelingen gepubliceerd waarvan naleving de kans op goedkeuring van de app vergroot.
Toon de dialoog voor het aanvragen van Location Permission niet direct bij het starten van de app. Een gebruiker die de app net heeft geopend, begrijpt nog niet waarom hij toegang tot geolocatie moet verlenen. Contextual request houdt in dat de dialoog verschijnt op het moment dat de gebruiker echt de functie nodig heeft waarvoor toestemming vereist is. Bijvoorbeeld bij het klikken op de knop “Zoek de dichtstbijzijnde winkel”.
Toon vóór de systeemdialoog uw eigen uitlegscherm (pre-permission screen). Leg daarin uit waarom de app geolocatie nodig heeft, welke gegevens worden verzameld en hoe ze worden gebruikt. Nadat de gebruiker op “Toestaan” op uw scherm heeft geklikt, toont u de systeemdialoog. Volgens gegevens van Appsflyer (2024) verhoogt deze aanpak de conversie van toestemming met 25-35%.
Achtergrondtoegang tot geolocatie is alleen nodig voor apps die op de achtergrond werken: navigators, activiteitstrackers, bezorgapps. Als uw app alleen coördinaten nodig heeft wanneer het scherm geopend is, vraag dan When In Use. De App Store wijst de app af als Always niet functioneel gerechtvaardigd is. Op Android wordt achtergrondtoegang aanvullend gereguleerd via de machtiging ACCESS_BACKGROUND_LOCATION.
Veelgestelde vragen
De app moet de weigering correct afhandelen en een alternatief scenario bieden. Bijvoorbeeld handmatige invoer van het adres of bepaling van de stad op basis van het IP-adres. De systeemdialoog wordt niet opnieuw getoond — de gebruiker moet naar de instellingen worden verwezen.
Technisch gezien ja, de systeemdialoog kan zonder voorafgaand scherm worden aangeroepen. Echter, de conversie van toestemming zonder uitleg bedraagt 30-40%, terwijl deze met een voorafgaand scherm 60-75% is. Apple en Google raden aan altijd de reden van het verzoek uit te leggen.
Gebruik ContextCompat.checkSelfPermission met de constante Manifest.permission.ACCESS_FINE_LOCATION. De methode retourneert PERMISSION_GRANTED of PERMISSION_DENIED, waarmee de huidige status kan worden bepaald zonder de systeemdialoog aan te roepen.
ACCESS_FINE_LOCATION geeft toegang tot nauwkeurige GPS-coördinaten met een foutmarge van 3-10 meter. ACCESS_COARSE_LOCATION biedt een benaderende locatie met een nauwkeurigheid tot 500 meter op basis van Wi-Fi en mobiele zendmasten. Op Android 12+ kan de ontwikkelaar beide machtigingen tegelijk aanvragen.
Op Android is voor het scannen van BLE-apparaten ACCESS_FINE_LOCATION of ACCESS_COARSE_LOCATION vereist, omdat BLE-signalen kunnen worden gebruikt voor positietriangulatie. Op iOS is voor BLE alleen Bluetooth-toestemming voldoende, Location Permission is niet nodig.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook