GPS en locatiediensten in mobiele apps — zijn API’s voor het bepalen van de fysieke locatie van een apparaat met behulp van satellieten, Wi-Fi en mobiele netwerken. Volgens Google Android Location Guide (2025) gebruikt meer dan 60% van de mobiele apps locatiegegevens voor het personaliseren van inhoud. Fused Location Provider op Android combineert meerdere bronnen om de nauwkeurigheid te verhogen en het energieverbruik te verminderen.
Belangrijkste punten
GPS (Global Positioning System) — is een satellietnavigatiesysteem bestaande uit 31 actieve satellieten in een baan op ongeveer 20 200 km hoogte. Op mobiele apparaten ontvangt de GPS-chip signalen van satellieten en berekent coördinaten op basis van trilateratie — het meten van de signaalreistijd van meerdere satellieten. Locatiediensten in mobiele besturingssystemen voegen aan GPS gegevens van Wi-Fi-toegangspunten en mobiele zendmasten toe om de coördinaatbepaling te versnellen (A-GPS) en de nauwkeurigheid binnenshuis te verbeteren. Volgens GPS.gov (2024) is de nauwkeurigheid van civiele GPS 3-5 meter bij heldere hemel en tot 15 meter in dichtbebouwde gebieden.
Moderne mobiele apparaten ondersteunen niet alleen het Amerikaanse GPS-systeem, maar ook andere wereldwijde navigatiesystemen: Russisch GLONASS (24 satellieten), Europees Galileo (28 satellieten) en Chinees BeiDou. Gelijktijdige ondersteuning van meerdere systemen verhoogt de nauwkeurigheid en snelheid van coördinaatbepaling — het apparaat kan tot 40 satellieten van verschillende systemen gebruiken voor positieberekening. Op iOS en Android gebeurt de selectie van het satellietsysteem automatisch op hardware-niveau, de ontwikkelaar hoeft dit niet te beheren.
Het proces van locatiebepaling op een mobiel apparaat bestaat uit verschillende fasen: gegevensverzameling van bronnen (satellieten, Wi-Fi, mobiele netwerken), filtering en correctie van fouten, berekening van coördinaten en overdracht van het resultaat aan de app. Het besturingssysteem beheert dit proces via een uniforme locatiedienst die het werk van alle bronnen optimaliseert voor batterijbesparing. Hieronder worden de drie belangrijkste bronnen van locatiegegevens beschreven.
Satellietnavigatie biedt maximale nauwkeurigheid (3-5 meter), maar vereist direct zicht op de hemel. Binnen of in dichtbebouwde stedelijke omgeving kan het GPS-signaal verzwakt of volledig verloren gaan. De tijd tot eerste positiebepaling (TTFF) is 30-60 seconden bij een koude start en 5-10 seconden bij een warme start. A-GPS (Assisted GPS) versnelt de start door efemeriden van satellieten via internet te downloaden in plaats van te wachten op gegevens van de satellieten.
Wi-Fi positionering gebruikt een database van MAC-adressen van toegangspunten met bekende coördinaten. De nauwkeurigheid is 10-50 meter binnen Wi-Fi-bereik. Mobiele zendmasten bieden een nauwkeurigheid van 100 meter tot enkele kilometers, afhankelijk van de dichtheid van de masten. Combinatie van alle bronnen (Fused Location) maakt het mogelijk coördinaten te verkrijgen met redelijke nauwkeurigheid bij minimaal energieverbruik — vooral wanneer de GPS-chip is uitgeschakeld of het satellietsignaal niet beschikbaar is.
Op beide platforms zijn locatiediensten geïmplementeerd via systeem-API’s met verschillende abstractieniveaus. Android gebruikt FusedLocationProviderClient van Google Play Services, iOS gebruikt CLLocationManager van Core Location. Beide API’s maken het mogelijk een eenmalige positie op te vragen of te abonneren op regelmatige updates. Hieronder staat een voorbeeld van het verkrijgen van coördinaten op Android met Fused Location Provider in Kotlin.
val fusedClient = LocationServices.getFusedLocationProviderClient(this)
val locationRequest = LocationRequest.Builder(
Priority.PRIORITY_HIGH_ACCURACY
)
.setIntervalMillis(5000)
.setMinUpdateIntervalMillis(2000)
.build()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation?.let { location ->
Log.d("Locatie", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
In het voorbeeld wordt LocationRequest geconfigureerd met prioriteit HIGH_ACCURACY — dit schakelt GPS in voor maximale nauwkeurigheid. setIntervalMillis stelt het gewenste update-interval in (5 seconden), setMinUpdateIntervalMillis het minimale interval (2 seconden). De callback onLocationResult wordt elke keer aangeroepen wanneer het systeem nieuwe coördinaten ontvangt. Het is belangrijk om de toestemming te controleren voordat requestLocationUpdates wordt aangeroepen — anders crasht de app met een SecurityException.
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
// MARK: - CLLocationManagerDelegate
func locationManager(
_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]
) {
guard let location = locations.last else { return }
print("Location: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}
Op iOS bepaalt desiredAccuracy de nauwkeurigheid van het verzoek: kCLLocationAccuracyBest gebruikt alle beschikbare bronnen (GPS + Wi-Fi + mobiele netwerken). Na het aanvragen van toestemming via requestWhenUseAuthorization toont het systeem een dialoog aan de gebruiker. De delegate didUpdateLocations ontvangt een array van CLLocation-objecten met coördinaten, hoogte, snelheid en richting. Om updates te stoppen wordt stopUpdatingLocation aangeroepen om de batterij te sparen.
Toegang tot locatie vereist expliciete toestemming van de gebruiker op beide platforms. Op Android worden de machtigingen ACCESS_FINE_LOCATION (GPS) en ACCESS_COARSE_LOCATION (Wi-Fi/mobiele netwerken) gebruikt. Vanaf Android 10 is voor achtergrondtoegang een aparte machtiging ACCESS_BACKGROUND_LOCATION vereist. Op iOS zijn drie niveaus beschikbaar: requestWhenInUseAuthorization (alleen bij actieve app), requestAlwaysAuthorization (op de achtergrond) en tijdstempels voor nauwkeurige positionering. Apple vereist een verplichte beschrijving in Info.plist: NSLocationWhenInUseUsageDescription of NSLocationAlwaysAndWhenInUseUsageDescription. Zonder deze sleutels wordt het toestemmingsverzoek genegeerd.
Continu gebruik van GPS vermindert de batterijduur aanzienlijk — tot 30% per uur continu werken op maximale nauwkeurigheid. Voor optimalisatie van het energieverbruik wordt aanbevolen locatie alleen te gebruiken wanneer nodig en updates te stoppen wanneer de app naar de achtergrond gaat. Op Android schakelt FusedLocationProviderClient automatisch tussen GPS en netwerkbronnen op basis van beschikbaarheid en prioriteit van het verzoek. Op iOS gebruikt u significant-change location service (startMonitoringSignificantLocationChanges) voor updates met minimaal energieverbruik — de nauwkeurigheid is lager (tot 500 meter), maar de batterij wordt bijna niet verbruikt. Pas ook batchverwerking toe: verzamel coördinaten met intervallen van 5-10 minuten en stuur ze in één verzoek naar de server via WorkManager op Android of BGTaskScheduler op iOS. Het verlagen van de verzoekfrequentie van 1 seconde naar 30 seconden vermindert het energieverbruik van locatiebepaling met 85%.
Locatie wordt gebruikt in een breed scala aan mobiele apps: van navigators tot bezorgdiensten. De meest voorkomende scenario’s zijn het tonen van de gebruiker op een kaart, geotargeting van advertenties, het volgen van koeriers, geofences voor pushmeldingen en het volgen van fitnessactiviteiten. Elk scenario vereist een eigen benadering van nauwkeurigheid en updatefrequentie. Hieronder staat een tabel met configuratieaanbevelingen voor verschillende soorten apps.
| Type app | Nauwkeurigheid | Interval | Achtergrondmodus |
|---|---|---|---|
| Navigator | HIGH (GPS) | 1-2 sec | Ja |
| Bezorging | BALANCED (GPS+Wi-Fi) | 10-30 sec | Ja |
| Weer | LOW (Wi-Fi/mobiele netwerken) | Eenmalig | Nee |
| Sociale media | BALANCED | Bij openen | Nee |
| Fitness | HIGH (GPS) | 5-10 sec | Ja |
Bij het ontwerpen van locatiefunctionaliteit is het belangrijk om rekening mee te houden dat gebruikers de toestemming op elk moment kunnen intrekken via de systeeminstellingen. De app moet correct omgaan met de situatie wanneer locatie niet beschikbaar is en een duidelijke uitleg geven waarom de functionaliteit beperkt is.
Geofencing — technologie voor het creëren van virtuele grenzen op de kaart, bij overschrijding waarvan de app een melding ontvangt. Op Android worden geofences geïmplementeerd via GeofencingClient van Google Play Services, op iOS via CLCircularRegion van Core Location. Bij betreden of verlaten van een zone maakt het systeem de app wakker en verzendt een gebeurtenis, zelfs als de app gesloten of geminimaliseerd is. Dit wordt gebruikt voor pushmeldingen bij het naderen van een winkel, locatiegebaseerde taakherinneringen en automatisering van IoT-apparaten. Het maximale aantal geofences is beperkt: op Android — 100, op iOS — 20 tegelijk. De minimale straal van een zone is 50 meter op beide platforms, anders kan het systeem mogelijk niet reageren vanwege locatieonnauwkeurigheid. Bij het betreden van een zone start het systeem een Intent op Android of roept het de delegate locationManager:didEnterRegion aan op iOS.
Veelgestelde vragen
GPS in een smartphone is een ingebouwde ontvanger van signalen van het satellietnavigatiesysteem die coördinaten bepaalt met een nauwkeurigheid van 3-5 meter. Op apparaten zijn ook GLONASS, Galileo en BeiDou beschikbaar voor hogere nauwkeurigheid en snellere positionering.
GPS is alleen de satellietmethode voor coördinaatbepaling. Locatiediensten combineren GPS, Wi-Fi-positionering en gegevens van mobiele zendmasten voor snellere en energiezuinigere locatiebepaling, vooral binnenshuis.
Roep requestWhenInUseAuthorization() of requestAlwaysAuthorization() aan op een CLLocationManager-instantie. Voeg vooraf NSLocationWhenInUseUsageDescription toe aan Info.plist met een duidelijke tekst over de reden voor het gebruik van locatie.
Gebruik FusedLocationProviderClient op Android en significant-change location service op iOS. Verhoog het interval tussen verzoeken naar 10-30 seconden, schakel updates uit wanneer het scherm uit is en pas batchgewijs verzenden van coördinaten naar de server toe.
Ja, zonder GPS kan een geschatte locatie worden bepaald via Wi-Fi-toegangspunten (nauwkeurigheid 10-50 meter) of mobiele zendmasten (nauwkeurigheid 100-5000 meter). Op Android wordt hiervoor ACCESS_COARSE_LOCATION gebruikt.
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