GPS a lokalizační služby v mobilních aplikacích — jsou API pro určení fyzické polohy zařízení pomocí satelitů, Wi-Fi a mobilních sítí. Podle Google Android Location Guide (2025) více než 60% mobilních aplikací využívá údaje o poloze pro personalizaci obsahu. Fused Location Provider na Androidu kombinuje několik zdrojů pro zvýšení přesnosti a snížení spotřeby energie.
Hlavní body
GPS (Global Positioning System) — je satelitní navigační systém tvořený 31 aktivními satelity na oběžné dráze ve výšce přibližně 20 200 km. Na mobilních zařízeních GPS čip přijímá signály ze satelitů a vypočítává souřadnice na základě trilaterace — měření doby šíření signálu z několika satelitů. Lokalizační služby v mobilních operačních systémech přidávají k GPS data z Wi-Fi přístupových bodů a mobilních vysílačů pro urychlení určování souřadnic (A-GPS) a zlepšení přesnosti uvnitř budov. Podle údajů GPS.gov (2024) je přesnost civilního GPS 3-5 metrů na jasné obloze a až 15 metrů v podmínkách husté zástavby.
Moderní mobilní zařízení podporují nejen americký systém GPS, ale i další globální navigační systémy: ruský GLONASS (24 satelitů), evropský Galileo (28 satelitů) a čínský BeiDou. Současná podpora více systémů zvyšuje přesnost a rychlost určování souřadnic — zařízení může pro výpočet polohy využít až 40 satelitů z různých systémů. Na iOS a Androidu probíhá výběr satelitního systému automaticky na úrovni hardwarového čipu, vývojář to nemusí řídit.
Proces určování polohy na mobilním zařízení se skládá z několika fází: sběr dat ze zdrojů (satelity, Wi-Fi, mobilní sítě), filtrování a korekce chyb, výpočet souřadnic a předání výsledku aplikaci. Operační systém řídí tento proces prostřednictvím jednotné geolokační služby, která optimalizuje práci všech zdrojů pro úsporu baterie. Níže jsou popsány tři hlavní zdroje údajů o poloze.
Satelitní navigace poskytuje maximální přesnost (3-5 metrů), ale vyžaduje přímý výhled na oblohu. Uvnitř budov nebo v husté městské zástavbě může být GPS signál zeslaben nebo zcela ztracen. Doba prvního určení polohy (TTFF) je 30-60 sekund při studeném startu a 5-10 sekund při teplém startu. A-GPS (Assisted GPS) urychluje start stažením efemerid satelitů přes internet místo čekání na data ze satelitů.
Wi-Fi polohování využívá databázi MAC adres přístupových bodů se známými souřadnicemi. Přesnost je 10-50 metrů v dosahu Wi-Fi. Mobilní vysílače poskytují přesnost od 100 metrů do několika kilometrů v závislosti na hustotě vysílačů. Kombinace všech zdrojů (Fused Location) umožňuje získat souřadnice s rozumnou přesností při minimální spotřebě energie — zejména když je GPS čip vypnutý nebo satelitní signál není dostupný.
Na obou platformách jsou lokalizační služby implementovány prostřednictvím systémových API s různou úrovní abstrakce. Android používá FusedLocationProviderClient z Google Play Services, iOS — CLLocationManager z Core Location. Obě API umožňují požádat o jednorázovou polohu nebo se přihlásit k pravidelným aktualizacím. Níže je uveden příklad získávání souřadnic na Androidu pomocí Fused Location Provider v Kotlinu.
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("Poloha", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
V příkladu je LocationRequest nakonfigurován s prioritou HIGH_ACCURACY — to zapíná GPS pro maximální přesnost. setIntervalMillis nastavuje požadovaný interval aktualizace (5 sekund), setMinUpdateIntervalMillis — minimální interval (2 sekundy). Callback onLocationResult je volán pokaždé, když systém obdrží nové souřadnice. Před voláním requestLocationUpdates je důležité zkontrolovat oprávnění — jinak aplikace spadne s výjimkou 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)")
}
Na iOS desiredAccuracy určuje přesnost požadavku: kCLLocationAccuracyBest využívá všechny dostupné zdroje (GPS + Wi-Fi + mobilní sítě). Po požádání o oprávnění pomocí requestWhenUseAuthorization systém zobrazí uživateli dialog. Delegát didUpdateLocations obdrží pole objektů CLLocation se souřadnicemi, nadmořskou výškou, rychlostí a směrem. Pro zastavení aktualizací se volá stopUpdatingLocation pro úsporu baterie.
Přístup k geolokaci vyžaduje výslovné povolení uživatele na obou platformách. Na Androidu se používají oprávnění ACCESS_FINE_LOCATION (GPS) a ACCESS_COARSE_LOCATION (Wi-Fi/mobilní sítě). Od Androidu 10 vyžaduje přístup na pozadí samostatné oprávnění ACCESS_BACKGROUND_LOCATION. Na iOS jsou k dispozici tři úrovně: requestWhenInUseAuthorization (pouze při aktivní aplikaci), requestAlwaysAuthorization (na pozadí) a časová razítka pro přesné polohování. Apple vyžaduje povinný popis v Info.plist: NSLocationWhenInUseUsageDescription nebo NSLocationAlwaysAndWhenInUseUsageDescription. Bez těchto klíčů je žádost o oprávnění ignorována.
Nepřetržité používání GPS výrazně snižuje výdrž baterie — až o 30% za hodinu nepřetržitého provozu na maximální přesnost. Pro optimalizaci spotřeby energie se doporučuje používat geolokaci pouze když je to nutné a zastavit aktualizace při přechodu aplikace na pozadí. Na Androidu FusedLocationProviderClient automaticky přepíná mezi GPS a síťovými zdroji v závislosti na dostupnosti a prioritě požadavku. Na iOS používejte significant-change location service (startMonitoringSignificantLocationChanges) pro aktualizace s minimální spotřebou energie — přesnost je nižší (až 500 metrů), ale baterie se téměř nespotřebovává. Také praktikujte dávkové zpracování: sbírejte souřadnice v intervalu 5-10 minut a odesílejte na server jedním požadavkem přes WorkManager na Androidu nebo BGTaskScheduler na iOS. Snížení frekvence požadavků z 1 sekundy na 30 sekund snižuje spotřebu energie geolokace o 85%.
Geolokace se používá v širokém spektru mobilních aplikací: od navigátorů až po doručovací služby. Nejčastější scénáře zahrnují zobrazení uživatele na mapě, geotargeting reklamy, sledování kurýrů, geofence pro push notifikace a sledování fitness aktivit. Každý scénář vyžaduje vlastní přístup k přesnosti a frekvenci aktualizací. Níže je uvedena tabulka s doporučeními konfigurace pro různé typy aplikací.
| Typ aplikace | Přesnost | Interval | Režim na pozadí |
|---|---|---|---|
| Navigátor | HIGH (GPS) | 1-2 s | Ano |
| Doručování | BALANCED (GPS+Wi-Fi) | 10-30 s | Ano |
| Počasí | LOW (Wi-Fi/mobilní sítě) | Jednorázově | Ne |
| Sociální síť | BALANCED | Při otevření | Ne |
| Fitness | HIGH (GPS) | 5-10 s | Ano |
Při navrhování geolokační funkcionality je důležité zvážit, že uživatelé mohou kdykoli odvolat oprávnění prostřednictvím nastavení systému. Aplikace by měla správně zpracovávat situaci, kdy geolokace není k dispozici, a zobrazit srozumitelné vysvětlení, proč je funkcionalita omezena.
Geofencing — technologie vytváření virtuálních hranic na mapě, při jejichž překročení aplikace obdrží oznámení. Na Androidu jsou geofence implementovány prostřednictvím GeofencingClient z Google Play Services, na iOS — prostřednictvím CLCircularRegion z Core Location. Při vstupu nebo výstupu ze zóny systém probudí aplikaci a odešle událost, i když je aplikace zavřená nebo minimalizovaná. To se používá pro push notifikace při přiblížení k obchodu, připomínky úkolů na základě polohy a automatizaci IoT zařízení. Maximální počet geofence je omezen: na Androidu — 100, na iOS — 20 současně. Minimální poloměr zóny je 50 metrů na obou platformách, jinak systém nemusí zareagovat kvůli nepřesnosti určování polohy. Při vstupu do zóny systém spustí Intent na Androidu nebo zavolá delegáta locationManager:didEnterRegion na iOS.
Často kladené dotazy
GPS v chytrém telefonu je vestavěný přijímač signálů satelitního navigačního systému, který určuje souřadnice s přesností 3-5 metrů. Na zařízeních jsou také k dispozici GLONASS, Galileo a BeiDou pro zvýšení přesnosti a rychlosti polohování.
GPS je pouze satelitní metoda určování souřadnic. Lokalizační služby kombinují GPS, Wi-Fi polohování a data z mobilních vysílačů pro rychlejší a energeticky účinnější určování polohy, zejména uvnitř budov.
Zavolejte requestWhenInUseAuthorization() nebo requestAlwaysAuthorization() na instanci CLLocationManager. Předem přidejte NSLocationWhenInUseUsageDescription do Info.plist s jasným textem důvodu použití geolokace.
Používejte FusedLocationProviderClient na Androidu a significant-change location service na iOS. Zvyšte interval mezi požadavky na 10-30 sekund, vypněte aktualizace, když je obrazovka vypnutá, a aplikujte dávkové odesílání souřadnic na server.
Ano, bez GPS lze určit přibližnou polohu pomocí Wi-Fi přístupových bodů (přesnost 10-50 metrů) nebo mobilních vysílačů (přesnost 100-5000 metrů). Na Androidu se k tomu používá ACCESS_COARSE_LOCATION.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také