GPS și serviciile de geolocalizare în aplicațiile mobile — sunt API-uri pentru determinarea locației fizice a dispozitivului cu ajutorul sateliților, Wi-Fi și rețelelor mobile. Conform Google Android Location Guide (2025), peste 60% dintre aplicațiile mobile utilizează datele de locație pentru personalizarea conținutului. Fused Location Provider pe Android combină mai multe surse pentru a crește precizia și a reduce consumul de energie.
Principalele puncte
GPS (Global Positioning System) — este un sistem de navigație prin satelit format din 31 de sateliți activi pe orbită la o altitudine de aproximativ 20 200 km. Pe dispozitivele mobile, cipul GPS recepționează semnale de la sateliți și calculează coordonatele pe baza trilaterației — măsurarea timpului de propagare a semnalului de la mai mulți sateliți. Serviciile de geolocalizare din sistemele de operare mobile adaugă la GPS date de la punctele de acces Wi-Fi și turnurile de telefonie mobilă pentru a accelera determinarea coordonatelor (A-GPS) și a îmbunătăți precizia în interiorul clădirilor. Conform datelor GPS.gov (2024), precizia GPS-ului civil este de 3-5 metri pe cer senin și până la 15 metri în condiții de construcție densă.
Dispozitivele mobile moderne suportă nu doar sistemul american GPS, ci și alte sisteme globale de navigație: GLONASS rusesc (24 de sateliți), Galileo european (28 de sateliți) și BeiDou chinezesc. Suportul simultan al mai multor sisteme crește precizia și viteza de determinare a coordonatelor — dispozitivul poate utiliza până la 40 de sateliți din diferite sisteme pentru calcularea poziției. Pe iOS și Android, selectarea sistemului satelitar se face automat la nivelul cipului hardware, dezvoltatorul nu trebuie să gestioneze acest lucru.
Procesul de determinare a locației pe un dispozitiv mobil constă în mai multe etape: colectarea datelor de la surse (sateliți, Wi-Fi, rețele mobile), filtrarea și corectarea erorilor, calcularea coordonatelor și transmiterea rezultatului către aplicație. Sistemul de operare gestionează acest proces printr-un serviciu unic de geolocalizare, care optimizează activitatea tuturor surselor pentru economisirea bateriei. Mai jos sunt descrise cele trei surse principale de date de locație.
Navigația prin satelit asigură precizie maximă (3-5 metri), dar necesită vizibilitate directă a cerului. În interiorul clădirilor sau în zone urbane dense, semnalul GPS poate fi slăbit sau pierdut complet. Timpul până la prima determinare a poziției (TTFF) este de 30-60 de secunde la pornirea rece și 5-10 secunde la pornirea caldă. A-GPS (Assisted GPS) accelerează pornirea prin descărcarea efemeridelor sateliților prin internet, în loc să aștepte datele de la sateliți.
Wi-Fi poziționarea utilizează o bază de date cu adrese MAC ale punctelor de acces cu coordonate cunoscute. Precizia este de 10-50 de metri în raza de acțiune Wi-Fi. Turnurile de telefonie mobilă oferă o precizie de la 100 de metri până la câțiva kilometri, în funcție de densitatea turnurilor. Combinarea tuturor surselor (Fused Location) permite obținerea coordonatelor cu o precizie rezonabilă la un consum minim de energie — mai ales când cipul GPS este oprit sau semnalul satelitar nu este disponibil.
Pe ambele platforme, serviciile de geolocalizare sunt implementate prin API-uri system cu diferite grade de abstractizare. Android utilizează FusedLocationProviderClient din Google Play Services, iOS — CLLocationManager din Core Location. Ambele API-uri permit solicitarea unei poziții unice sau abonarea la actualizări regulate. Mai jos este un exemplu de obținere a coordonatelor pe Android folosind Fused Location Provider în 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("Locație", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
În exemplu, LocationRequest este configurat cu prioritatea HIGH_ACCURACY — aceasta activează GPS-ul pentru precizie maximă. setIntervalMillis setează intervalul dorit de actualizare (5 secunde), setMinUpdateIntervalMillis — intervalul minim (2 secunde). Callback-ul onLocationResult este apelat de fiecare dată când sistemul primește coordonate noi. Este important să verificați permisiunea înainte de a apela requestLocationUpdates — altfel aplicația va cădea cu 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)")
}
Pe iOS, desiredAccuracy determină precizia cererii: kCLLocationAccuracyBest utilizează toate sursele disponibile (GPS + Wi-Fi + rețele mobile). După solicitarea permisiunii prin requestWhenUseAuthorization, sistemul afișează un dialog utilizatorului. Delegatul didUpdateLocations primește un array de obiecte CLLocation cu coordonate, altitudine, viteză și direcție. Pentru a opri actualizările, se apelează stopUpdatingLocation pentru a economisi bateria.
Accesul la geolocalizare necesită permisiunea explicită a utilizatorului pe ambele platforme. Pe Android se utilizează permisiunile ACCESS_FINE_LOCATION (GPS) și ACCESS_COARSE_LOCATION (Wi-Fi/rețele mobile). Începând cu Android 10, accesul în fundal necesită o permisiune separată ACCESS_BACKGROUND_LOCATION. Pe iOS sunt disponibile trei niveluri: requestWhenInUseAuthorization (doar când aplicația este activă), requestAlwaysAuthorization (în fundal) și marcaje temporale pentru poziționare precisă. Apple solicită o descriere obligatorie în Info.plist: NSLocationWhenInUseUsageDescription sau NSLocationAlwaysAndWhenInUseUsageDescription. Fără aceste chei, cererea de permisiune este ignorată.
Utilizarea continuă a GPS-ului reduce semnificativ durata de viață a bateriei — până la 30% într-o oră de funcționare continuă la precizie maximă. Pentru optimizarea consumului de energie, se recomandă utilizarea geolocalizării doar când este necesar și oprirea actualizărilor când aplicația trece în fundal. Pe Android, FusedLocationProviderClient comută automat între GPS și sursele de rețea în funcție de disponibilitate și prioritatea cererii. Pe iOS, utilizați significant-change location service (startMonitoringSignificantLocationChanges) pentru actualizări cu consum minim de energie — precizia este mai scăzută (până la 500 de metri), dar bateria aproape că nu se consumă. De asemenea, practicați procesarea în loturi: colectați coordonatele la un interval de 5-10 minute și trimiteți-le către server printr-o singură cerere prin WorkManager pe Android sau BGTaskScheduler pe iOS. Reducerea frecvenței cererilor de la 1 secundă la 30 de secunde reduce consumul de energie al geolocalizării cu 85%.
Geolocalizarea este utilizată într-o gamă largă de aplicații mobile: de la navigatoare până la servicii de livrare. Cele mai comune scenarii includ afișarea utilizatorului pe hartă, geotargetarea publicității, urmărirea curierilor, geozone pentru notificări push și urmărirea activității fitness. Fiecare scenariu necesită propria abordare a preciziei și frecvenței actualizărilor. Mai jos este un tabel cu recomandări de configurare pentru diferite tipuri de aplicații.
| Tipul aplicației | Precizie | Interval | Mod fundal |
|---|---|---|---|
| Navigator | HIGH (GPS) | 1-2 sec | Da |
| Livrare | BALANCED (GPS+Wi-Fi) | 10-30 sec | Da |
| Vreme | LOW (Wi-Fi/rețele mobile) | O singură dată | Nu |
| Rețea socială | BALANCED | La deschidere | Nu |
| Fitness | HIGH (GPS) | 5-10 sec | Da |
La proiectarea funcționalității de geolocalizare, este important de luat în considerare că utilizatorii pot revoca permisiunea în orice moment prin setările sistemului. Aplicația trebuie să gestioneze corect situația când geolocalizarea nu este disponibilă și să afișeze o explicație clară despre motivul pentru care funcționalitatea este limitată.
Geofencing — tehnologia de creare a granițelor virtuale pe hartă, la traversarea cărora aplicația primește o notificare. Pe Android, geozonele sunt implementate prin GeofencingClient din Google Play Services, pe iOS — prin CLCircularRegion din Core Location. La intrarea sau ieșirea dintr-o zonă, sistemul trezește aplicația și trimite un eveniment, chiar dacă aplicația este închisă sau minimizată. Aceasta este utilizată pentru notificări push la apropierea de un magazin, memento-uri de sarcini pe bază de locație și automatizarea dispozitivelor IoT. Numărul maxim de geozone este limitat: pe Android — 100, pe iOS — 20 simultan. Raza minimă a zonei este de 50 de metri pe ambele platforme, altfel sistemul poate să nu funcționeze din cauza erorii de determinare a locației. La intrarea în zonă, sistemul pornește un Intent pe Android sau apelează delegatul locationManager:didEnterRegion pe iOS.
Întrebări frecvente
GPS în smartphone este un receptor încorporat al semnalelor sistemului de navigație prin satelit, care determină coordonatele cu o precizie de 3-5 metri. Pe dispozitive sunt disponibile și GLONASS, Galileo și BeiDou pentru creșterea preciziei și vitezei de poziționare.
GPS este doar metoda satelitară de determinare a coordonatelor. Serviciile de geolocalizare combină GPS, poziționarea Wi-Fi și datele turnurilor de telefonie mobilă pentru o determinare mai rapidă și mai eficientă energetic a locației, în special în interiorul clădirilor.
Apelați requestWhenInUseAuthorization() sau requestAlwaysAuthorization() pe o instanță CLLocationManager. Adăugați anterior NSLocationWhenInUseUsageDescription în Info.plist cu un text clar al motivului utilizării geolocalizării.
Utilizați FusedLocationProviderClient pe Android și significant-change location service pe iOS. Măriți intervalul între cereri la 10-30 de secunde, dezactivați actualizările când ecranul este oprit și aplicați trimiterea în loturi a coordonatelor către server.
Da, fără GPS se poate determina locația aproximativă prin puncte de acces Wi-Fi (precizie 10-50 de metri) sau turnuri de telefonie mobilă (precizie 100-5000 de metri). Pe Android, pentru aceasta se utilizează ACCESS_COARSE_LOCATION.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și