GPS и службе геолокације у мобилним апликацијама — су API за одређивање физичке локације уређаја помоћу сателита, Wi-Fi и мобилних мрежа. Према подацима Google Android Location Guide (2025), преко 60% мобилних апликација користи податке о локацији за персонализацију садржаја. Fused Location Provider на Android-у обједињује више извора ради повећања прецизности и смањења потрошње енергије.
Главне тачке
GPS (Global Positioning System) — је сателитски навигациони систем који се састоји од 31 активног сателита у орбити на висини од приближно 20 200 km. На мобилним уређајима, GPS чип прима сигнале од сателита и израчунава координате на основу трилатерације — мерења времена преноса сигнала са више сателита. Службе геолокације у мобилним оперативним системима додају GPS-у податке са Wi-Fi приступних тачака и базних станица мобилне телефоније ради убрзавања одређивања координата (A-GPS) и побољшања прецизности у затвореном простору. Према подацима GPS.gov (2024), прецизност цивилног GPS-а је 3-5 метара на чистом небу и до 15 метара у условима густе изградње.
Савремени мобилни уређаји подржавају не само амерички GPS систем, већ и друге глобалне навигационе системе: руски GLONASS (24 сателита), европски Galileo (28 сателита) и кинески BeiDou. Истовремена подршка више система повећава прецизност и брзину одређивања координата — уређај може да користи до 40 сателита из различитих система за израчунавање позиције. На iOS и Android, избор сателитског система се врши аутоматски на нивоу хардверског чипа, програмер не мора да управља овим.
Процес одређивања локације на мобилном уређају састоји се од неколико фаза: прикупљање података из извора (сателити, Wi-Fi, мобилне мреже), филтрирање и корекција грешака, израчунавање координата и пренос резултата апликацији. Оперативни систем управља овим процесом путем јединствене службе за геолокацију, која оптимизује рад свих извора ради уштеде батерије. У наставку су описана три главна извора података о локацији.
Сателитска навигација обезбеђује максималну прецизност (3-5 метара), али захтева директну видљивост неба. У затвореном простору или густој урбаној средини, GPS сигнал може бити ослабљен или потпуно изгубљен. Време првог одређивања позиције (TTFF) износи 30-60 секунди при хладном старту и 5-10 секунди при топлом старту. A-GPS (Assisted GPS) убрзава старт преузимањем ефемерида сателита путем интернета уместо чекања података са сателита.
Wi-Fi позиционирање користи базу података MAC адреса приступних тачака са познатим координатама. Прецизност износи 10-50 метара у домету Wi-Fi-ја. Базне станице мобилне телефоније дају прецизност од 100 метара до неколико километара у зависности од густине станица. Комбинација свих извора (Fused Location) омогућава добијање координата са разумном прецизношћу уз минималну потрошњу енергије — посебно када је GPS чип искључен или сателитски сигнал није доступан.
На обе платформе, службе геолокације су имплементиране кроз системске API-је са различитим степеном апстракције. Android користи FusedLocationProviderClient из Google Play Services, iOS — CLLocationManager из Core Location. Оба API-ја омогућавају захтевање једнократне позиције или претплату на редовна ажурирања. Испод је пример добијања координата на Android-у помоћу Fused Location Provider у 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("Локација", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
У примеру, LocationRequest се конфигурише са приоритетом HIGH_ACCURACY — ово укључује GPS за максималну прецизност. setIntervalMillis поставља жељени интервал ажурирања (5 секунди), setMinUpdateIntervalMillis — минимални (2 секунде). Callback onLocationResult се позива сваки пут када систем добије нове координате. Важно је проверити дозволу пре позивања requestLocationUpdates — у супротном апликација ће пасти са 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)")
}
На iOS-у, desiredAccuracy одређује прецизност захтева: kCLLocationAccuracyBest користи све доступне изворе (GPS + Wi-Fi + мобилне мреже). Након захтева за дозволу путем requestWhenUseAuthorization, систем приказује дијалог кориснику. Делегат didUpdateLocations прима низ CLLocation објеката са координатама, висином, брзином и правцем. За заустављање ажурирања позива се stopUpdatingLocation ради уштеде батерије.
Приступ геолокацији захтева експлицитну дозволу корисника на обе платформе. На Android-у се користе дозволе ACCESS_FINE_LOCATION (GPS) и ACCESS_COARSE_LOCATION (Wi-Fi/мобилне мреже). Почевши од Android 10, приступ у позадини захтева посебну дозволу ACCESS_BACKGROUND_LOCATION. На iOS-у су доступна три нивоа: requestWhenInUseAuthorization (само када је апликација активна), requestAlwaysAuthorization (у позадини) и временске ознаке за прецизно позиционирање. Apple захтева обавезни опис у Info.plist: NSLocationWhenInUseUsageDescription или NSLocationAlwaysAndWhenInUseUsageDescription. Без ових кључева, захтев за дозволу се игнорише.
Континуирано коришћење GPS-а значајно смањује трајање батерије — до 30% на сат непрекидног рада при максималној прецизности. За оптимизацију потрошње енергије препоручује се коришћење геолокације само када је неопходна и прекидање ажурирања када апликација пређе у позадину. На Android-у, FusedLocationProviderClient аутоматски прелази између GPS-а и мрежних извора у зависности од доступности и приоритета захтева. На iOS-у користите significant-change location service (startMonitoringSignificantLocationChanges) за ажурирања са минималном потрошњом енергије — прецизност је нижа (до 500 метара), али се батерија готово не троши. Такође практикујте групну обраду: прикупљајте координате у интервалу од 5-10 минута и шаљите на сервер једним захтевом путем WorkManager на Android-у или BGTaskScheduler на iOS-у. Смањење учесталости захтева са 1 секунде на 30 секунди смањује потрошњу енергије геолокације за 85%.
Геолокација се користи у широком спектру мобилних апликација: од навигатора до услуга доставе. Најчешћи сценарији укључују приказ корисника на мапи, геотаргетирање реклама, праћење курира, геозоне за push обавештења и праћење фитнес активности. Сваки сценариј захтева сопствени приступ прецизности и учесталости ажурирања. Испод је табела са препорукама за подешавање за различите типове апликација.
| Тип апликације | Прецизност | Интервал | Позадински режим |
|---|---|---|---|
| Навигатор | HIGH (GPS) | 1-2 сек | Да |
| Достава | BALANCED (GPS+Wi-Fi) | 10-30 сек | Да |
| Време | LOW (Wi-Fi/мобилне мреже) | Једнократно | Не |
| Друштвена мрежа | BALANCED | При отварању | Не |
| Фитнес | HIGH (GPS) | 5-10 сек | Да |
При пројектовању функционалности геолокације важно је узети у обзир да корисници могу у било ком тренутку опозвати дозволу кроз подешавања система. Апликација треба правилно да обрађује ситуацију када геолокација није доступна и да прикаже разумљиво објашњење зашто је функционалност ограничена.
Geofencing — технологија стварања виртуелних граница на мапи, при чијем преласку апликација добија обавештење. На Android-у, геозоне се имплементирају кроз GeofencingClient из Google Play Services, на iOS-у — кроз CLCircularRegion из Core Location. При уласку или изласку из зоне, систем буди апликацију и шаље догађај, чак и ако је апликација затворена или сведена на минимум. Ово се користи за push обавештења при приближавању продавници, подсетнике о задацима на основу локације и аутоматизацију IoT уређаја. Максималан број геозона је ограничен: на Android-у — 100, на iOS-у — 20 истовремено. Минимални радијус зоне је 50 метара на обе платформе, у супротном систем можда неће реаговати због грешке одређивања локације. При уласку у зону, систем покреће Intent на Android-у или позива делегата locationManager:didEnterRegion на iOS-у.
Често постављана питања
GPS у паметном телефону је уграђени пријемник сигнала сателитског навигационог система, који одређује координате са прецизношћу од 3-5 метара. На уређајима су такође доступни GLONASS, Galileo и BeiDou за повећање прецизности и брзине позиционирања.
GPS је само сателитски метод одређивања координата. Службе геолокације обједињују GPS, Wi-Fi позиционирање и податке базних станица мобилне телефоније за брже и енергетски ефикасније одређивање локације, посебно у затвореном простору.
Позовите requestWhenInUseAuthorization() или requestAlwaysAuthorization() на инстанци CLLocationManager. Претходно додајте NSLocationWhenInUseUsageDescription у Info.plist са разумљивим текстом разлога коришћења геолокације.
Користите FusedLocationProviderClient на Android-у и significant-change location service на iOS-у. Повећајте интервал између захтева на 10-30 секунди, искључите ажурирања када је екран искључен и примените групно слање координата на сервер.
Да, без GPS-а се може одредити приближна локација путем Wi-Fi приступних тачака (прецизност 10-50 метара) или базних станица мобилне телефоније (прецизност 100-5000 метара). На Android-у се за то користи ACCESS_COARSE_LOCATION.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође