Mobil geliştirmede Location Permission: nedir, erişim seviyeleri ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-05-21 Okuma süresi: 8 dk

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 — mobil uygulamalarda cihaz coğrafi konumuna erişim için zorunlu bir izindir.
  • Erişim seviyeleri her iki platformda arka plan ve uygulama kullanımı sırasında olarak ayrılır.
  • Android hassas ve yaklaşık koordinat belirleme için ACCESS_FINE_LOCATION ve ACCESS_COARSE_LOCATION kullanır.
  • iOS, Info.plist'e NSLocationWhenInUseUsageDescription ve NSLocationAlwaysUsageDescription anahtarlarının eklenmesini gerektirir.
  • İzin talebi, uygulamanın konum verilerine neden ihtiyaç duyduğuna dair net bir açıklama içermelidir.

Location Permission nedir?

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 neden gereklidir

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.

Yasal gereksinimler

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.

İzin olmamasının sonuçları

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

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 seviyesiAndroidiOS
Kullanım sırasındaYalnızca uygulama aktifkenWhen In Use — yalnızca uygulamada
Arka planAlways — sürekli, arka planda bileAlways — ek App Store incelemesi gerekir
YaklaşıkACCESS_COARSE_LOCATION (500 m'ye kadar doğruluk)Precision = Off seçeneğiyle (iOS 14+)

Android'te ACCESS_FINE_LOCATION ve ACCESS_COARSE_LOCATION

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.

iOS'te When In Use ve Always

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

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.

Manifestte bildirim

İlk adım, gerekli izinleri AndroidManifest.xml dosyasına eklemektir. Hassas ve yaklaşık konumlandırma için farklı sabitler kullanılır.

xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Kotlin'de çalışma zamanı talebi

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.

kotlin
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()
}

Reddetme işleme ve yeniden talep

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.

kotlin
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

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.

Info.plist yapılandırması

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.

xml
<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'te talep

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.

swift
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
        }
    }
}

Platformlar arasındaki fark

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.

Coğrafi konum ile en iyi uygulamalar

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.

İzni bağlam içinde isteyin

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.

Nedeni önceden açıklayın

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.

Gereksiz yere Always talep etmeyin

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

Kullanıcı Location Permission'ı reddederse ne olur?

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.

Location Permission açıklama yapılmadan istenebilir mi?

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.

Android'te Location Permission durumu nasıl kontrol edilir?

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 ve ACCESS_COARSE_LOCATION arasındaki fark nedir?

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.

BLE tarayıcıları için Location Permission gerekli mi?

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

  • Location Permission — uygulamaların cihaz coğrafi konumuna erişimini düzenleyen temel gizlilik koruma mekanizması.
  • Erişim seviyeleri, iOS'te Kullanım sırasında (When In Use) ve Arka plan (Always) ile Android'te Hassas (ACCESS_FINE_LOCATION) ve Yaklaşık (ACCESS_COARSE_LOCATION) içerir.
  • Android, API 23'ten itibaren manifestte izin bildirimi ve Activity Result API aracılığıyla çalışma zamanı talebi gerektirir.
  • iOS, Info.plist'e anahtar eklenmesini ve talep metninde zorunlu neden belirtimiyle CLLocationManager yöntemlerinin çağrılmasını gerektirir.
  • Contextual request — diyaloğun uygulama başlangıcında değil, ihtiyaç anında göründüğü en iyi uygulama.
  • Pre-permission screen, Appsflyer (2024)'e göre onay oranını %25-35 artırır.
  • Kullanıcı reddi, coğrafi konum kullanmadan alternatif bir senaryo (graceful degradation) gerektirir.

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.

Projeyi tartış

Ayrıca okuyun