Normal Permission — Android-də sistemin istifadəçidən soruşmadan avtomatik təmin etdiyi icazələr kateqoriyasıdır. Android Developer Documentation, 2024-ə görə, normal icazələr ProtectionLevel normal-ə malikdir və təhlükəli olanlardan fərqli olaraq runtime dialoqu tələb etmir. Onlar internetə, şəbəkə vəziyyətinə və vibrasiyaya girişi əhatə edir, istifadəçinin məxfi məlumatları üçün risk yaratmır.
Əsas məqamlar
Normal Permission — Android sistem icazələrinin ProtectionLevel normal olan növüdür, proqrama quraşdırma anında avtomatik verilir. Tərtibatçı sorğu üçün kod yazmalı deyil — AndroidManifest.xml-də icazəni göstərmək kifayətdir. İstifadəçi dialoqları görmür və normal permission-u ayrıca ləğv edə bilməz, yalnız proqramı tamamilə silməklə.
Android sistemi normal icazələri aşağı riskli kimi təsnif edir — onlar şəxsi məlumatlara, kameraya və ya mikrofona giriş vermir. Tipik nümunələr: internetə giriş, vibrasiyanın idarə edilməsi, Wi-Fi vəziyyətinin oxunması. Android Security Model (2024)-ə görə, bütün sistem icazələrinin təxminən 40 faizi normal kateqoriyasına aiddir.
Vacib xüsusiyyət — normal icazələr Settings vasitəsilə runtime-da ləğv edilmir. İstifadəçi girişi qadağan etmək istəyirsə, yeganə yol proqramı silməkdir. Tərtibatçılar bunu arxitekturada nəzərə almalıdır, lakin istifadəçilər üçün bu yanaşma qarşılıqlı əlaqəni sadələşdirir: ilk işə salmada heç bir dialoq yoxdur.
Normal və təhlükəli icazələrə bölünmə Android 6.0 Marshmallow (API 23)-də ortaya çıxdı. Bu versiyaya qədər bütün icazələr quraşdırma zamanı soruşulurdu — istifadəçi vahid siyahı görür və onu tamamilə qəbul və ya rədd edirdi. Normal Permission bu modeli aşağı riskli əməliyyatlar üçün qorudu, Dangerous isə runtime sorğusuna keçdi. Bu dəyişiklik istifadəçi təcrübəsini yaxşılaşdırdı və eyni zamanda təhlükəsizliyi artırdı.
Bir çox Android sistem API-ləri, giriş avtomatik olsa belə, normal icazənin açıq şəkildə göstərilməsini tələb edir. Məsələn, ConnectivityManager sinfi ACCESS_NETWORK_STATE, VibratorService VIBRATE, WifiManager ACCESS_WIFI_STATE tələb edir. Müvafiq uses-permission bəyan edilmədən bu API-lərin çağırılması SecurityException-a səbəb olacaq.
ProtectionLevel normal — Android Permission System-də minimum mühafizə səviyyəsidir. Bu səviyyəli icazələr manifestdə bəyan edilir və sistem quraşdırma zamanı bəyannaməni yoxlayır, istifadəçi müdaxiləsi olmadan giriş təmin edir. Heç bir UI elementi göstərilmir, heç bir callback çağırılmır.
Yoxlama mexanizmi PackageManager səviyyəsində işləyir. APK quraşdırılarkən sistem bütün uses-permission teqlərini skan edir, permissions.xml fayllarındakı sistem tərifləri ilə müqayisə edərək hər icazənin mühafizə səviyyəsini müəyyənləşdirir və normal-level üçün sadəcə girişi qeydiyyata alır. Proses millisaniyələr çəkir və istifadəçi interfeysi ilə qarşılıqlı əlaqə tələb etmir.
Təminat alqoritmi aşağıdakı kimidir:
İstifadəçi interfeys vasitəsilə normal icazəni ləğv edə bilməz. Proqram parametrlərində İcazələr bölməsində yalnız təhlükəli icazələr göstərilir. Bu, iOS ilə ziddiyyət təşkil edir, burada hər bir icazə funksiyanın həssaslıq səviyyəsindən asılı olmayaraq ayrıca təsdiq tələb edir.
Normal və Dangerous Permission — Android-də iki əks mühafizə kateqoriyası. Əsas fərq təminat üsulundadır: normal icazələr quraşdırma zamanı avtomatik verilir, təhlükəli olanlar runtime dialoqu vasitəsilə açıq razılıq tələb edir. Bu fərq Android 6.0 Marshmallow versiyasından başlayaraq təhlükəsizlik arxitekturasına daxil edilmişdir.
Əsas xüsusiyyətlərin müqayisəsi:
| Xüsusiyyət | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| İstifadəçi sorğusu | Tələb olunmur | Runtime dialoqu məcburidir |
| Ləğv imkanı | Xeyr, yalnız proqramın silinməsi | Bəli, istənilən vaxt parametrlər vasitəsilə |
| Kodda yoxlama | Həmişə PERMISSION_GRANTED | checkSelfPermission məcburidir |
| Nümunələr | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
İstifadəçi Normal Permission sorğusunda heç bir dialoq görmür. Proqrama INTERNET lazımdırsa — onu səssizcə alır. Dangerous Permission üçün sistem tələb olunan girişin təsviri ilə modal dialoq göstərir. İstifadəçi Allow və ya Deny düyməsini basır, daha sonra istənilən vaxt Settings vasitəsilə icazəni ləğv edə bilər. Bu, interfeysin inkişaf strategiyasını təyin edən əsas UX fərqidir.
Normal, giriş həssas məlumatlara aid olmadıqda bütün hallarda istifadə edilməlidir. ACCESS_NETWORK_STATE qoşulmanı yoxlamaq üçün, VIBRATE toxunma rəyi üçün, INTERNET HTTP sorğuları üçün — bunların hamısı normal icazələrdir. Normalın kifayət etdiyi yerdə dangerous səviyyəsinin tətbiqi pis təcrübədir, lazımsız dialoqlar yaradır və istifadəçinin proqrama inamını azaldır.
Android müəyyən edir onlarla normal icazə, hər biri müəyyən bir sistem funksiyasına uyğundur. Onların hamısı Manifest.permission sinfinin sabitləri vasitəsilə əlçatandır. Aşağıda proqram inkişafında ən çox istifadə olunanların siyahısı verilmişdir.
| Sabit | Giriş | Təsvir |
|---|---|---|
| INTERNET | Şəbəkə | HTTP sorğuları üçün şəbəkə soketlərinin açılması |
| ACCESS_NETWORK_STATE | Şəbəkə | Şəbəkə vəziyyəti haqqında məlumatın alınması |
| ACCESS_WIFI_STATE | Wi-Fi | Wi-Fi qoşulmaları haqqında məlumatın oxunması |
| VIBRATE | Vibrasiya | Cihazın vibratorunun idarə edilməsi |
| BLUETOOTH | Bluetooth | Bluetooth cihazlarına qoşulma |
| WAKE_LOCK | Enerji | Prosessorun yuxuya keçməsinin bloklanması |
| SET_ALARM | Zəngli saat | AlarmManager vasitəsilə zəngli saatın qurulması |
| CHANGE_NETWORK_STATE | Şəbəkə | Şəbəkə qoşulma vəziyyətinin dəyişdirilməsi |
Normal icazələr UI-də göstərilmək üçün Permission Group-da qruplaşdırılmır. Android-də qruplar parametrlər ekranı üçün nəzərdə tutulub, burada yalnız təhlükəli icazələr göstərilir. Lakin məntiqi olaraq normal icazələri kateqoriyalara bölmək olar: şəbəkə (INTERNET, ACCESS_NETWORK_STATE), aparat (VIBRATE, WAKE_LOCK), sistem (SET_ALARM) və Bluetooth icazələri.
Manifest.permission-dan bəzi sabitlər müxtəlif Android versiyalarında mühafizə səviyyəsini dəyişə bilər. Məsələn, BLUETOOTH_CONNECT Android 12+-də runtime sorğusu ilə təhlükəli icazəyə çevrildi, halbuki köhnə versiyalarda normal idi. Tərtibatçılara hədəf API üçün sənədlər vasitəsilə cari protectionLevel-i yoxlamaq tövsiyə olunur.
Tərtibatçı proqramlı şəkildə PackageManager vasitəsilə icazənin normal olub olmadığını yoxlaya bilər. getPermissionInfo metodu protectionLevel sahəsində PermissionInfo.PROTECTION_NORMAL bayrağını ehtiva edən PermissionInfo qaytarır. Bu, dinamik emal və sazlanma üçün faydalıdır.
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
Normal Permission-un elan edilməsi AndroidManifest.xml-də bir uses-permission teqi tələb edən ən sadə əməliyyatdır. Əlavə protectionLevel konfiqurasiyası tələb olunmur, çünki mühafizə səviyyəsi proqram manifesti ilə deyil, sistem tərifi ilə müəyyən edilir. Tərtibatçı sadəcə sabitin tam adını göstərir.
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.VIBRATE" />
Sistem quraşdırma zamanı bütün bəyannamələri emal edir. Göstərilən icazələrdən ən azı biri normal-dan fərqli protectionLevel-ə malikdirsə, runtime sorğusu tələb olunacaq. INTERNET — ən populyar normal icazə, xüsusilə HTTP sorğuları yerinə yetirən və ya şəbəkədən məzmun yükləyən əksər Android proqramlarında mövcuddur.
Normal və təhlükəli icazələri olan tam AndroidManifest.xml nümunəsi fərqi göstərir: sintaktik olaraq uses-permission teqləri eynidir, lakin icra mərhələsində INTERNET və VIBRATE avtomatik təmin ediləcək, CAMERA isə dialoq tələb edəcək.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Normal permissions -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.VIBRATE" />
<!-- Dangerous permission -->
<uses-permission
android:name="android.permission.CAMERA" />
</manifest>
Kitabxanalardan — Google Play Services, Firebase, Glide — istifadə edərkən onlar Manifest Merger vasitəsilə yekun manifestə öz uses-permission teqlərini əlavə edə bilər. Onlardan bəziləri normal (Firebase üçün INTERNET), digərləri təhlükəlidir (Google Maps üçün ACCESS_FINE_LOCATION). Tərtibatçı nəşrdən əvvəl build/outputs/logs/manifest-merger-report.txt faylında yekun birləşdirilmiş manifesti yoxlamalıdır.
Normal Permission iki prinsipial məhdudiyyətə malikdir: istifadəçi tərəfindən ləğv edilə bilməməsi və idarəetmə üçün UI-nin olmaması. İstifadəçi proqrama etibar etmirsə, lakin normal icazə artıq avtomatik verilibsə — yeganə çıxış yolu proqramı silməkdir. Bu, müəyyən risk yaradır, çünki normal icazələr Android-in standart vasitələri ilə bloklanmır.
Əlavə məhdudiyyət çox profilli cihazlarda (Work Profile, Multiple Users) özünü göstərir. Normal Permission bütün profillər üçün dərhal təmin edilir — proqram icazəni yalnız biri ilə məhdudlaşdıra bilməz. Korporativ ssenarilərdə bu, Managed Configurations vasitəsilə həll edilir.
Proqramın Normal Permission-dan hazırda istifadə edib-etmədiyini yoxlamaq mümkün deyil. Sistem metodu checkSelfPermission yalnız təhlükəli icazələr üçün işləyir. Normal üçün o həmişə PERMISSION_GRANTED qaytarır, bu da real aktivliyi əks etdirmir. Bunu təhlükəsizlik auditi və proqram davranışının təhlili zamanı nəzərə almaq lazımdır.
Həmçinin yadda saxlamaq lazımdır ki, bəzi cihaz istehsalçıları (Xiaomi, Huawei, Samsung) icazələrin standart davranışını dəyişdirir. Onların proşivkalarında Normal Permission MIUI və ya EMUI markalı qabığında əlavə icazələr tələb edə bilər. Tərtibatçılara müxtəlif istehsalçıların real cihazlarında işi sınaqdan keçirmək tövsiyə olunur.
Tez-tez verilən suallar
Normal Permission quraşdırma zamanı dialoq olmadan avtomatik təmin edilir. Dangerous istifadəçinin açıq razılığı ilə runtime sorğusu tələb edir və parametrlər vasitəsilə ləğv edilə bilər. Normal ProtectionLevel normal, Dangerous isə protectionLevel dangerous istifadə edir.
Xeyr, normal icazələr üçün AndroidManifest.xml-də uses-permission bəyan etmək kifayətdir. Sorğu üçün kod tələb olunmur — sistem girişi avtomatik təmin edir. Bu, ActivityCompat.requestPermissions tələb edən təhlükəli icazələrdən fərqləndirir.
Ən çox istifadə olunanlar: INTERNET (şəbəkə sorğuları), ACCESS_NETWORK_STATE (qoşulmanın yoxlanılması), VIBRATE (toxunma rəyi) və WAKE_LOCK (prosessorun saxlanması). Praktiki olaraq hər Android proqramı ən azı INTERNET-dən istifadə edir.
Xeyr, Normal Permission proqram parametrləri vasitəsilə ləğv edilə bilməz. Girişi dayandırmağın yeganə yolu proqramı silməkdir. Bu, istifadəçinin istənilən vaxt söndürə biləcəyi təhlükəli icazələrdən əsas fərqdir.
PackageManager.getPermissionInfo istifadə edin, icazənin adını ötürün. Metod protectionLevel sahəsi olan PermissionInfo qaytarır. Kateqoriyanı müəyyən etmək üçün PermissionInfo.PROTECTION_NORMAL və ya PROTECTION_DANGEROUS sabitləri ilə müqayisə edin.
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