Notification Permission, bir uygulamanın kullanıcıya push bildirimleri ve yerel bildirimler göndermesi için gereken izindir. Android 13 ve iOS 12’den itibaren, uygulamalar bu izni çalışma zamanında sistem diyaloğu aracılığıyla talep etmek zorundadır. Android Developers, 2024’e göre, kullanıcının açık onayı olmadan uygulama, Android 13 ve üzeri cihazlarda bildirim gösteremez.
Önemli Noktalar
Notification Permission, bir uygulamanın kullanıcıya bildirim gönderme yeteneğini düzenleyen bir sistem iznidir. Android 13’ten önce, tüm uygulamalar talep olmaksızın bildirim gösterebiliyordu — manifestte izni bildirmek yeterliydi. Ancak spam ve rahatsız edici bildirimlerin artmasıyla Google, iOS’a benzer şekilde zorunlu bir çalışma zamanı talebi getirdi.
iOS’ta bildirim izni iOS 8’den beri zorunludur ve iOS 12’den itibaren geçici bildirimler (provisional notifications) ortaya çıktı — sessiz bir şekilde iletilen ve açık bir talep olmadan Bildirim Merkezi’nde görüntülenen bildirimler. Geçici bildirimler, geliştiricinin tam izin talep etmeden önce kullanıcıya bildirimlerin değerini göstermesine olanak tanır.
Localytics (2024)’e göre, iOS kullanıcılarının %61’i ve Android kullanıcılarının %55’i bir talep sonrasında push bildirimleri almayı kabul etmektedir. Onay dönüşümü doğrudan talebin bağlamına bağlıdır: ilk değerli etkileşimden sonra izin isteyen uygulamalar, ilk başlatmada isteyenlere göre %40 daha fazla onay alır.
Bildirim izinlerinin evrimi, platformların uygulamaların bu iletişim kanalına erişimini kademeli olarak nasıl kısıtladığını gösterir. Bu evrimi anlamak, geliştiricinin farklı işletim sistemi sürümlerini doğru şekilde ele almasına yardımcı olur.
Android 13’ten (2022) önce, herhangi bir uygulama kullanıcının onayı olmadan bildirim gösterebiliyordu. Android 8.0 (2017) bildirim kanallarını getirdi, Android 12 (2021) rahatsız edici bildirimlerin otomatik olarak engellenmesini ekledi ve son olarak Android 13, çalışma zamanında POST_NOTIFICATIONS talep etmeyi zorunlu hale getirdi. targetSdkVersion’ı 33’ün altında olan uygulamalar için sistem izni otomatik olarak verir, ancak Google Play, Ağustos 2023’ten itibaren targetSdkVersion’ın 33+’e güncellenmesini gerektirmektedir.
iOS 8 (2014), UIUserNotificationSettings aracılığıyla zorunlu izin talebini getirdi. iOS 10 (2016), zengin bildirimleri destekleyen UNUserNotificationCenter’ı tanıttı. iOS 12 (2018), geçici bildirimler ve gruplandırılmış bildirimler ekledi. iOS 15 (2021), uygulama izninden bağımsız olarak bildirimleri engelleyebilen Odak Modu’nu getirdi. App Tracking Transparency (iOS 14.5) bildirimlerle ilgili değildir, ancak genel izin talebi kültürünü de etkilemiştir.
Şu anda her iki platform da çalışma zamanında Notification Permission talebi gerektirmektedir. Geliştirici artık bildirimlerin otomatik olarak etkinleştirilmesine güvenemez. Kullanıcı, hangi uygulamaların kendisini bilgilendirebileceği konusunda tam kontrole sahiptir. Android’deki bildirim kanalları ve iOS’taki bildirim kategorileri, kullanıcının aldığı uyarı türlerini ince ayarlamasına olanak tanır.
Android’de Notification Permission, manifestte bildirilen POST_NOTIFICATIONS izni aracılığıyla etkinleştirilir ve ardından Android 13+ için çalışma zamanı talebi gelir.
Android 13+ için AndroidManifest.xml’de POST_NOTIFICATIONS iznini bildirmek gerekir. Android 12 ve altıyla geriye dönük uyumluluk için izin sistem tarafından otomatik olarak verilir — ek bir işlem gerekmez.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
POST_NOTIFICATIONS izin talebi Activity Result API aracılığıyla gerçekleştirilir. SDK sürümünü kontrol etmek önemlidir: Android 12 ve altında hiçbir talep gerekmez — iznin otomatik olarak verildiği kabul edilir.
private val notificationPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
createNotificationChannel()
showPushNotification()
} else {
logPermissionDenied()
}
}
fun requestNotificationAccess() {
if (Build.version.SDK_INT <= Build.VERSION_CODES.S_V2) {
// Android 12 ve altı — izin otomatik olarak verildi
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
Android 8.0+’da uygulama, ilk bildirimi göndermeden önce NotificationChannel aracılığıyla bir bildirim kanalı oluşturmalıdır. Kanalın IMPORTANCE_NONE’dan IMPORTANCE_HIGH’a kadar bir önem düzeyi vardır ve bu, bildirimin ses ve banner ile gösterilip gösterilmeyeceğini belirler. Kullanıcı uygulama için bildirimleri devre dışı bıraktıysa, ayarlarda yeniden etkinleştirilene kadar yeni kanallar etkili olmaz. Farklı uyarı türleri için ayrı kanallar oluşturulması önerilir: mesajlar, reklamlar, sistem olayları.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Mesajlar",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Yeni mesaj bildirimleri"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
iOS’ta Notification Permission UNUserNotificationCenter aracılığıyla talep edilir. Apple iki adımlı bir yaklaşım önerir: önce geçici bildirimleri talep edin, ardından değeri gösterdikten sonra tam izni talep edin.
Geçici bildirimler, Bildirim Merkezi’nde ses veya banner olmadan görünen sessiz bildirimlerdir. Kullanıcının açık onayını gerektirmezler ve uygulamanın tam talepten önce bildirimlerin değerini göstermesine olanak tanırlar. Birkaç geçici bildirim aldıktan sonra kullanıcı, bildirimin kendi içindeki menü aracılığıyla tam bildirimleri etkinleştirebilir.
import UserNotifications
func requestNotificationPermission() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
if let error = error {
print("Notification error: \(error.localizedDescription)")
return
}
if granted {
registerForRemoteNotifications()
} else {
handleDeniedPermission()
}
}
}
func requestProvisionalOnly() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.provisional, .alert, .badge, .sound]) { granted, error in
// Geçici — kullanıcı diyaloğu görmez
// Bildirimler Bildirim Merkezi’ne sessizce gelir
registerForRemoteNotifications()
}
}
iOS’ta geçerli Notification Permission durumu UNUserNotificationCenter.current().getNotificationSettings aracılığıyla alınabilir. .authorized, .denied, .provisional veya .notDetermined durumu, uygulamanın doğru davranışı seçmesine olanak tanır. İlk reddetmeden sonra sistem diyaloğu tekrar gösterilmez — kullanıcının UIApplication.openSettingsURLString aracılığıyla Ayarlar’a yönlendirilmesi gerekir. Apple ayrıca belirli senaryolar için geçici bildirimler sağlayan .ephemeral durumunun (iOS 17+) işlenmesini önerir.
En iyi uygulamalar, Notification Permission talep ederken onay dönüşümünü artırmayı ve kullanıcı kaybını azaltmayı hedefler. Yanlış bir talep, yalnızca uygulamanın bildirim gönderme yeteneğini kaybetmesine neden olmakla kalmaz, aynı zamanda uygulamanın kaldırılmasına da yol açabilir.
En yaygın anti-desen, uygulamanın ilk başlatılmasında Notification Permission talep etmektir. Kullanıcı henüz uygulamanın değerini anlamamıştır ve reddetme olasılığı çok yüksektir. En uygun an, kullanıcının ilk değerli eylemini gerçekleştirdikten sonradır: sipariş verme, mesaj gönderme, güncellemelere abone olma. Bir değer sonrası istem, onay dönüşümünü %65-75’e yükseltir.
Sistem diyaloğundan önce, kullanıcının alacağı bildirim örnekleriyle kendi ekranınızı gösterin. Metin ve simge içeren bir gelecek bildirim maketi gösterin. Kullanıcı bildirimlerin faydalı ve rahatsız edici olmayacağını görürse, kabul etme olasılığı daha yüksektir. Ön izin ekranındaki bir bildirim önizlemesi, dönüşümü %35-50 oranında artıran etkili bir tekniktir.
iOS’ta proaktif olarak Geçici Bildirimler talep etmek, kullanıcının açık onayı olmadan bildirim göndermeye olanak tanır. Kullanıcı bu bildirimlerde değer görürse, bildirimin bağlam menüsü aracılığıyla tam bildirimleri etkinleştirebilir. Apple, bildirimlerin işlemsel olmaktan ziyade bilgilendirici olduğu haber uygulamaları, hava durumu uygulamaları ve diğer hizmetler için bu yaklaşımı önerir. Apple WWDC 2024’e göre bu yaklaşım, tam onay dönüşümünü %20-30 artırır.
Sıkça Sorulan Sorular
Reddetmeden sonra sistem diyaloğu tekrar gösterilmez. Bildirimleri etkinleştirmenin tek yolu, Android’de Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) veya iOS’ta UIApplication.openSettingsURLString aracılığıyla kullanıcıyı sistem ayarlarına yönlendirmektir. Talimatlar ve devam etmek için bir düğme içeren bir ekran gösterin.
Android 12 ve altında Notification Permission gerekmez — tüm uygulamalar talep olmadan bildirim gönderebilir. Ancak kullanıcı, sistem ayarları aracılığıyla istediği zaman bildirimleri devre dışı bırakabilir. Android 13’ten itibaren, targetSdkVersion 33+ için çalışma zamanı talebi zorunludur.
NotificationChannel, Android 8.0’da tanıtılan bir bildirim kategorisidir. Her kanalın bir adı, açıklaması, önem düzeyi ve grubu vardır. Kullanıcı, uygulamanın tüm bildirimlerini devre dışı bırakmadan tek tek kanalları devre dışı bırakabilir. Örneğin, “Yeni Mesajlar” kanalı ve “Promosyon E-postaları” kanalı farklı şekilde yapılandırılabilir.
Android 13+’da POST_NOTIFICATIONS olmadan NotificationManager.notify çağrısı sistem tarafından yok sayılır. iOS’ta UNUserNotificationCenter izni olmadan bildirimler iletilmez. İstisna: iOS’ta Provisional (ses yok, yalnızca Bildirim Merkezi) ve Android 12- (izin gerekmez).
Android’de NotificationManagerCompat.areNotificationsEnabled() kullanın. iOS’ta UNUserNotificationCenter.current().getNotificationSettings’i çağırın ve authorizationStatus özelliğini kontrol edin. Android için ek olarak kanal önemini kontrol edin: NotificationChannel.getImportance() IMPORTANCE_NONE olmamalıdır.
Ö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