Normal Permission, Android’de sistemin kullanıcıya sormadan otomatik olarak verdiği bir izin kategorisidir. Android Developer Documentation, 2024’e göre, normal izinler ProtectionLevel normal’e sahiptir ve tehlikeli olanların aksine çalışma zamanı diyaloğu gerektirmez. İnternet, ağ durumu ve titreşime erişimi kapsarlar, kullanıcının hassas verileri için risk oluşturmazlar.
Anahtar Noktalar
Normal Permission, Android’de ProtectionLevel normal ile bir sistem izin türüdür, kurulum anında bir uygulamaya otomatik olarak verilir. Geliştiricinin bunu talep etmek için kod yazması gerekmez — sadece AndroidManifest.xml’de izni bildirmek yeterlidir. Kullanıcı hiçbir diyalog görmez ve normal bir izni ayrı olarak iptal edemez, yalnızca uygulamanın tamamını kaldırarak.
Android sistemi normal izinleri düşük riskli olarak sınıflandırır — kişisel verilere, kameraya veya mikrofonra erişim sağlamazlar. Tipik örnekler: internet erişimi, titreşim kontrolü, Wi-Fi durumu okuma. Android Security Model (2024)’e göre, tüm sistem izinlerinin yaklaşık yüzde 40’ı normal kategoriye aittir.
Önemli bir özellik — normal izinler çalışma zamanında Ayarlar üzerinden iptal edilemez. Kullanıcı erişimi reddetmek isterse, tek yol uygulamayı kaldırmaktır. Geliştiriciler bunu mimaride dikkate almalıdır, ancak kullanıcılar için bu yaklaşım etkileşimi basitleştirir: ilk başlatmada diyalog yok.
Normal ve tehlikeli izinlere ayrım, Android 6.0 Marshmallow (API 23) ile ortaya çıktı. Bu sürümden önce, tüm izinler kurulumda talep edilirdi — kullanıcı tek bir liste görür ve tamamını kabul veya reddederdi. Normal Permission düşük riskli işlemler için bu modeli korurken, Dangerous çalışma zamanı talebine geçti. Bu değişiklik kullanıcı deneyimini iyileştirdi ve aynı zamanda güvenliği artırdı.
Birçok Android sistem API’si, erişim otomatik olsa bile, normal bir iznin açıkça bildirilmesini gerektirir. Örneğin, ConnectivityManager sınıfı ACCESS_NETWORK_STATE gerektirir, VibratorService VIBRATE gerektirir, WifiManager ACCESS_WIFI_STATE gerektirir. İlgili uses-permission bildirilmeden bu API’leri çağırmak SecurityException’a yol açar.
ProtectionLevel normal, Android İzin Sistemindeki minimum koruma seviyesidir. Bu seviyedeki izinler manifest’te bildirilir ve sistem kurulumda bildirimi kontrol eder, kullanıcı müdahalesi olmadan erişim sağlar. Hiçbir UI öğesi gösterilmez, hiçbir callback çağrılmaz.
Doğrulama mekanizması PackageManager seviyesinde çalışır. APK kurulumu sırasında sistem tüm uses-permission etiketlerini tarar, permissions.xml dosyalarındaki sistem tanımlarıyla eşleştirerek her iznin koruma seviyesini belirler ve normal seviye için sadece erişimi kaydeder. Süreç milisaniyeler sürer ve kullanıcı arayüzüyle etkileşim gerektirmez.
Verme algoritması şöyle çalışır:
Kullanıcı, arayüz üzerinden normal bir izni iptal edemez. Uygulama ayarlarının İzinler bölümünde yalnızca tehlikeli izinler görüntülenir. Bu, işlevin hassasiyet seviyesinden bağımsız olarak her iznin ayrı onay gerektirdiği iOS’un tersidir.
Normal ve Dangerous Permission, Android’de korumanın iki zıt kategorisidir. Temel fark, verme yöntemindedir: normaller kurulumda otomatik olarak verilir, tehlikeliler çalışma zamanı diyaloğu aracılığıyla açık rıza gerektirir. Bu ayrım, Android 6.0 Marshmallow sürümünden itibaren Android güvenlik mimarisine yerleştirilmiştir.
Temel özelliklerin karşılaştırması:
| Özellik | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| Kullanıcı talebi | Gerekmez | Çalışma zamanı diyaloğu zorunlu |
| İptal edilebilirlik | Hayır, sadece uygulama kaldırma | Evet, her zaman ayarlardan |
| Kodda kontrol | Her zaman PERMISSION_GRANTED | checkSelfPermission zorunlu |
| Örnekler | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
Kullanıcı, Normal Permission talep ederken hiçbir diyalog görmez. Bir uygulamanın INTERNET’e ihtiyacı varsa — onu sessizce alır. Dangerous Permission için sistem, talep edilen erişimi açıklayan bir modal diyalog gösterir. Kullanıcı İzin Ver veya Reddet düğmesine basar ve daha sonra her zaman Ayarlar üzerinden izni iptal edebilir. Bu, arayüz geliştirme stratejisini belirleyen temel bir UX farkıdır.
Normal, erişimin hassas verilerle ilgili olmadığı tüm durumlarda kullanılmalıdır. Bağlantı kontrolü için ACCESS_NETWORK_STATE, dokunsal geri bildirim için VIBRATE, HTTP istekleri için INTERNET — bunların hepsi normal izinlerdir. Normalin yeterli olduğu yerde dangerous seviyesini kullanmak kötü bir uygulamadır, gereksiz diyaloglar oluşturur ve kullanıcının uygulamaya olan güvenini azaltır.
Android tanımlar her biri belirli bir sistem işlevine karşılık gelen onlarca normal izin. Bunların tümü Manifest.permission sınıfının sabitleri aracılığıyla kullanılabilir. Aşağıda uygulama geliştirmede en sık kullanılanların bir listesi bulunmaktadır.
| Sabit | Erişim | Açıklama |
|---|---|---|
| INTERNET | Ağ | HTTP istekleri için ağ soketleri açma |
| ACCESS_NETWORK_STATE | Ağ | Ağ durumu hakkında bilgi alma |
| ACCESS_WIFI_STATE | Wi-Fi | Wi-Fi bağlantıları hakkında bilgi okuma |
| VIBRATE | Titreşim | Cihaz titreşim motorunu kontrol etme |
| BLUETOOTH | Bluetooth | Bluetooth cihazlarına bağlanma |
| WAKE_LOCK | Güç | İşlemcinin uyku moduna geçmesini engelleme |
| SET_ALARM | Alarm | AlarmManager aracılığıyla alarm ayarlama |
| CHANGE_NETWORK_STATE | Ağ | Ağ bağlantı durumunu değiştirme |
Normal izinler, görüntüleme amacıyla Permission Group’larda gruplanmaz. Android’deki gruplar, yalnızca tehlikeli izinlerin gösterildiği ayarlar ekranı içindir. Ancak, normal izinler mantıksal olarak kategorilere ayrılabilir: ağ (INTERNET, ACCESS_NETWORK_STATE), donanım (VIBRATE, WAKE_LOCK), sistem (SET_ALARM) ve Bluetooth izinleri.
Manifest.permission’daki bazı sabitler, farklı Android sürümlerinde koruma seviyelerini değiştirebilir. Örneğin, BLUETOOTH_CONNECT Android 12+’de çalışma zamanı talebiyle tehlikeli bir izin haline gelirken, eski sürümlerde normaldi. Geliştiricilerin, dokümantasyon aracılığıyla hedef API için geçerli protectionLevel’ı kontrol etmeleri önerilir.
Bir geliştirici, PackageManager aracılığıyla programatik olarak bir iznin normal olup olmadığını kontrol edebilir. getPermissionInfo yöntemi, protectionLevel alanında PermissionInfo.PROTECTION_NORMAL bayrağını içeren PermissionInfo döndürür. Bu, dinamik işleme ve hata ayıklama için kullanışlı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 bildirimi AndroidManifest.xml’de en basit işlemdir, yalnızca bir uses-permission etiketi gerektirir. Ek protectionLevel yapılandırması gerekmez, çünkü koruma seviyesi sistem tanımı tarafından belirlenir, uygulama manifest’i tarafından değil. Geliştirici sadece sabitin tam adını belirtir.
<!-- 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, kurulumda tüm bildirimleri işler. Bildirilen izinlerden en az birinin normalden farklı bir protectionLevel’ı varsa, çalışma zamanı talebi gerekecektir. INTERNET en popüler normal izindir, özellikle HTTP istekleri yapan veya ağdan içerik yükleyen çoğu Android uygulamasında bulunur.
Normal ve tehlikeli izinlerle AndroidManifest.xml’in tam bir örneği farkı gösterir: sözdizimsel olarak uses-permission etiketleri aynıdır, ancak çalışma zamanında INTERNET ve VIBRATE otomatik olarak verilirken, CAMERA bir diyalog gerektirecektir.
<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>
Kütüphaneler (Google Play Services, Firebase, Glide) kullanırken, bunlar Manifest Merger aracılığıyla nihai manifest’e kendi uses-permission’larını ekleyebilir. Bazıları normal (Firebase için INTERNET), diğerleri tehlikelidir (Google Maps için ACCESS_FINE_LOCATION). Geliştirici, yayınlamadan önce build/outputs/logs/manifest-merger-report.txt içindeki nihai birleştirilmiş manifest’i kontrol etmelidir.
Normal Permission‑ın iki temel sınırlaması vardır: kullanıcı tarafından iptal edilememesi ve yönetim arayüzünün olmaması. Kullanıcı uygulamaya güvenmezse ancak normal izin zaten otomatik olarak verilmişse — tek çözüm uygulamayı kaldırmaktır. Bu, normal izinler Android’in standart araçlarıyla engellenemediği için belirli bir risk oluşturur.
Ek bir sınırlama, birden çok profilli (Work Profile, Multiple Users) cihazlarda ortaya çıkar. Normal Permission tüm profillere aynı anda verilir — uygulama izni yalnızca bir profille sınırlandıramaz. Kurumsal senaryolarda bu, Managed Configurations aracılığıyla çözülür.
Bir uygulamanın belirli bir anda Normal Permission kullanıp kullanmadığını kontrol etmek mümkün değildir. Sistem yöntemi checkSelfPermission yalnızca tehlikeli izinler için çalışır. Normaller için her zaman PERMISSION_GRANTED döndürür, bu da gerçek etkinliği yansıtmaz. Bu, güvenlik denetimleri ve uygulama davranışı analizi sırasında dikkate alınmalıdır.
Ayrıca bazı cihaz üreticilerinin (Xiaomi, Huawei, Samsung) izinlerin standart davranışını değiştirdiğini unutmamak gerekir. Onların üretici yazılımlarında, Normal Permission tescilli MIUI veya EMUI arayüzünde ek izinler gerektirebilir. Geliştiricilerin farklı üreticilerin gerçek cihazlarında test etmeleri önerilir.
Sıkça Sorulan Sorular
Normal Permission kurulumda diyalog olmadan otomatik olarak verilir. Dangerous, kullanıcının açık rızasıyla çalışma zamanı talebi gerektirir ve ayarlar üzerinden iptal edilebilir. Normal, ProtectionLevel normal kullanır, Dangerous, protectionLevel dangerous kullanır.
Hayır, normal izinler için AndroidManifest.xml’de uses-permission bildirmek yeterlidir. Talep kodu gerekmez — sistem erişimi otomatik olarak sağlar. Bu, ActivityCompat.requestPermissions gerektiren tehlikeli olanlardan ayırır.
En çok kullanılanlar: INTERNET (ağ istekleri), ACCESS_NETWORK_STATE (bağlantı kontrolü), VIBRATE (dokunsal geri bildirim) ve WAKE_LOCK (işlemciyi uyanık tutma). Hemen hemen her Android uygulaması en azından INTERNET kullanır.
Hayır, Normal Permission uygulama ayarları üzerinden iptal edilemez. Erişimi durdurmanın tek yolu uygulamayı kaldırmaktır. Bu, kullanıcının her zaman devre dışı bırakabileceği tehlikeli izinlerden temel bir farktır.
PackageManager.getPermissionInfo kullanın, iznin dize adını iletin. Yöntem, protectionLevel alanıyla PermissionInfo döndürür. Kategoriyi belirlemek için PermissionInfo.PROTECTION_NORMAL veya PROTECTION_DANGEROUS sabitleriyle karşılaştırın.
Ö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