GPS va mobil ilovalarda geolokatsiya xizmatlari — sunʼyo‘ldoshlar, Wi-Fi va mobil tarmoqlar yordamida qurilmaning jismoniy joylashuvini aniqlash uchun API hisoblanadi. Google Android Location Guide (2025) ma’lumotlariga ko‘ra, mobil ilovalarning 60% dan ortig‘i kontentni shaxsiylashtirish uchun joylashuv ma’lumotlaridan foydalanadi. Android-da Fused Location Provider aniqlikni oshirish va energiya sarfini kamaytirish uchun bir nechta manbalarni birlashtiradi.
Asosiy fikrlar
GPS (Global Positioning System) — taxminan 20 200 km balandlikdagi orbitada 31 ta faol sunʼyo‘ldoshga ega bo‘lgan sunʼyo‘ldosh navigatsiya tizimidir. Mobil qurilmalarda GPS chipi sunʼyo‘ldoshlardan signallarni qabul qiladi va trilateratsiya — bir nechta sunʼyo‘ldoshdan signal tarqalish vaqtini o‘lchash asosida koordinatalarni hisoblaydi. Mobil OTdagi geolokatsiya xizmatlari GPS-ga Wi-Fi kirish nuqtalari va mobil aloqa stansiyalaridan ma’lumotlarni qo‘shib, koordinatalarni aniqlashni tezlashtiradi (A-GPS) va yopiq joylarda aniqlikni yaxshilaydi. GPS.gov (2024) ma’lumotlariga ko‘ra, fuqarolik GPS aniqligi ochiq havoda 3-5 metr va zich qurilish sharoitida 15 metrgacha.
Zamonaviy mobil qurilmalar nafaqat Amerika GPS tizimini, balki boshqa global navigatsiya tizimlarini ham qo‘llab-quvvatlaydi: Rossiyaning GLONASS (24 sunʼyo‘ldosh), Yevropaning Galileo (28 sunʼyo‘ldosh) va Xitoyning BeiDou. Bir vaqtning o‘zida bir nechta tizimlarni qo‘llab-quvvatlash koordinatalarning aniqligi va tezligini oshiradi — qurilma pozitsiyani hisoblash uchun turli tizimlardan 40 tagacha sunʼyo‘ldoshdan foydalanishi mumkin. iOS va Android-da sunʼyo‘ldosh tizimini tanlash avtomatik ravishda apparat chipi darajasida amalga oshiriladi, dasturchi buni boshqarishi shart emas.
Mobil qurilmada joylashuvni aniqlash jarayoni bir necha bosqichdan iborat: manbalardan ma’lumotlarni yig‘ish (sunʼyo‘ldoshlar, Wi-Fi, mobil tarmoqlar), xatolarni filtrlash va tuzatish, koordinatalarni hisoblash va natijani ilovaga uzatish. Operatsion tizim bu jarayonni yagona geolokatsiya xizmati orqali boshqaradi, u batareyani tejash uchun barcha manbalarning ishini optimallashtiradi. Quyida joylashuv haqidagi ma’lumotlarning uchta asosiy manbai tasvirlangan.
Sunʼyo‘ldosh navigatsiyasi maksimal aniqlikni (3-5 metr) ta’minlaydi, lekin to‘g‘ridan-to‘g‘ri osmon ko‘rinishini talab qiladi. Yopiq joylarda yoki zich shahar qurilishida GPS signali zaiflashishi yoki butunlay yo‘qolishi mumkin. Birinchi pozitsiyani aniqlash vaqti (TTFF) sovuq startda 30-60 soniya va issiq startda 5-10 soniyani tashkil qiladi. A-GPS (Assisted GPS) sunʼyo‘ldoshlardan ma’lumot kutish o‘rniga internet orqali sunʼyo‘ldosh efemeridlarini yuklab, startni tezlashtiradi.
Wi-Fi pozitsiyalash ma’lum koordinatalarga ega kirish nuqtalarining MAC manzillari ma’lumotlar bazasidan foydalanadi. Aniqlik Wi-Fi qamrovida 10-50 metrni tashkil qiladi. Mobil aloqa stansiyalari stansiyalar zichligiga qarab 100 metrdan bir necha kilometrgacha aniqlik beradi. Barcha manbalarning kombinatsiyasi (Fused Location) minimal energiya sarfi bilan maqbul aniqlikda koordinatalarni olish imkonini beradi — ayniqsa GPS chipi o‘chirilgan yoki sunʼyo‘ldosh signali mavjud bo‘lmaganda.
Ikkala platformada geolokatsiya xizmatlari turli abstraksiya darajasidagi tizim API-lari orqali amalga oshiriladi. Android Google Play Services dan FusedLocationProviderClient, iOS esa Core Location dan CLLocationManager foydalanadi. Ikkala API bir martalik pozitsiyani so‘rash yoki muntazam yangilanishlarga obuna bo‘lish imkonini beradi. Quyida Kotlin tilida Fused Location Provider yordamida Android-da koordinatalarni olish namunasi keltirilgan.
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("Joylashuv", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
Misolda LocationRequest HIGH_ACCURACY prioriteti bilan konfiguratsiya qilinadi — bu maksimal aniqlik uchun GPS-ni yoqadi. setIntervalMillis kerakli yangilanish intervalini (5 soniya), setMinUpdateIntervalMillis esa minimal intervalni (2 soniya) belgilaydi. onLocationResult callback har safar tizim yangi koordinatalarni olganida chaqiriladi. requestLocationUpdates chaqirishdan oldin ruxsatni tekshirish muhim — aks holda ilova SecurityException bilan ishdan chiqadi.
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-da desiredAccuracy so‘rovning aniqligini belgilaydi: kCLLocationAccuracyBest barcha mavjud manbalardan (GPS + Wi-Fi + mobil tarmoqlar) foydalanadi. requestWhenUseAuthorization orqali ruxsat so‘rovidan so‘ng tizim foydalanuvchiga dialog oynasini ko‘rsatadi. didUpdateLocations delegati koordinatalar, balandlik, tezlik va yo‘nalish bilan CLLocation obyektlari massivini oladi. Yangilanishlarni to‘xtatish uchun batareyani tejash maqsadida stopUpdatingLocation chaqiriladi.
Geolokatsiyaga kirish ikkala platformada foydalanuvchining aniq roziligini talab qiladi. Android-da ACCESS_FINE_LOCATION (GPS) va ACCESS_COARSE_LOCATION (Wi-Fi/mobil tarmoqlar) ruxsatlaridan foydalaniladi. Android 10 dan boshlab fon kirishi uchun alohida ACCESS_BACKGROUND_LOCATION ruxsati talab qilinadi. iOS-da uchta daraja mavjud: requestWhenInUseAuthorization (faqat faol ilova vaqtida), requestAlwaysAuthorization (fonda) va aniq pozitsiyalash uchun vaqt tamg‘alari. Apple Info.plist da majburiy tavsifni talab qiladi: NSLocationWhenInUseUsageDescription yoki NSLocationAlwaysAndWhenInUseUsageDescription. Bu kalitlarsiz ruxsat so‘rovi e’tiborga olinmaydi.
GPS-dan doimiy foydalanish batareya zaryadini sezilarli darajada kamaytiradi — maksimal aniqlikda bir soat uzluksiz ish uchun 30% gacha. Energiya sarfini optimallashtirish uchun geolokatsiyadan faqat kerak bo‘lganda foydalanish va ilova fonda ishlaganda yangilanishlarni to‘xtatish tavsiya etiladi. Android-da FusedLocationProviderClient mavjudlik va so‘rov prioritetiga qarab avtomatik ravishda GPS va tarmoq manbalari o‘rtasida o‘tadi. iOS-da minimal energiya sarfi bilan yangilanishlar uchun significant-change location service (startMonitoringSignificantLocationChanges) dan foydalaning — aniqlik past (500 metrgacha), lekin batareya deyarli sarflanmaydi. Shuningdek paketli ishlov berishni qo‘llang: koordinatalarni 5-10 daqiqalik interval bilan to‘plang va Android-da WorkManager yoki iOS-da BGTaskScheduler orqali bir so‘rov bilan serverga yuboring. So‘rovlar chastotasini 1 soniyadan 30 soniyaga kamaytirish geolokatsiyaning energiya sarfini 85% ga kamaytiradi.
Geolokatsiya navigatorlardan tortib yetkazib berish xizmatlarigacha bo‘lgan keng spektrdagi mobil ilovalarda qo‘llaniladi. Eng keng tarqalgan stsenariylar foydalanuvchini xaritada ko‘rsatish, reklamani geonishonlash, kuryerlarni kuzatish, push bildirishnomalari uchun geozonalar va fitnes faoliyatini kuzatishni o‘z ichiga oladi. Har bir stsenariy aniqlik va yangilanish chastotasiga o‘z yondashuvini talab qiladi. Quyida turli xil ilovalar uchun sozlash tavsiyalari bilan jadval keltirilgan.
| Ilova turi | Aniqlik | Interval | Fon rejimi |
|---|---|---|---|
| Navigator | HIGH (GPS) | 1-2 son | Ha |
| Yetkazib berish | BALANCED (GPS+Wi-Fi) | 10-30 son | Ha |
| Ob-havo | LOW (Wi-Fi/mobil tarmoqlar) | Bir marta | Yo‘q |
| Ijtimoiy tarmoq | BALANCED | Ochilganda | Yo‘q |
| Fitnes | HIGH (GPS) | 5-10 son | Ha |
Geolokatsiya funksiyasini loyihalashda foydalanuvchilar istalgan vaqtda tizim sozlamalari orqali ruxsatni bekor qilishi mumkinligini hisobga olish muhim. Ilova geolokatsiya mavjud bo‘lmaganda vaziyatni to‘g‘ri boshqarishi va funksiya nima uchun cheklanganligini tushunarli tushuntirishi kerak.
Geofencing — xaritada virtual chegaralar yaratish texnologiyasi bo‘lib, ularni kesib o‘tganda ilova bildirishnoma oladi. Android-da geozonalar Google Play Services dan GeofencingClient orqali, iOS-da esa Core Location dan CLCircularRegion orqali amalga oshiriladi. Zonaga kirish yoki chiqishda tizim ilovani uyg‘otadi va hodisani yuboradi, hatto ilova yopiq yoki kichraytirilgan bo‘lsa ham. Bu do‘konga yaqinlashganda push bildirishnomalari, joylashuvga asoslangan vazifa eslatmalari va IoT qurilmalarini avtomatlashtirish uchun ishlatiladi. Geozonalarning maksimal soni cheklangan: Android-da — 100, iOS-da — bir vaqtning o‘zida 20. Minimal zona radiusi ikkala platformada 50 metr, aks holda tizim joylashuvni aniqlash xatosi tufayli ishlamasligi mumkin. Zonaga kirishda tizim Android-da Intent-ni ishga tushiradi yoki iOS-da locationManager:didEnterRegion delegatini chaqiradi.
Ko‘p beriladigan savollar
Smartfonda GPS 3-5 metr aniqlik bilan koordinatalarni aniqlaydigan o‘rnatilgan sunʼyo‘ldosh navigatsiya tizimi signal qabul qilgichidir. Qurilmalarda aniqlik va joylashishni aniqlash tezligini oshirish uchun GLONASS, Galileo va BeiDou ham mavjud.
GPS faqat koordinatalarni aniqlashning sunʼyo‘ldosh usulidir. Geolokatsiya xizmatlari GPS, Wi-Fi joylashishni aniqlash va mobil aloqa stansiyalari ma’lumotlarini birlashtirib, ayniqsa yopiq joylarda tezroq va energiya tejaydigan joylashuvni aniqlashni ta’minlaydi.
CLLocationManager namunasi ustida requestWhenInUseAuthorization() yoki requestAlwaysAuthorization() ni chaqiring. Oldindan Info.plist ga geolokatsiyadan foydalanish sababini tushuntiruvchi matn bilan NSLocationWhenInUseUsageDescription ni qo‘shing.
Android-da FusedLocationProviderClient, iOS-da esa significant-change location service dan foydalaning. So‘rovlar orasidagi intervalni 10-30 soniyagacha oshiring, ekran o‘chirilganda yangilanishlarni o‘chiring va koordinatalarni serverga paketli yuborishni qo‘llang.
Ha, GPSsiz taxminiy joyni Wi-Fi kirish nuqtalari (aniqlik 10-50 metr) yoki mobil aloqa stansiyalari (aniqlik 100-5000 metr) orqali aniqlash mumkin. Android-da buning uchun ACCESS_COARSE_LOCATION ishlatiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing