Mobil uygulamalarda GPS ve konum hizmetleri, uydular, Wi-Fi ve mobil ağlar kullanarak bir cihazın fiziksel konumunu belirlemek için API’lerdir. Google Android Location Guide (2025)’e göre, mobil uygulamaların %60’ından fazlası içeriği kişiselleştirmek için konum verilerini kullanır. Android’deki Fused Location Provider, doğruluğu artırmak ve güç tüketimini azaltmak için birden fazla kaynağı birleştirir.
Önemli Noktalar
GPS (Küresel Konumlandırma Sistemi), yaklaşık 20.200 km yükseklikte yörüngeye oturtulmuş 31 aktif uydudan oluşan bir uydu navigasyon sistemidir. Mobil cihazlarda, GPS çipi uydulardan sinyaller alır ve üçgenleme — birden fazla uydudan sinyal seyahat süresinin ölçülmesi — temelinde koordinatları hesaplar. Mobil işletim sistemlerindeki konum hizmetleri, daha hızlı konum belirleme (A-GPS) ve iç mekan doğruluğunu iyileştirmek için GPS’e Wi-Fi erişim noktaları ve hücre kulelerinden veri ekler. GPS.gov’a (2024) göre, sivil GPS’in doğruluğu açık gökyüzü koşullarında 3-5 metre ve yoğun kentsel alanlarda 15 metreye kadardır.
Modern mobil cihazlar yalnızca Amerikan GPS sistemini değil, aynı zamanda Rus GLONASS (24 uydu), Avrupa Galileo (28 uydu) ve Çin BeiDou gibi diğer küresel navigasyon uydu sistemlerini de destekler. Birden fazla sistemi aynı anda desteklemek, konum belirlemenin doğruluğunu ve hızını artırır — cihaz, konumunu hesaplamak için farklı sistemlerden 40’a kadar uydu kullanabilir. iOS ve Android’de uydu sistemi seçimi donanım çipi düzeyinde otomatik olarak yapılır, geliştiricilerin bunu yönetmesi gerekmez.
Mobil cihazda konum belirleme süreci birkaç aşamadan oluşur: kaynaklardan (uydular, Wi-Fi, hücreler) veri toplama, hataları filtreleme ve düzeltme, koordinatları hesaplama ve sonucu uygulamaya iletme. İşletim sistemi, pil tasarrufu için tüm kaynakları optimize eden birleşik bir konum hizmeti aracılığıyla bu süreci yönetir. Aşağıda konum verilerinin üç ana kaynağı açıklanmıştır.
Uydu navigasyonu maksimum doğruluk (3-5 metre) sağlar, ancak açık bir gökyüzü görüşü gerektirir. İç mekanlarda veya yoğun kentsel alanlarda, GPS sinyali zayıflayabilir veya tamamen kaybolabilir. İlk konum belirleme süresi (TTFF) soğuk başlatma için 30-60 saniye ve sıcak başlatma için 5-10 saniyedir. A-GPS (Yardımlı GPS), uydulardan veri beklemek yerine internet üzerinden uydu efemeris verilerini indirerek başlatmayı hızlandırır.
Wi-Fi konum belirleme, bilinen koordinatlara sahip erişim noktalarının MAC adreslerinden oluşan bir veritabanı kullanır. Wi-Fi kapsama alanı içinde doğruluk 10-50 metredir. Hücre kuleleri, kul yoğunluğuna bağlı olarak 100 metreden birkaç kilometreye kadar doğruluk sağlar. Tüm kaynakların (Fused Location) birleştirilmesi, özellikle GPS çipi kapalıyken veya uydu sinyalleri mevcut değilken, minimum güç tüketimiyle makul doğrulukta koordinat elde edilmesini sağlar.
Her iki platformda da konum hizmetleri, farklı soyutlama düzeylerinde sistem API’leri aracılığıyla uygulanır. Android, Google Play Services’ten FusedLocationProviderClient’ı kullanırken, iOS, Core Location’dan CLLocationManager’ı kullanır. Her iki API de tek seferlik konum isteme veya düzenli güncellemelere abone olma imkanı sunar. Aşağıda, Kotlin’de Fused Location Provider kullanarak Android’de koordinat alma örneği verilmiştir.
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("Konum", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
Örnekte, LocationRequest PRIORITY_HIGH_ACCURACY ile yapılandırılmıştır — bu, maksimum doğruluk için GPS’i etkinleştirir. setIntervalMillis istenen güncelleme aralığını (5 saniye) ayarlar, setMinUpdateIntervalMillis minimum aralığı (2 saniye) ayarlar. onLocationResult geri çağrısı, sistem her yeni koordinat aldığında çağrılır. requestLocationUpdates’i çağırmadan önce izni kontrol etmek önemlidir — aksi takdirde uygulama SecurityException ile çöker.
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
// İŞARET: - CLLocationManagerDelegate
func locationManager(
_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]
) {
guard let location = locations.last else { return }
print("Location: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}
iOS’ta desiredAccuracy, isteğin doğruluğunu belirler: kCLLocationAccuracyBest, mevcut tüm kaynakları (GPS + Wi-Fi + hücreler) kullanır. requestWhenInUseAuthorization aracılığıyla izin istendikten sonra sistem, kullanıcıya bir iletişim kutusu gösterir. didUpdateLocations delegesi, koordinatlar, yükseklik, hız ve yön ile CLLocation nesnelerinden oluşan bir dizi alır. Güncellemeleri durdurmak için, pil tasarrufu için stopUpdatingLocation çağrılır.
Konuma erişim, her iki platformda da kullanıcının açık iznini gerektirir. Android’de ACCESS_FINE_LOCATION (GPS) ve ACCESS_COARSE_LOCATION (Wi-Fi/hücreler) izinleri kullanılır. Android 10’dan itibaren arka plan erişimi için ayrı bir izin olan ACCESS_BACKGROUND_LOCATION gerekir. iOS’ta üç seviye mevcuttur: requestWhenInUseAuthorization (yalnızca uygulama etkin olduğunda), requestAlwaysAuthorization (arka planda) ve hassas konum belirleme için geçici zaman damgaları. Apple, Info.plist’te zorunlu bir açıklama gerektirir: NSLocationWhenInUseUsageDescription veya NSLocationAlwaysAndWhenInUseUsageDescription. Bu anahtarlar olmadan, izin isteği görmezden gelinir.
GPS’in sürekli kullanımı, pili önemli ölçüde tüketir — maksimum doğrulukta sürekli çalışmada saatte %30’a kadar. Güç tüketimini optimize etmek için, konum hizmetlerini yalnızca gerektiğinde kullanmanız ve uygulama arka plana geçtiğinde güncellemeleri durdurmanız önerilir. Android’de, FusedLocationProviderClient, kullanılabilirlik ve istek önceliğine bağlı olarak GPS ve ağ kaynakları arasında otomatik olarak geçiş yapar. iOS’ta, minimum güç tüketimiyle güncellemeler için önemli konum değişikliği hizmetini (startMonitoringSignificantLocationChanges) kullanın — doğruluk daha düşüktür (500 metreye kadar), ancak pil neredeyse hiç tüketilmez. Ayrıca toplu işleme uygulayın: koordinatları 5-10 dakikalık aralıklarla toplayın ve Android’de WorkManager veya iOS’ta BGTaskScheduler aracılığıyla sunucuya tek bir istekte gönderin. İstek sıklığını 1 saniyeden 30 saniyeye düşürmek, konum hizmetlerinin güç tüketimini %85 azaltır.
Konum belirleme, navigasyon uygulamalarından teslimat hizmetlerine kadar geniş bir mobil uygulama yelpazesinde kullanılır. En yaygın senaryolar arasında kullanıcıyı haritada gösterme, coğrafi hedefli reklamcılık, kurye takibi, push bildirimleri için coğrafi çit ve fitness aktivite takibi yer alır. Her senaryo, doğruluk ve güncelleme sıklığı konusunda kendi yaklaşımını gerektirir. Aşağıda, farklı uygulama türleri için yapılandırma önerilerini içeren bir tablo bulunmaktadır.
| Uygulama türü | Doğruluk | Aralık | Arka plan modu |
|---|---|---|---|
| Navigasyon | HIGH (GPS) | 1-2 saniye | Evet |
| Teslimat | BALANCED (GPS+Wi-Fi) | 10-30 saniye | Evet |
| Hava durumu | LOW (Wi-Fi/hücreler) | Bir kez | Hayır |
| Sosyal ağ | BALANCED | Açılışta | Hayır |
| Fitness | HIGH (GPS) | 5-10 saniye | Evet |
Konum işlevselliğini tasarlarken, kullanıcıların sistemi ayarları aracılığıyla izni istedikleri zaman iptal edebileceklerini dikkate almak önemlidir. Uygulama, konum belirlemenin mevcut olmadığı durumları düzgün bir şekilde ele almalı ve işlevselliğin neden sınırlı olduğuna dair net bir açıklama göstermelidir.
Geofencing, harita üzerinde sanal sınırlar oluşturma teknolojisidir. Bu sınırlar aşıldığında, uygulama bir bildirim alır. Android’de coğrafi çitler, Google Play Services’ten GeofencingClient aracılığıyla, iOS’ta ise Core Location’dan CLCircularRegion aracılığıyla uygulanır. Bir bölgeye girildiğinde veya çıkıldığında, sistem uygulamayı uyandırır ve uygulama kapalı veya küçültülmüş olsa bile bir olay gönderir. Bu, bir mağazaya yaklaşıldığında push bildirimleri, konum tabanlı görev hatırlatıcıları ve IoT cihaz otomasyonu için kullanılır. Maksimum coğrafi çit sayısı sınırlıdır: Android’de 100, iOS’ta aynı anda 20. Minimum bölge yarıçapı her iki platformda da 50 metredir — aksi takdirde konum belirleme hataları nedeniyle sistem tetiklenmeyebilir. Bir bölgeye girildiğinde, sistem Android’de bir Intent başlatır veya iOS’ta locationManager:didEnterRegion temsilcisini çağırır.
Sıkça sorulan sorular
Akıllı telefondaki GPS, 3-5 metre doğrulukla koordinatları belirleyen, uydu navigasyon sistemi sinyallerini alan yerleşik bir alıcıdır. Cihazlar, doğruluk ve konum belirleme hızını iyileştirmek için GLONASS, Galileo ve BeiDou’yu da destekler.
GPS, yalnızca koordinatları belirlemek için bir uydu yöntemidir. Konum hizmetleri, özellikle iç mekanlarda daha hızlı ve enerji açısından daha verimli konum belirleme için GPS, Wi-Fi konum belirleme ve hücre kulesi verilerini birleştirir.
Bir CLLocationManager örneğinde requestWhenInUseAuthorization() veya requestAlwaysAuthorization() çağrın. Öncelikle, konum hizmetlerine neden ihtiyaç duyulduğuna dair net bir açıklama içeren NSLocationWhenInUseUsageDescription’ı Info.plist’e ekleyin.
Android’de FusedLocationProviderClient’ı ve iOS’ta önemli konum değişikliği hizmetini kullanın. İstekler arasındaki aralığı 10-30 saniyeye çıkarın, ekran kapalıyken güncellemeleri devre dışı bırakın ve sunucuya toplu koordinat gönderme uygulayın.
Evet, GPS olmadan Wi-Fi erişim noktaları (doğruluk 10-50 metre) veya hücre kuleleri (doğruluk 100-5000 metre) kullanarak yaklaşık konumu belirleyebilirsiniz. Android’de bunun için ACCESS_COARSE_LOCATION kullanılır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun