Runtime Permission: mahiyyəti, hansı növləri var və Android-də işləmə prinsipi

Müəllif: IT Sectr Dərc olunub: 2026-05-20 Oxuma vaxtı: 8 dəq

Runtime Permission — tətbiqin icrası zamanı icazələrin sorğu mexanizmi, Android 6.0 (API 23)-da təqdim edilmişdir. Quraşdırma zamanı icazələrin təyin edilməsindən fərqli olaraq, runtime permissions istifadəçiyə istənilən vaxt məxfi məlumatlara (kamera, geolokasiya, kontaktlar) girişə icazə vermək və ya ləğv etmək imkanı verir. Android Developers (2026) məlumatlarına görə, Google Play-dəki tətbiqlərin 85%-dən çoxu ən azı bir runtime permission istifadə edir.

Əsaslar

  • Runtime Permission — Android mexanizmi, məxfi məlumatlara giriş üçün istifadəçinin açıq razılığını tələb edir.
  • Dangerous permissions — runtime sorğu tələb edən icazələr qrupu (kamera, mikrofon, geolokasiya, kontaktlar).
  • Normal permissions — sistem tərəfindən avtomatik təsdiqlənir və runtime sorğu tələb etmir (INTERNET, ACCESS_NETWORK_STATE).
  • One-time permissions — bir sessiya üçün icazələr, Android 11-də təqdim edilmiş, tətbiq bağlandıqda avtomatik ləğv edilir.
  • shouldShowRequestPermissionRationale — sorğudan əvvəl istifadəçiyə izahat göstərməyin zəruri olub-olmadığını göstərən bayraq.

Runtime Permission nədir?

Runtime Permission (icra zamanı icazəsi) — Android təhlükəsizlik modelidir, burada tətbiq məxfi məlumatlara girişi yalnız həmin funksionallıq istifadəçiyə həqiqətən lazım olduqda sorışır. Android 6.0-dan əvvəl bütün icazələr tətbiqin quraşdırılması zamanı verilirdi və istifadəçi tətbiqi tam silmədən onları ləğv edə bilməzdi.

Android icazə modelinin təkamülü

Android 6.0-dan əvvəl istifadəçi quraşdırma zamanı bütün icazələrin siyahısını görür və ya hamısını qəbul edə, ya da quraşdırmadan imtina edə bilərdi. 2015-ci il tədqiqatı göstərdi ki, istifadəçilərin 87%-i quraşdırma zamanı icazə siyahısını oxumur. Android 6.0 runtime permissions təqdim etdi, icazələri normal (avtomatik) və dangerous (sorğ ilə) bölünür. Android 11 one-time permissions əlavə etdi — tətbiq bağlandıqdan sonra avtomatik ləğv. Android 13 Photo Picker və push bildirişlərini ayrıca runtime permissions kimi təqdim etdi.

iOS iOS 10 versiyasından etibarən oxşar modeldən istifadə edir, burada kamera, mikrofon və geolokasiyaya giriş ilk istifadə zamanı soruşulur. Bununla belə, iOS-da „normal permissions“ anlayışı yoxdur — hər bir icazə açıq şəkildə soruşulur, imtina isə tərtibatçı tərəfindən sistem parametrləri vasitəsilə yenidən sorğuya qədər saxlanılır.

Android-də Runtime Permission necə işləyir?

Runtime Permission requestPermissions() metodu (AndroidX — ActivityResultLauncher) ilə çağırılan sistem dialoqu vasitəsilə işləyir. Sistem izahı olan standart dialoq göstərir və istifadəçi „İcazə ver“ və ya „Qadağan et“ seçimini edir. Cavabdan sonra nəticənin callback-i çağırılır, burada tətbiq istifadəçinin qərarını idarə edir.

ActivityResultLauncher vasitəsilə icazə sorğu

kotlin
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    requestPermissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
            if (isGranted) {
                startCamera()
            } else {
                showPermissionDeniedDialog()
            }
        }
}

private fun checkCameraPermission() {
    when {
        ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED -> {
            startCamera()
        }
        ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) -> {
            showRationaleDialog { requestPermissionLauncher.launch(Manifest.permission.CAMERA) }
        }
        else -> {
            requestPermissionLauncher.launch(Manifest.permission.CAMERA)
        }
    }
}

Metoda shouldShowRequestPermissionRationale true qaytarır, əgər istifadəçi artıq bir dəfə sorğu rədd edibsə. Bu halda tətbiqin icazəyə niyə ehtiyacı olduğunu izah edən dialoq göstərmək və yalnız sonra təkrarlamaq tövsiyə olunur. Bu, istifadəçinin razılıq ehtimalını 30–40% artırır (Google I/O 2024 məlumatları).

Android-də icazə növləri

Android bütün icazələri bir neçə mühafizə səviyyəsinə təsnif edir: normal, dangerous, signature və special. Normal permissions quraşdırma zamanı avtomatik verilir. Dangerous permissions runtime sorğu tələb edir. Signature permissions yalnız eyni sertifikatla imzalanmış tətbiqlər üçün mövcuddur.

Təhlükəli icazələrin qrupları

QrupİcazələrAPI Level
CAMERACAMERAAPI 23+
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, ACCESS_BACKGROUND_LOCATIONAPI 23+ (background — API 29+)
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, READ_MEDIA_IMAGES (API 33+)API 23+ (dəyişikliklər API 33)
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOGAPI 23+
MICROPHONERECORD_AUDIOAPI 23+
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSAPI 23+
NOTIFICATIONSPOST_NOTIFICATIONSAPI 33+

Special permissions (SYSTEM_ALERT_WINDOW, WRITE_SETTINGS, MANAGE_EXTERNAL_STORAGE) Settings.ACTION_MANAGE_OVERLAY_PERMISSION vasitəsilə sistem parametrlərinə əlavə keçid tələb edir. Bu icazələr standart sistem dialoqu ilə soruşula bilməz və istifadəçinin parametrlər ekranına açıq keçidini tələb edir.

Android 12+-da icazə sorğu

Android 12 runtime permissions modelinə əhəmiyyətli dəyişikliklər təqdim etdi. One-time permissions kameraya, mikrofona və ya geolokasiyaya yalnız bir sessiya üçün girişə icazə verməyə imkan verir. İstifadəçi tətbiqi bağladıqda icazə avtomatik ləğv edilir. Privacy indicators — status zolağında tətbiqin kameradan və ya mikrofondan istifadə etdiyini göstərən yaşıl göstəricilər.

Birdəfəlik icazələrin idarə edilməsi

kotlin
// Android 12+ — geolokasiya üçün birdəfəlik icazənin idarə edilməsi
private fun checkLocationPermission() {
    val permissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->

        val fineLocationGranted = permissions[Manifest.permission.ACCESS_FINE_LOCATION]
        val coarseLocationGranted = permissions[Manifest.permission.ACCESS_COARSE_LOCATION]

        if (fineLocationGranted == true) {
            showUserLocation()
        } else {
            showLocationDisabledDialog()
        }
    }

    permissionLauncher.launch(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
    )
}

// Yoxlama, icazənin sistem tərəfindən ləğv edilib-edilmədiyi (Android 12+)
class PermissionReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_PERMISSION_REVOCATION) {
            handleRevokedPermission(intent.getStringExtra(Intent.EXTRA_REVOKED_PERMISSION))
        }
    }
}

Android 13 POST_NOTIFICATIONS icazəsini dangerous qrupuna əlavə etdi, push bildirişlərinin göndərilməsi üçün açıq sorğu tələb edir. Android 14 fon geolokasiyasına məhdudiyyətlər tətbiq etdi: tətbiq background location sorğu zamanı hər dəfə istifadəçinin açıq razılığını almalıdır. Photo Picker (API 33+) şəkillər seçimi üçün READ_EXTERNAL_STORAGE ehtiyacını əvəz etdi.

İstifadəçi imtinalarının idarə edilməsi

İmtina — icazənin verilməsindən imtina normal haldır və düzgün idarə edilməlidir. İki növ imtina var: birdəfəlik (istifadəçi „Qadağan et“ düyməsini basdı) və daimi (istifadəçi „Bir daha soruşma“ seçdi). İkinci halda sistem dialoqu artıq göstərilməyəcək və tətbiq istifadəçini sistem parametrlərinə yönləndirməlidir.

İmtinaların idarə edilməsi strategiyası

İlk imtinadan sonra tətbiq rationale dialog — icazənin niyə zəruri olduğunu izah edən öz dialoqunu göstərməlidir. Əgər istifadəçi təkrardan imtina edərsə, onu Settings.ACTION_APPLICATION_DETAILS_SETTINGS vasitəsilə tətbiq parametrləri ekranına yönləndirmək lazımdır. Material 3 daha təbii UX üçün PermissionRequestBottomSheet istifadəsini tövsiyə edir.

İmtina zamanı tətbiqin funksionallığını tam bloklamamaq vacibdir. Məsələn, istifadəçi geolokasiyanı rədd edərsə, tətbiq ünvanı əl ilə daxil etməyi təklif etməlidir. Kamera üçün — şəkli qalereyadan yükləməyə imkan verməlidir. Google tövsiyə edir bütün runtime permissions üçün həmişə fallback mexanizmi təmin etməyi.

Təhlükəsizlik tövsiyələri

Runtime permissions — yalnız texniki mexanizm deyil, həm də istifadəçinin tətbiqə inam elementidir. İcazənin uyğun olmayan anda (məsələn, ilk işə salınmada) soruşulması razılıq ehtimalını əhəmiyyətli dərəcədə azaldır. Google Play Store icazə sorğlarının tezliyini və kontekstini təhlil edir: aqressiv sorğları olan tətbiqlər axtarışda aşağı mövqelər alır.

İcazə sorğu qaydaları

Kontekst — icazəni tələb edən hərəkətdən dərhal əvvəl soruşun. Minimum — yalnız funksiyanın işləməsi üçün həqiqətən zəruri olan icazələri soruşun. Şəffaflıq — sistem dialoqundan əvvəl istifadəçiyə icazənin nə üçün lazım olduğunu izah edin. Ləğv — icazənin ləğvinin icra zamanı düzgün idarə edilməsi üçün ACTION_PERMISSION_REVOCATION-a abunə olun.

Runtime permissions test etmək üçün adb əmrlərindən istifadə edin: adb shell pm revoke <package> android.permission.CAMERA tətbiqi yenidən quraşdırmadan icazənin ləğvini simulyasiya etməyə imkan verir. EspressoUiAutomator GrantPermissionRule vasitəsilə icazə dialoqlarının testini dəstəkləyir. Bu alətlərin CI/CD pipeline-na inteqrasiyası runtime permissions olan tətbiqlər üçün məcburidir.

Google Play Console-da icazə auditi

Google Play Console Permission auditing (icazə auditi) bölməsi təqdim edir, burada tərtibatçı icazələrin nə qədər tez-tez soruşulduğunu, istifadəçilərin neçə faizinin girişə icazə verdiyini və hansı icazələrin ləğv edildiyini görür. Bu məlumatların təhlili səmərəsiz sorğları müyyənləşdirməyə və UX-i optimallaşdırmağa kömək edir. Məsələn, istifadəçilərin 40%-dən azı geolokasiyanı təmin edərsə, sorğun vaxtını yenidən nəzərdən keçirməyə və daha inandırıcı əsaslandırma əlavə etməyə dəyər.

Permission-related ANR (Application Not Responding) monitorinqi üçün Android Vitals istifadəsi də kritikdir. Əgər icazə sorğu əsas thread-də yerinə yetirilirsə və ya sistem dialoqu UI-ni bloklayırsa, bu yavaş cihazlarda ANR-yə səbəb ola bilər. İcazə yoxlaması və sorğunu ayrıca thread-ə çıxarın və ya istifadəçi interfeysinin bloklanmasının qarşısını almaq üçün asinxron emal üçün Kotlin korutinlərindən istifadə edin.

Tez-tez verilən suallar

Birdəfəlik imtinanı daimi imtinadan necə ayırmaq olar?

shouldShowRequestPermissionRationale daimi imtinada false qaytarır (istifadəçi „Bir daha soruşma“ seçdikdə). Metod birdəfəlik imtinada true qaytarır, rationale dialoqunu göstərməyə imkan verir. Əgər metod false qaytarıbsa, yeganə çıxış yolu istifadəçini tətbiqin sistem parametrlərinə yönləndirməkdir.

Eyni anda bir neçə icazə soruşmaq olarmı?

Bəli, ActivityResultContracts.RequestMultiplePermissions bir çağırışda icazələr massivini soruşmağa imkan verir. Sistem hər bir icazə üçün ardıcıl olaraq dialoqlar göstərəcək. Məntiqi əlaqəli icazələri qruplaşdırmaq tövsiyə olunur (məsələn, video çəkim üçün CAMERARECORD_AUDIO), lakin bir dəfədə 2–3-dən çox soruşmamaq lazımdır.

Runtime permissions Android TV və Wear OS-da necə işləyir?

Android TV televizor ekranında dialoqların göstərilməsi ilə eyni runtime permissions modelindən istifadə edir. Wear OS versiya 3+ runtime permissions dəstəkləyir, lakin dialoqlar saatda göstərilir. Android Auto üçün bütün icazələr telefonda soruşulur, avtomobil sistemi isə bridge əlaqəsi vasitəsilə təsdiqlənmiş icazələri alır.

Android 16-da permissions-də hansı dəyişikliklər gözlənilir?

İlkin məlumatlara görə Android 16 birdəfəlik icazələr üçün 24 saatdan sonra avtomatik ləğv ilə „permission expiration“ təqdim edir. Həmçinin background location tələblərinin sərtləşdirilməsi və yeni kateqoriyalar (ətraf mühit sensorları, Wi-Fi skan) üçün dangerous permissions siyahısının genişləndirilməsi gözlənilir. Dəqiq təfşürat 2027-ci ilin Q3-də ortaya çıxacaq.

Android-də runtime permission iOS-dan nə ilə fərqlənir?

iOS „normal permissions“ dəstəkləmir — hər bir icazə sistem dialoqu vasitəsilə açıq şəkildə soruşulur. İstifadəçi istənilən vaxt parametrlər vasitəsilə icazəni ləğv edə bilər. Əsas fərq — iOS checkSelfPermission analoqu vasitəsilə icazə statusunu əvvəlcədən yoxlamır: sistem qorunan API-yə ilk müraciətdə avtomatik olaraq dialoq göstərir.

Nəticələr

  • Runtime Permission — məxfi məlumatların faktiki istifadə anında sorğu mexanizmi, Android 6.0-da təqdim edilmişdir.
  • Dangerous permissions açıq sistem dialoqu tələb edir, normal permissions avtomatik təsdiqlənir.
  • One-time permissions (Android 12+) tətbiq bağlandıqda ləğv edilir, istifadəçinin məxfiliyini artırır.
  • shouldShowRequestPermissionRationale əvvəlki imtinanın olub-olmadığını müyyənləşdirir və sorğu strategiyasını seçməyə kömək edir.
  • Android 13 POST_NOTIFICATIONS-u runtime permission kimi əlavə etdi, Android 14 fon geolokasiyası tələblərini sərtləşdirib.
  • Photo Picker (API 33+) şəkillərin seçimi üçün READ_EXTERNAL_STORAGE ehtiyacını əvəz edir.
  • İstifadəçinin imtinası zamanı həmişə fallback təmin edin — alternativ məlumat daxil etmə üsulu və ya əl seçimi.

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.

Layihəni müzakirə et

Həm də oxuyun