GPS és helymeghatározó szolgáltatások mobilalkalmazásokban — API-k az eszköz fizikai helyének meghatározásához műholdak, Wi-Fi és mobilhálózatok segítségével. A Google Android Location Guide (2025) szerint a mobilalkalmazások több mint 60%-a használ helyadatokat a tartalom személyre szabásához. A Fused Location Provider Androidon több forrást egyesít a pontosság növelése és az energiafogyasztás csökkentése érdekében.
Főbb pontok
GPS (Global Positioning System) — egy műholdas navigációs rendszer, amely 31 aktív műholdból áll, körülbelül 20 200 km magas pályán. Mobil eszközökön a GPS-chip jeleket fogad a műholdaktól, és a trilateráció — a jel több műholdtól számított terjedési idejének mérése — alapján számítja ki a koordinátákat. A mobil operációs rendszerek helymeghatározó szolgáltatásai a GPS-hez hozzáadják a Wi-Fi hozzáférési pontok és mobiltelefon-tornyok adatait a koordináták meghatározásának gyorsítása (A-GPS) és a beltéri pontosság javítása érdekében. A GPS.gov (2024) adatai szerint a polgári GPS pontossága tiszta égbolt mellett 3-5 méter, sűrű beépítettség esetén akár 15 méter.
A modern mobil eszközök nemcsak az amerikai GPS rendszert, hanem más globális navigációs rendszereket is támogatnak: az orosz GLONASS-t (24 műhold), az európai Galileo-t (28 műhold) és a kínai BeiDou-t. Több rendszer egyidejű támogatása növeli a koordináták meghatározásának pontosságát és sebességét — az eszköz akár 40 műholdat is használhat különböző rendszerekből a pozíció kiszámításához. iOS-en és Androidon a műholdrendszer kiválasztása automatikusan, hardverchip szinten történik, a fejlesztőnek nem kell ezt kezelnie.
A helymeghatározás folyamata egy mobileszközön több szakaszból áll: adatgyűjtés a forrásokból (műholdak, Wi-Fi, mobilhálózatok), hibák szűrése és korrekciója, koordináták kiszámítása és az eredmény továbbítása az alkalmazásnak. Az operációs rendszer ezt a folyamatot egy egységes helymeghatározó szolgáltatáson keresztül kezeli, amely optimalizálja az összes forrás munkáját az akkumulátor kímélése érdekében. Az alábbiakban a helyadatok három fő forrása kerül bemutatásra.
Műholdas navigáció maximális pontosságot (3-5 méter) biztosít, de közvetlen égbolt látványt igényel. Beltérben vagy sűrű városi környezetben a GPS jel gyengülhet vagy teljesen elveszhet. Az első pozíció meghatározásának ideje (TTFF) hidegindításkor 30-60 másodperc, melegindításkor 5-10 másodperc. Az A-GPS (Assisted GPS) felgyorsítja az indulást a műholdak efemerisz adatainak interneten keresztüli letöltésével, ahelyett hogy a műholdaktól várná az adatokat.
Wi-Fi pozicionálás az ismert koordinátákkal rendelkező hozzáférési pontok MAC-címeinek adatbázisát használja. A pontosság Wi-Fi hatókörben 10-50 méter. A mobiltelefon-tornyok a tornyok sűrűségétől függően 100 métertől több kilométerig terjedő pontosságot adnak. Az összes forrás kombinációja (Fused Location) lehetővé teszi a koordináták ésszerű pontosságú megszerzését minimális energiafogyasztás mellett — különösen amikor a GPS-chip ki van kapcsolva vagy a műholdjel nem elérhető.
Mindkét platformon a helymeghatározó szolgáltatások rendszer API-kon keresztül vannak megvalósítva, különböző absztrakciós szintekkel. Az Android a Google Play Services FusedLocationProviderClient-jét, az iOS a Core Location CLLocationManager-jét használja. Mindkét API lehetővé teszi egyszeri pozíció kérését vagy rendszeres frissítésekre való feliratkozást. Az alábbiakban egy példa látható a koordináták lekérésére Androidon a Fused Location Provider segítségével Kotlinban.
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("Hely", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
A példában a LocationRequest HIGH_ACCURACY prioritással van konfigurálva — ez bekapcsolja a GPS-t a maximális pontosság érdekében. A setIntervalMillis beállítja a kívánt frissítési intervallumot (5 másodperc), a setMinUpdateIntervalMillis a minimális intervallumot (2 másodperc). Az onLocationResult callback minden alkalommal meghívásra kerül, amikor a rendszer új koordinátákat kap. Fontos ellenőrizni az engedélyt a requestLocationUpdates meghívása előtt — különben az alkalmazás SecurityException kivétellel összeomlik.
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)")
}
iOS-en a desiredAccuracy határozza meg a kérés pontosságát: a kCLLocationAccuracyBest az összes elérhető forrást használja (GPS + Wi-Fi + mobilhálózatok). A requestWhenUseAuthorization-on keresztüli engedélykérés után a rendszer párbeszédablakot jelenít meg a felhasználónak. A didUpdateLocations delegate koordinátákat, magasságot, sebességet és irányt tartalmazó CLLocation objektumok tömbjét kapja. A frissítések leállításához a stopUpdatingLocation hívódik meg az akkumulátor kímélése érdekében.
A helymeghatározáshoz való hozzáférés mindkét platformon kifejezett felhasználói engedélyt igényel. Androidon az ACCESS_FINE_LOCATION (GPS) és ACCESS_COARSE_LOCATION (Wi-Fi/mobilhálózatok) engedélyek használatosak. Android 10-től kezdve a háttérbeli hozzáféréshez külön ACCESS_BACKGROUND_LOCATION engedély szükséges. iOS-en három szint érhető el: requestWhenInUseAuthorization (csak aktív alkalmazás esetén), requestAlwaysAuthorization (háttérben) és időbélyegek a pontos pozicionáláshoz. Az Apple kötelező leírást ír elő az Info.plist-ben: NSLocationWhenInUseUsageDescription vagy NSLocationAlwaysAndWhenInUseUsageDescription. E kulcsok nélkül az engedélykérés figyelmen kívül marad.
A GPS folyamatos használata jelentősen csökkenti az akkumulátor élettartamát — akár 30%-kal egy óra folyamatos, maximális pontosságú működés alatt. Az energiafogyasztás optimalizálásához ajánlott csak szükség esetén használni a helymeghatározást, és leállítani a frissítéseket, amikor az alkalmazás háttérbe kerül. Androidon a FusedLocationProviderClient automatikusan vált a GPS és a hálózati források között az elérhetőségtől és a kérés prioritásától függően. iOS-en használja a jelentős helyváltozás figyelő szolgáltatást (startMonitoringSignificantLocationChanges) a minimális energiafogyasztású frissítésekhez — a pontosság alacsonyabb (akár 500 méter), de az akkumulátor szinte nem merül. Gyakorolja továbbá a kötegelt feldolgozást: gyűjtse a koordinátákat 5-10 perces intervallumokban, és küldje el a szervernek egyetlen kéréssel a WorkManager segítségével Androidon vagy a BGTaskScheduler segítségével iOS-en. A kérések gyakoriságának 1 másodpercről 30 másodpercre csökkentése 85%-kal mérsékli a helymeghatározás energiafogyasztását.
Helymeghatározást a mobilalkalmazások széles körében használják: a navigátoroktól a kézbesítési szolgáltatásokig. A leggyakoribb forgatókönyvek közé tartozik a felhasználó térképen való megjelenítése, a hirdetések célzása, a futárok nyomon követése, a geokerítések push értesítésekhez és a fitnesztevékenységek követése. Minden forgatókönyv saját megközelítést igényel a pontosság és a frissítés gyakorisága tekintetében. Az alábbi táblázat konfigurációs ajánlásokat tartalmaz különböző alkalmazástípusokhoz.
| Alkalmazás típusa | Pontosság | Intervallum | Háttérmód |
|---|---|---|---|
| Navigátor | HIGH (GPS) | 1-2 mp | Igen |
| Kézbesítés | BALANCED (GPS+Wi-Fi) | 10-30 mp | Igen |
| Időjárás | LOW (Wi-Fi/mobilhálózatok) | Egyszeri | Nem |
| Közösségi média | BALANCED | Megnyitáskor | Nem |
| Fitnesz | HIGH (GPS) | 5-10 mp | Igen |
A helymeghatározási funkció tervezésekor fontos figyelembe venni, hogy a felhasználók bármikor visszavonhatják az engedélyt a rendszerbeállításokon keresztül. Az alkalmazásnak megfelelően kell kezelnie azt a helyzetet, amikor a helymeghatározás nem elérhető, és érthető magyarázatot kell adnia arról, hogy a funkció miért korlátozott.
Geofencing — egy technológia virtuális határok létrehozására a térképen, amelyek átlépésekor az alkalmazás értesítést kap. Androidon a geokerítések a Google Play Services GeofencingClient-jén keresztül, iOS-en a Core Location CLCircularRegion-jén keresztül valósulnak meg. Egy zónába való belépéskor vagy onnan való kilépéskor a rendszer felébreszti az alkalmazást és eseményt küld, még akkor is, ha az alkalmazás zárva vagy minimalizálva van. Ezt push értesítésekhez használják üzlet megközelítésekor, helyalapú feladat-emlékeztetőkhöz és IoT-eszközök automatizálásához. A geokerítések maximális száma korlátozott: Androidon — 100, iOS-en — 20 egyidejűleg. A zóna minimális sugara 50 méter mindkét platformon, ellenkező esetben a rendszer a helymeghatározási hiba miatt nem biztos, hogy működik. Egy zónába való belépéskor a rendszer Intent-et indít Androidon, vagy meghívja a locationManager:didEnterRegion delegáltat iOS-en.
Gyakran ismételt kérdések
A GPS az okostelefonban egy beépített vevője a műholdas navigációs rendszer jeleinek, amely 3-5 méteres pontossággal határozza meg a koordinátákat. Az eszközökön elérhető továbbá a GLONASS, Galileo és BeiDou a pontosság és a pozicionálás sebességének növelése érdekében.
A GPS csak a koordináták meghatározásának műholdas módszere. A helymeghatározó szolgáltatások egyesítik a GPS-t, a Wi-Fi pozicionálást és a mobiltelefon-tornyok adatait a gyorsabb és energiatakarékosabb helymeghatározás érdekében, különösen beltéren.
Hívja meg a requestWhenInUseAuthorization() vagy requestAlwaysAuthorization() metódust egy CLLocationManager példányon. Előzőleg adja hozzá az NSLocationWhenInUseUsageDescription kulcsot az Info.plist-hez a helymeghatározás használatának indoklásával.
Használja a FusedLocationProviderClient szolgáltatást Androidon és a jelentős helyváltozás figyelő szolgáltatást iOS-en. Növelje a kérések közötti intervallumot 10-30 másodpercre, kapcsolja ki a frissítéseket, amikor a képernyő ki van kapcsolva, és alkalmazzon kötegelt koordináta-küldést a szerverre.
Igen, GPS nélkül is meghatározható a hozzávetőleges hely Wi-Fi hozzáférési pontok (10-50 méteres pontosság) vagy mobiltelefon-tornyok (100-5000 méteres pontosság) segítségével. Androidon ehhez az ACCESS_COARSE_LOCATION engedély használatos.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is