GPS och platsbaserade tjänster i mobilappar — är API:er för att bestämma en enhets fysiska plats med hjälp av satelliter, Wi-Fi och mobila nätverk. Enligt Google Android Location Guide (2025) använder över 60% av mobilapparna platsdata för att personalisera innehåll. Fused Location Provider på Android kombinerar flera källor för att öka noggrannheten och minska energiförbrukningen.
Huvudpunkter
GPS (Global Positioning System) — är ett satellitnavigeringssystem som består av 31 aktiva satelliter i omloppsbana på cirka 20 200 km höjd. På mobila enheter tar GPS-chippet emot signaler från satelliter och beräknar koordinater baserat på trilaterering — mätning av signalens utbredningstid från flera satelliter. Platsbaserade tjänster i mobila operativsystem lägger till data från Wi-Fi-åtkomstpunkter och mobilmaster till GPS för att snabba upp koordinatbestämningen (A-GPS) och förbättra noggrannheten inomhus. Enligt GPS.gov (2024) är noggrannheten för civil GPS 3-5 meter under klar himmel och upp till 15 meter i tät bebyggelse.
Moderna mobila enheter stöder inte bara det amerikanska GPS-systemet utan även andra globala navigationssystem: ryska GLONASS (24 satelliter), europeiska Galileo (28 satelliter) och kinesiska BeiDou. Samtidigt stöd för flera system ökar noggrannheten och hastigheten för koordinatbestämning — enheten kan använda upp till 40 satelliter från olika system för att beräkna positionen. På iOS och Android sker valet av satellitsystem automatiskt på hårdvaruchipsnivå, utvecklaren behöver inte hantera detta.
Processen för platsbestämning på en mobil enhet består av flera steg: insamling av data från källor (satelliter, Wi-Fi, mobila nätverk), filtrering och korrigering av fel, beräkning av koordinater och överföring av resultatet till appen. Operativsystemet hanterar denna process genom en enhetlig geolokaliserings tjänst som optimerar alla källors arbete för att spara batteri. Nedan beskrivs de tre huvudsakliga källorna till platsdata.
Satellitnavigering ger maximal noggrannhet (3-5 meter), men kräver direkt sikt mot himlen. Inomhus eller i tät stadsbebyggelse kan GPS-signalen försvagas eller helt förloras. Tiden för första positionsbestämning (TTFF) är 30-60 sekunder vid kallstart och 5-10 sekunder vid varmstart. A-GPS (Assisted GPS) snabbar upp starten genom att ladda ner satellitefemerider via internet istället för att vänta på data från satelliterna.
Wi-Fi positionering använder en databas med MAC-adresser för åtkomstpunkter med kända koordinater. Noggrannheten är 10-50 meter inom Wi-Fi-räckvidd. Mobilmaster ger noggrannhet från 100 meter upp till flera kilometer beroende på masternas täthet. Kombinationen av alla källor (Fused Location) gör det möjligt att få koordinater med rimlig noggrannhet vid minimal energiförbrukning — särskilt när GPS-chippet är avstängt eller satellitesignalen inte är tillgänglig.
På båda plattformarna är platsbaserade tjänster implementerade via system-API:er med olika abstraktionsnivåer. Android använder FusedLocationProviderClient från Google Play Services, iOS använder CLLocationManager från Core Location. Båda API:erna gör det möjligt att begära en engångsposition eller prenumerera på regelbundna uppdateringar. Nedan är ett exempel på att få koordinater på Android med Fused Location Provider i 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("Plats", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
I exemplet konfigureras LocationRequest med prioriteten HIGH_ACCURACY — detta aktiverar GPS för maximal noggrannhet. setIntervalMillis ställer in önskat uppdateringsintervall (5 sekunder), setMinUpdateIntervalMillis — minimum (2 sekunder). Callback-funktionen onLocationResult anropas varje gång systemet får nya koordinater. Det är viktigt att kontrollera tillståndet innan requestLocationUpdates anropas — annars kraschar appen med 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)")
}
På iOS bestämmer desiredAccuracy noggrannheten för begäran: kCLLocationAccuracyBest använder alla tillgängliga källor (GPS + Wi-Fi + mobila nätverk). Efter att ha begärt tillstånd via requestWhenUseAuthorization visar systemet en dialogruta för användaren. Delegaten didUpdateLocations tar emot en array med CLLocation-objekt med koordinater, höjd, hastighet och riktning. För att stoppa uppdateringar anropas stopUpdatingLocation för att spara batteri.
Tillgång till geolokalisering kräver uttryckligt tillstånd från användaren på båda plattformarna. På Android används tillstånden ACCESS_FINE_LOCATION (GPS) och ACCESS_COARSE_LOCATION (Wi-Fi/mobila nätverk). Från och med Android 10 krävs separat tillstånd ACCESS_BACKGROUND_LOCATION för bakgrundsåtkomst. På iOS finns tre nivåer: requestWhenInUseAuthorization (endast när appen är aktiv), requestAlwaysAuthorization (i bakgrunden) och tidsstämplar för exakt positionering. Apple kräver obligatorisk beskrivning i Info.plist: NSLocationWhenInUseUsageDescription eller NSLocationAlwaysAndWhenInUseUsageDescription. Utan dessa nycklar ignoreras tillståndsbegäran.
Kontinuerlig användning av GPS minskar batteritiden avsevärt — upp till 30% per timme kontinuerlig drift vid maximal noggrannhet. För att optimera energiförbrukningen rekommenderas att använda geolokalisering endast när det behövs och stoppa uppdateringar när appen går i bakgrunden. På Android växlar FusedLocationProviderClient automatiskt mellan GPS och nätverkskällor beroende på tillgänglighet och begärans prioritet. På iOS använder du significant-change location service (startMonitoringSignificantLocationChanges) för uppdateringar med minimal energiförbrukning — noggrannheten är lägre (upp till 500 meter), men batteriet förbrukas nästan inte. Tillämpa också batchbearbetning: samla koordinater med 5-10 minuters intervall och skicka till servern med en enda begäran via WorkManager på Android eller BGTaskScheduler på iOS. Att minska begäranfrekvensen från 1 sekund till 30 sekunder minskar energiförbrukningen för geolokalisering med 85%.
Geolokalisering används i ett brett spektrum av mobilappar: från navigatorer till leveranstjänster. De vanligaste scenarierna inkluderar att visa användaren på kartan, geografisk målinriktning av annonser, spårning av bud, geofencing för push-notiser och spårning av fitnessaktivitet. Varje scenario kräver sin egen strategi för noggrannhet och uppdateringsfrekvens. Nedan finns en tabell med konfigurationsrekommendationer för olika apptyper.
| Apptyp | Noggrannhet | Intervall | Bakgrundsläge |
|---|---|---|---|
| Navigator | HIGH (GPS) | 1-2 sek | Ja |
| Leverans | BALANCED (GPS+Wi-Fi) | 10-30 sek | Ja |
| Väder | LOW (Wi-Fi/mobila nätverk) | Engångs | Nej |
| Socialt nätverk | BALANCED | Vid öppning | Nej |
| Fitness | HIGH (GPS) | 5-10 sek | Ja |
Vid design av geolokaliseringsfunktionalitet är det viktigt att beakta att användare när som helst kan återkalla tillståndet via systeminställningarna. Appen bör korrekt hantera situationen när geolokalisering inte är tillgänglig och visa en tydlig förklaring om varför funktionaliteten är begränsad.
Geofencing — teknik för att skapa virtuella gränser på kartan, vid passage av vilka appen får ett meddelande. På Android implementeras geofences via GeofencingClient från Google Play Services, på iOS — via CLCircularRegion från Core Location. Vid inträde eller utträde ur en zon väcker systemet appen och skickar en händelse även om appen är stängd eller minimerad. Detta används för push-notiser vid närmande av en butik, platsbaserade påminnelser om uppgifter och automatisering av IoT-enheter. Maximalt antal geofences är begränsat: på Android — 100, på iOS — 20 samtidigt. Minsta radie för en zon är 50 meter på båda plattformarna, annars kan systemet misslyckas på grund av positionsbestämningsfel. Vid inträde i en zon startar systemet ett Intent på Android eller anropar delegaten locationManager:didEnterRegion på iOS.
Vanliga frågor
GPS i en smartphone är en inbyggd mottagare av signaler från satellitnavigeringssystemet som bestämmer koordinater med en noggrannhet på 3-5 meter. På enheter finns även GLONASS, Galileo och BeiDou för att öka noggrannheten och positioneringshastigheten.
GPS är endast satellitmetoden för att bestämma koordinater. Platsbaserade tjänster kombinerar GPS, Wi-Fi-positionering och data från mobilmaster för snabbare och mer energieffektiv platsbestämning, särskilt inomhus.
Anropa requestWhenInUseAuthorization() eller requestAlwaysAuthorization() på en instans av CLLocationManager. Lägg i förväg till NSLocationWhenInUseUsageDescription i Info.plist med en tydlig text om orsaken till att använda geolokalisering.
Använd FusedLocationProviderClient på Android och significant-change location service på iOS. Öka intervallet mellan förfrågningar till 10-30 sekunder, stäng av uppdateringar när skärmen är av och tillämpa batch-sändning av koordinater till servern.
Ja, utan GPS kan ungefärlig plats bestämmas via Wi-Fi-åtkomstpunkter (noggrannhet 10-50 meter) eller mobilmaster (noggrannhet 100-5000 meter). På Android används ACCESS_COARSE_LOCATION för detta.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också