Location Permission — mobil tətbiqin istifadəçidən onun coğrafi mövqeyi haqqında məlumatlara giriş üçün tələb etdiyi icazədir. Bu icazə olmadan tətbiq cihazın koordinatlarını təyin edə bilməz, yəni geolokasiya funksiyalarını təmin edə bilməz. Apple Developer Documentation, 2024-yə görə, geolokasiya xidmətlərindən istifadə edən bütün tətbiqlər sistem dialoqu vasitəsilə istifadəçinin açıq razılığını tələb etməlidir.
Əsas məqamlar
Location Permission — tətbiqlərin cihazın coğrafi mövqeyi haqqında məlumatlara girişini tənzimləyən əməliyyat sistemi mexanizmidir. İstifadəçinin açıq razılığı olmadan tətbiq GPS koordinatlarını, Wi-Fi şəbəkə məlumatlarını və ya mobil rabitə qüllələri haqqında məlumatları əldə edə bilməz.
Android və iOS mobil platformaları öz icazə sistemlərini tətbiq edir, lakin ümumi məntiq eynidir: tətbiq tələb olunan icazələri manifestdə və ya konfiqurasiya faylında bəyan edir, sonra onları iş vaxtı tələb edir. Android Developers, 2024-yə görə, Android 10-dan başlayaraq bütün geolokasiya icazələri təhlükəli kateqoriyaya aiddir və iş vaxtı tələbini tələb edir.
Bu yanaşmanın səbəbi istifadəçi məxfiliyinin qorunmasıdır. Yer məlumatları hərəkət marşrutlarını qurmağa, iş və istirahət yerlərini müəyyən etməyə, həmçinin şəxsiyyəti müəyyənləşdirməyə imkan verir. Buna görə də hər iki platforma sorğu dialoqunda şəffaf izahat tələb edir: tətbiq geolokasiyaya girişə niyə ehtiyacı olduğunu göstərməlidir.
Geolokasiya icazəsi funksionallığı istifadəçinin fiziki mövqeyini bilməkdən asılı olan hər hansı tətbiq üçün zəruridir. Xəritələr və naviqasiya, çatdırılma tətbiqləri, hava xidmətləri, geoteqləmə ilə sosial şəbəkələr — bütün bu proqram kateqoriyaları Location Permission tələb edir.
Bu icazə olmadan tətbiq cihazın koordinatlarını mövcud üsullardan heç biri ilə təyin edə bilməz: nə GPS modulu vasitəsilə, nə Wi-Fi skan etməklə, nə də mobil rabitə qüllələri ilə mövqeyi təyin etməklə. İstifadəçi istənilən vaxt sistem parametrlərində icazəni geri götürə bilər, bundan sonra tətbiq imtinanı düzgün emal etməlidir.
Pew Research Center (2024) tədqiqatına görə, istifadəçilərin təxminən 45%-i geolokasiyanı əsas funksionallıq üçün istifadə etməyən tətbiqlərdə ona girişi ləğv edir. Bu o deməkdir ki, tərtibatçı sorğunu aydın şəkildə əsaslandırmalı və Location Permission-dan imtina edənlər üçün alternativ mexanizmlər təklif etməlidir.
Avropada GDPR və Rusiyada 152-FZ qanunu yer məlumatlarının emalı üçün məlumatlı razılığın alınmasını tələb edir. Tətbiq yalnız sistem dialoqu vasitəsilə icazə tələb etməməli, həm də məlumat toplama məqsədləri barədə ayrıca bildiriş təqdim etməlidir. Bu tələblərin pozulması 20 milyon avroya qədər və ya şirkətin illik dövriyyəsinin 4%-i qədər cərimələrə səbəb olur.
Əgər tətbiq Location Permission tələb etmirsə və ya istifadəçi girişdən imtina edirsə, tərtibatçı ehtiyat ssenari təmin etməlidir. Xəritə tətbiqi üçün bu ünvanın əl ilə daxil edilməsi, çatdırılma tətbiqi üçün saxlanmış ünvanlar siyahısından seçim, hava xidməti üçün IP ünvanı ilə şəhərin təyin edilməsi ola bilər. Graceful degradation (hamar deqradasiya) Google və Apple tərəfindən tövsiyə edilən standart təcrübədir.
Geolokasiyaya giriş səviyyələri Android və iOS-da fərqlənir, baxmayaraq ki, ümumi fikir eynidir: giriş nə qədər dəqiqdirsə, platforma tətbiqə bir o qədər sərt tələblər qoyur.
| Giriş səviyyəsi | Android | iOS |
|---|---|---|
| İstifadə zamanı | Yalnız tətbiq aktiv olduqda | When In Use — yalnız tətbiqdə |
| Fon | Always — daim, hətta fonda | Always — əlavə App Store yoxlaması tələb olunur |
| Təxmini | ACCESS_COARSE_LOCATION (500 m-ə qədər dəqiqlik) | Precision = Off seçimi ilə (iOS 14+) |
ACCESS_FINE_LOCATION bir neçə metr xəta ilə dəqiq GPS koordinatlarına giriş verir. Bu icazəni manifestdə bəyan etmək üçün android.permission.ACCESS_FINE_LOCATION sabitindən istifadə olunur. ACCESS_COARSE_LOCATION isə Wi-Fi və mobil qüllə məlumatları əsasında 500 metrə qədər dəqiqliklə təxmini yer təmin edir.
When In Use (istifadə zamanı) tətbiqə koordinatları yalnız ekranda açıq olduqda almağa imkan verir. Always (həmişə) hətta fon rejimində də geolokasiyaya giriş verir, lakin App Store-da məcburi baxış tələb edir. iOS 14-dən başlayaraq, istifadəçi Precision açarı vasitəsilə hər bir tətbiq üçün dəqiq yerləşməni ayrıca söndürə bilər.
Android-də Location Permission tələbi iki mərhələdə həyata keçirilir: icazələrin manifestdə bəyan edilməsi və kodda iş vaxtı tələbi. Android 6.0-dan (API 23) başlayaraq, bütün təhlükəli icazələr quraşdırma zamanı deyil, tətbiqin işləməsi zamanı tələb olunur.
İlk addım AndroidManifest.xml faylına lazımi icazələri əlavə etməkdir. Dəqiq və təxmini yerləşmə üçün müxtəlif sabitlərdən istifadə olunur.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Manifestdə bəyan etdikdən sonra tətbiq kodunda icazə tələbi üçün sistem dialoqunu çağırmaq lazımdır. Activity Result API istifadə edərək Kotlin nümunəsinə baxaq.
private val locationPermissionRequest =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// İcazə alındı
getLocation()
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Yalnız təxmini yer
getCoarseLocation()
}
else -> {
// İstifadəçi imtina etdi
showLocationExplanation()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkLocationPermission()
}
İstifadəçi girişdən imtina edərsə, Android sistemi dialoqu avtomatik olaraq təkrar göstərməyə icazə vermir. Tərtibatçı ilkin izahat göstərmək üçün shouldShowRequestPermissionRationale çağırmalıdır. Never Ask Again bayrağı ilə təkrar imtina halında istifadəçini sistem parametrlərinə yönləndirmək lazımdır.
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-də Location Permission tələbi Info.plist faylına xüsusi açarların əlavə edilməsini və CLLocationManager sinifinin metodunun çağırılmasını tələb edir. Apple məxfiliyə xüsusi diqqət yetirir, buna görə də sorğu dialoqundakı izahat mətni mümkün qədər konkret olmalıdır.
iOS-da yer tələb etmək üçün Info.plist-ə bir və ya hər iki açarı əlavə etmək lazımdır: istifadə zamanı giriş üçün NSLocationWhenInUseUsageDescription və fon girişi üçün NSLocationAlwaysAndWhenInUseUsageDescription. Hər bir açarın dəyəri istifadəçiyə dialoqda göstəriləcək sətirdir.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Tətbiq xəritədə ən yaxın nöqtələri göstərmək üçün sizin yerinizə ehtiyac duyur.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Tətbiq marşrutu izləmək üçün fonda geolokasiyaya girişə ehtiyac duyur.</string>
Swift kodunda tələb CLLocationManager nümunəsi vasitəsilə yerinə yetirilir. Tələb olunan giriş səviyyəsindən asılı olaraq requestWhenInUseAuthorization və ya 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-dən fərqli olaraq, iOS tərtibatçıya shouldShowRequestPermissionRationale yoxlama metodu təqdim etmir. Sistem izahatı nə vaxt göstərəcəyinə özü qərar verir. Bundan əlavə, iOS-da istifadəçi icazəni yalnız sistem parametrləri vasitəsilə dəyişə bilər — tətbiq istifadəçi seçim etdikdən sonra sistem dialoqunu təkrar çağıra bilməz. RequestAlwaysAuthorization əvvəlcə When In Use tələb edir, sonra ilk razılıq alındıqdan sonra fon girişi üçün ayrıca dialoq göstərir.
Location Permission ilə işin ən yaxşı təcrübələri istifadəçi imtinalarını azaltmağa və tətbiq mağazalarının tələblərinə cavab verməyə kömək edir. Google və Apple tövsiyələr dərc edib, onlara riayət etmək tətbiqin təsdiqlənmə ehtimalını artırır.
Location Permission sorğu dialoqunu tətbiq işə düşən kimi göstərməyin. Tətbiqi yeni açmış istifadəçi hələ geolokasiyaya girişi niyə təmin etməli olduğunu başa düşmür. Contextual request dialoqun istifadəçiyə həqiqətən icazə tələb edən funksiya lazım olduğu anda görünməsini nəzərdə tutur. Məsələn, «Ən yaxın mağazanı tap» düyməsinə basdıqda.
Sistem dialoqundan əvvəl öz izahat ekranınızı (pre-permission screen) göstərin. Orada tətbiqin geolokasiyaya niyə ehtiyacı olduğunu, hansı məlumatların toplandığını və necə istifadə ediləcəyini izah edin. İstifadəçi ekranınızda «İcazə ver» düyməsini kliklədikdən sonra sistem dialoqunu göstərin. Appsflyer (2024) məlumatlarına görə, bu yanaşma razılıq konversiyasını 25-35% artırır.
Geolokasiyaya fon girişi yalnız fonda işləyən tətbiqlərə lazımdır: naviqatorlara, fəaliyyət izləyicilərinə, çatdırılma tətbiqlərinə. Əgər tətbiqinizə koordinatlar yalnız ekran açıq olduqda lazımdırsa, When In Use tələb edin. App Store Always funksional olaraq əsaslandırılmadıqda tətbiqi rədd edəcək. Android-də fon girişi əlavə olaraq ACCESS_BACKGROUND_LOCATION icazəsi ilə tənzimlənir.
Tez-tez verilən suallar
Tətbiq imtinanı düzgün emal etməli və alternativ ssenari təklif etməlidir. Məsələn, ünvanın əl ilə daxil edilməsi və ya şəhərin IP ünvanı ilə təyini. Sistem dialoqu təkrar göstərilmir — istifadəçini parametrlərə yönləndirmək lazımdır.
Texniki olaraq bəli, sistem dialoqu ilkin ekran olmadan çağrıla bilər. Lakin izahatsız razılıq konversiyası 30-40% təşkil edir, ilkin ekranla isə 60-75%. Apple və Google həmişə sorğunun səbəbini izah etməyi tövsiyə edir.
ContextCompat.checkSelfPermission metodundan Manifest.permission.ACCESS_FINE_LOCATION sabiti ilə istifadə edin. Metod PERMISSION_GRANTED və ya PERMISSION_DENIED qaytarır ki, bu da sistem dialoqunu çağırmadan cari statusu təyin etməyə imkan verir.
ACCESS_FINE_LOCATION 3-10 metr xəta ilə dəqiq GPS koordinatlarına giriş verir. ACCESS_COARSE_LOCATION Wi-Fi və mobil qüllələr əsasında 500 metrə qədər dəqiqliklə təxmini yer təmin edir. Android 12+-da tərtibatçı hər iki icazəni eyni anda tələb edə bilər.
Android-də BLE cihazlarını skan etmək üçün ACCESS_FINE_LOCATION və ya ACCESS_COARSE_LOCATION tələb olunur, çünki BLE siqnalları mövqe trianqulyasiyası üçün istifadə edilə bilər. iOS-da BLE üçün Bluetooth icazəsi kifayətdir, Location Permission tələb olunmur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun