Location Permission, bir mobil uygulamanın kullanıcıdan coğrafi konum verilerine erişmek için istediği izindir. Bu izin olmadan uygulama, cihaz koordinatlarını belirleyemez ve bu nedenle coğrafi konum özelliklerini sağlayamaz. Apple Developer Documentation, 2024'e göre, coğrafi konum servislerini kullanan tüm uygulamalar, sistem diyaloğu aracılığıyla kullanıcının açık onayını almak zorundadır.
Önemli Noktalar
Location Permission, uygulamaların cihazın coğrafi konum verilerine erişimini düzenleyen bir işletim sistemi mekanizmasıdır. Kullanıcının açık onayı olmadan uygulama GPS koordinatları, Wi-Fi ağ verileri veya hücresel baz istasyonu bilgilerini alamaz.
Mobil platformlar Android ve iOS kendi izin sistemlerini uygular, ancak genel mantık aynıdır: uygulama manifest veya yapılandırma dosyasında gerekli izinleri bildirir, ardından çalışma zamanında bunları talep eder. Android Developers, 2024'e göre, Android 10'dan itibaren tüm coğrafi konum izinleri tehlikeli kategoriye girer ve çalışma zamanı talebi gerektirir.
Bu yaklaşımın nedeni kullanıcı gizliliğinin korunmasıdır. Konum verileri seyahat rotaları oluşturmak, iş ve dinlenme yerlerini belirlemek ve kişiyi tanımlamak için kullanılabilir. Bu nedenle her iki platform da talep diyaloğunda şeffaf açıklama talep eder: uygulama, coğrafi konuma neden erişmesi gerektiğini belirtmelidir.
Coğrafi konum izni, işlevselliği kullanıcının fiziksel konumunu bilmeye bağlı olan her uygulama için gereklidir. Haritalar ve navigasyon, teslimat uygulamaları, hava durumu servisleri, coğrafi etiketlemeli sosyal ağlar — tüm bu yazılım kategorileri Location Permission gerektirir.
Bu izin olmadan uygulama, mevcut hiçbir yöntemle cihaz koordinatlarını belirleyemez: ne GPS modülü aracılığıyla, ne Wi-Fi taramasıyla, ne de hücresel baz istasyonu konumlandırmasıyla. Kullanıcı izni istediği zaman sistem ayarlarından iptal edebilir ve uygulama reddi uygun şekilde işlemelidir.
Pew Research Center (2024) tarafından yapılan bir araştırmaya göre, kullanıcıların yaklaşık %45'i coğrafi konumu temel işlevsellik için kullanmayan uygulamalarda konum erişimini iptal etmektedir. Bu, geliştiricinin talebi açıkça gerekçelendirmesi ve Location Permission'ı reddedenler için alternatif mekanizmalar sunması gerektiği anlamına gelir.
Avrupa'da GDPR ve Rusya'da Federal Yasa 152-FZ, konum verilerinin işlenmesi için bilgilendirilmiş onay alınmasını gerektirir. Uygulama yalnızca sistem diyaloğu aracılığıyla izin talep etmekle kalmamalı, aynı zamanda veri toplama amaçları hakkında ayrı bir bildirim sağlamalıdır. Bu gerekliliklerin ihlali, 20 milyon Euro'ya veya şirketin yıllık cirosunun %4'üne kadar para cezasıyla sonuçlanır.
Uygulama Location Permission talep etmezse veya kullanıcı erişimi reddederse, geliştirici alternatif bir senaryo sağlamalıdır. Harita uygulaması için manuel adres girişi olabilir; teslimat uygulaması için — kaydedilmiş adresler listesinden seçim; hava durumu servisi için — IP adresiyle şehir belirleme. Graceful degradation (zarif bozulma), Google ve Apple tarafından önerilen standart bir uygulamadır.
Coğrafi konum erişim seviyeleri Android ve iOS'te farklılık gösterir, ancak genel fikir aynıdır: erişim ne kadar hassassa, platform uygulamaya o kadar katı gereksinimler dayatır.
| Erişim seviyesi | Android | iOS |
|---|---|---|
| Kullanım sırasında | Yalnızca uygulama aktifken | When In Use — yalnızca uygulamada |
| Arka plan | Always — sürekli, arka planda bile | Always — ek App Store incelemesi gerekir |
| Yaklaşık | ACCESS_COARSE_LOCATION (500 m'ye kadar doğruluk) | Precision = Off seçeneğiyle (iOS 14+) |
ACCESS_FINE_LOCATION, birkaç metreye kadar hatayla hassas GPS koordinatlarına erişim sağlar. Manifestte bu izni bildirmek için android.permission.ACCESS_FINE_LOCATION sabiti kullanılır. ACCESS_COARSE_LOCATION ise Wi-Fi ve hücresel baz istasyonu verilerine dayanarak 500 metreye kadar doğrulukla yaklaşık konum sağlar.
When In Use, uygulamanın yalnızca ekranda açıkken koordinat almasına izin verir. Always, arka planda bile coğrafi konuma erişim sağlar ancak zorunlu App Store incelemesi gerektirir. iOS 14'ten itibaren kullanıcı, Precision anahtarıyla her uygulama için hassas konumlandırmayı ayrı ayrı devre dışı bırakabilir.
Android'de Location Permission isteme iki aşamada gerçekleşir: manifestte izin bildirimi ve kodda çalışma zamanı talebi. Android 6.0 (API 23)'ten itibaren tüm tehlikeli izinler kurulum sırasında değil, uygulama çalışması sırasında talep edilir.
İlk adım, gerekli izinleri AndroidManifest.xml dosyasına eklemektir. Hassas ve yaklaşık konumlandırma için farklı sabitler kullanılır.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Manifestte bildirimden sonra, uygulama kodunda izin talebi sistem diyaloğu çağrılmalıdır. Activity Result API kullanarak Kotlin'de bir örneğe bakalım.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// İzin verildi
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Yalnızca yaklaşık konum
getCoarseLocation()
}
else -> {
// Kullanıcı reddetti
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
Kullanıcı erişimi reddederse, Android sistemi diyaloğun otomatik olarak tekrar gösterilmesine izin vermez. Geliştiricinin ön açıklama göstermek için shouldShowRequestPermissionRationale çağırması gerekir. Never Ask Again işaretiyle tekrarlanan reddetme durumunda, kullanıcı sistem ayarlarına yönlendirilmelidir.
private fun checkLocationPermission() {
when {
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED -> {
getLocation()
}
ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION) -> {
showRationaleDialog {
requestLocationPermission()
}
}
else -> {
openAppSettings()
}
}
}
iOS'te Location Permission isteme, Info.plist dosyasına özel anahtarlar eklemeyi ve CLLocationManager sınıfının yöntemlerini çağırmayı gerektirir. Apple gizliliğe özel önem verir, bu nedenle talep diyaloğundaki açıklama metni mümkün olduğunca spesifik olmalıdır.
iOS'te konum istemek için Info.plist'e bir veya her iki anahtar eklenmelidir: kullanım sırasında erişim için NSLocationWhenInUseUsageDescription ve arka plan erişimi için NSLocationAlwaysAndWhenInUseUsageDescription. Her anahtarın değeri, diyalogda kullanıcıya gösterilecek bir dizedir.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Uygulamanızın haritada yakındaki noktaları göstermek için konumunuza ihtiyacı var.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Rotayı takip etmek için uygulamanızın arka planda coğrafi konum erişimine ihtiyacı var.</string>
Swift kodunda talep, bir CLLocationManager örneği aracılığıyla yapılır. Gerekli erişim seviyesine bağlı olarak requestWhenInUseAuthorization veya requestAlwaysAuthorization çağrılır.
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
func requestLocationAccess() {
manager.delegate = self
manager.requestWhenInUseAuthorization()
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
switch manager.authorizationStatus {
case .authorizedWhenInUse, .authorizedAlways:
startLocationUpdates()
case .denied, .restricted:
showSettingsAlert()
case .notDetermined:
break
}
}
}
Android'in aksine iOS, geliştiriciye shouldShowRequestPermissionRationale'ı kontrol etmek için bir yöntem sağlamaz. Sistem, açıklamanın ne zaman gösterileceğine kendisi karar verir. Ayrıca iOS'te kullanıcı izni yalnızca sistem ayarları aracılığıyla değiştirebilir — uygulama, kullanıcı bir seçim yaptıktan sonra sistem diyaloğunu yeniden gösteremez. RequestAlwaysAuthorization önce When In Use talep eder, ardından ilk onay alındıktan sonra arka plan erişimi için ayrı bir diyalog gösterir.
Location Permission ile en iyi uygulamalar, kullanıcı reddetmelerini azaltmaya ve uygulama mağazası gereksinimlerini karşılamaya yardımcı olur. Google ve Apple, uyulması uygulama onaylanma olasılığını artıran öneriler yayınlamıştır.
Uygulama başladığında hemen Location Permission talep diyaloğunu göstermeyin. Uygulamayı yeni açmış bir kullanıcı, neden coğrafi konum erişimi sağlaması gerektiğini henüz anlamaz. Contextual request, diyaloğun kullanıcının gerçekten izin gerektiren bir özelliğe ihtiyaç duyduğu anda görünmesi anlamına gelir. Örneğin, “En yakın mağazayı bul” düğmesine tıklandığında.
Sistem diyaloğundan önce kendi açıklama ekranınızı (pre-permission screen) gösterin. Bu ekranda uygulamanın neden coğrafi konuma ihtiyacı olduğunu, hangi verilerin toplandığını ve nasıl kullanılacağını açıklayın. Kullanıcı ekranınızda “İzin Ver” düğmesine tıkladıktan sonra sistem diyaloğunu gösterin. Appsflyer (2024)'e göre bu yaklaşım onay oranını %25-35 artırır.
Arka planda coğrafi konum erişimi yalnızca arka planda çalışan uygulamalar için gereklidir: navigatörler, aktivite takipçileri, teslimat uygulamaları. Uygulamanızın yalnızca ekran açıkken koordinatlara ihtiyacı varsa When In Use talep edin. Always işlevsel olarak gerekçelendirilmezse App Store uygulamayı reddedecektir. Android'te arka plan erişimi ayrıca ACCESS_BACKGROUND_LOCATION izni ile düzenlenir.
Sıkça sorulan sorular
Uygulama reddi uygun şekilde işlemeli ve alternatif bir senaryo sunmalıdır. Örneğin, manuel adres girişi veya IP adresi ile şehir belirleme. Sistem diyaloğu tekrar gösterilmez — kullanıcı ayarlara yönlendirilmelidir.
Teknik olarak evet — sistem diyaloğu ön ekran olmadan tetiklenebilir. Ancak açıklama olmadan onay oranı %30-40 iken, ön ekranla %60-75'tir. Apple ve Google her zaman talebin nedenini açıklamayı önerir.
Manifest.permission.ACCESS_FINE_LOCATION sabitiyle ContextCompat.checkSelfPermission kullanın. Yöntem, sistem diyaloğunu çağırmadan mevcut durumu belirlemeye olanak tanıyan PERMISSION_GRANTED veya PERMISSION_DENIED döndürür.
ACCESS_FINE_LOCATION, 3-10 metre hatayla hassas GPS koordinatlarına erişim sağlar. ACCESS_COARSE_LOCATION, Wi-Fi ve hücresel baz istasyonlarına dayanarak 500 metreye kadar doğrulukla yaklaşık konum sağlar. Android 12+'da geliştirici her iki izni aynı anda talep edebilir.
Android'te BLE cihazlarını taramak için ACCESS_FINE_LOCATION veya ACCESS_COARSE_LOCATION gerekir çünkü BLE sinyalleri konum üçgenlemesi için kullanılabilir. iOS'te BLE için yalnızca Bluetooth izni yeterlidir — Location Permission gerekmez.
Ö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