Notification Channel (bildirim kanalı), Android 8.0 (API 26) ile tanıtılan, bildirimleri kategorilere göre gruplandıran ve kullanıcıya davranışları üzerinde kontrol veren bir Android mekanizmasıdır. Her kanal, kanal üzerinden gönderilen tüm bildirimler için önem seviyesini, sesi, titreşimi ve görsel görünümü belirler. Android Developers’a göre, Android 8+’da tüm bildirimler için NotificationChannel zorunludur — bu olmadan bildirimler görüntülenmez.
Ana noktalar
Notification Channel, Android 8+ (Oreo) içinde aynı tür bildirimler için mantıksal bir kapsayıcıdır. Geliştirici, benzersiz bir kimliğe sahip bir kanal oluşturur, parametrelerini ayarlar ve ardından her bildirimi bu kanalı belirterek gönderir. Aynı kanaldaki tüm bildirimler, kanalın ayarlarını devralır.
Android 8’den önce, bildirim yönetimi ikiliydi: ya hep ya hiç. Kullanıcı yalnızca uygulamanın tüm bildirimlerini tamamen devre dışı bırakabilirdi. Kanallar bu sorunu çözdü: artık “reklam” bildirimlerini devre dışı bırakabilir ancak “arkadaşlardan gelen mesajları” tutabilirsiniz.
Bir kanal oluşturulduktan sonra, önemi kullanıcı tarafından Ayarlar → Uygulamalar → Bildirimler yoluyla herhangi bir zamanda değiştirilebilir. Geliştirici, kanalı oluşturduktan sonra önemi programlama yoluyla değiştiremez — bu bir Android güvenlik kısıtlamasıdır.
Android 8+’da her bildirim bir NotificationChannel aracılığıyla gönderilmelidir. Bir uygulama kanalsız bir bildirim göstermeye çalışırsa, sistem onu sessizce yok sayar. İstisna, kütüphane tarafından otomatik olarak oluşturulan varsayılan kanala sahip NotificationCompat aracılığıyla gönderilen bildirimlerdir.
Bir bildirim kanalı, NotificationChannel sınıfı aracılığıyla oluşturulurken ayarlanan bir dizi parametre ile tanımlanır. Ana parametre, bildirimin kullanıcıyla nasıl etkileşime gireceğini belirleyen önem seviyesidir.
Oluşturulduktan sonra kanal, sistem bildirim ayarlarında görünür. Kullanıcı önemi değiştirebilir, sesi, titreşimi kapatabilir veya kanalı tamamen engelleyebilir. Tüm değişiklikler sonraki tüm bildirimler için hemen geçerli olur.
Bir NotificationChannel oluştururken şunları yapılandırabilirsiniz: ses (özel veya sistem), titreşim (desen ve süre), ışık göstergesi (LED rengi), rozet simgesi (setShowBadge), kilit ekranı (setLockscreenVisibility) ve rahatsız etmeyin modu (setBypassDnd). Bu parametreler kanal oluşturulurken sabitlenir ve daha sonra yalnızca kullanıcı tarafından değiştirilebilir.
Önem seviyesi, bir kanalın ana parametresidir. Bildirimin ses çalıp çalmayacağını, ekranda görünüp görünmeyeceğini veya sadece gölgeye yerleştirilip yerleştirilmeyeceğini belirler. Önem, öncelikle karıştırılmamalıdır — önem kanal tarafından belirlenir ve öncelik (setPriority) Android 8+’da yok sayılır.
| Seviye | Sabit | Davranış | Ses |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Heads-up bannerı gösterir, gölgede görünür | Evet |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Gölgede görünür, heads-up yok | Evet |
| LOW | IMPORTANCE_LOW (2) | Sessiz gölgede görünür | Hayır |
| MIN | IMPORTANCE_MIN (1) | Sadece gölgede, ses veya titreşim yok | Hayır |
| NONE | IMPORTANCE_NONE (0) | Hiç görüntülenmez | Hayır |
Çoğu kullanıcı senaryosu için IMPORTANCE_DEFAULT (3) kullanın — bildirim sesle birlikte gölgede görünür ancak açılır pencere bannerı olmaz. IMPORTANCE_HIGH’ı yalnızca kritik olaylar için kullanın: gelen çağrı, bir kişiden mesaj, zamanlayıcı hatırlatıcısı.
Kanal, uygulama başladığında veya ilk kullanımda bir kez oluşturulur. En iyi uygulama, tüm kanalları uygulama başlangıcında, Application.onCreate yönteminde oluşturmaktır. Mevcut bir kanalı yeniden oluşturmak güvenlidir — kanal zaten varsa Android çağrıyı yok sayar.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Mesajlar",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Yeni mesaj bildirimleri"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Promosyonlar ve haberler",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Pazarlama bildirimleri ve özel teklifler"
setShowBadge(false)
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(messagesChannel)
manager.createNotificationChannel(promoChannel)
}
companion object {
const val CHANNEL_MESSAGES = "messages"
const val CHANNEL_PROMO = "promo"
}
}
Bir bildirim gönderirken, kanal kimliğini setChannelId (NotificationCompat için) veya Notification.Builder yapıcısında belirtin. Belirtilen kimliğe sahip kanal yoksa bildirim gösterilmez, ancak herhangi bir hata oluşmaz.
Android, kanalların programlama yoluyla yönetimi için çeşitli API’ler sağlar: liste alma, silme ve mevcut ayarları kontrol etme. Bir kanalın silinmesi, tüm bildirimlerinin sistem geçmişinden kaldırılmasına neden olur.
val manager =
getSystemService(NotificationManager::class.java)
// Tüm kanalların listesini al
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Kanallar", "${channel.id}: ${channel.importance}")
}
// Mevcut önemi öğren (kullanıcı değiştirmiş olabilir)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// Kullanıcı kanalı devre dışı bıraktı
suggestEnablingChannel()
}
// Kanalı sil
manager.deleteNotificationChannel(CHANNEL_PROMO)
Bir kanal oluşturulduktan sonra geliştirici, önemini programlama yoluyla değiştiremez — bu, kullanıcıyı kötüye kullanımdan korumak için bir Android kısıtlamasıdır. Bir kanalın önemini değiştirmeniz gerekiyorsa, farklı bir kimliğe sahip yeni bir kanal oluşturun ve bildirimleri taşıyın.
Mevcut bir kanalın önemini değiştirmeniz gerekiyorsa, farklı bir kimlikle (örn. “messages_v2”) yeni bir kanal oluşturun ve bildirimleri ona göndermeye başlayın. Eski kanal deleteNotificationChannel aracılığıyla silinebilir — tüm bildirimleri geçmişten kaldırılır. Kullanıcının ayarlarını kaybetmemesi için uygulama arayüzü aracılığıyla kullanıcıyı geçiş hakkında uyarın.
NotificationChannelGroup, birden çok kanalı Android ayarlar arayüzünde görsel bir grupta birleştirir. Gruplar, uygulama 5+ kanal kullandığında kullanıcının gezinmesine yardımcı olur: örneğin, “Sosyal,” “Sistem,” “Pazarlama.”
Bir grup createNotificationChannelGroup aracılığıyla oluşturulur ve setGroup yöntemi aracılığıyla oluşturulurken kanala iletilir. Bir grubun silinmesi, tüm kanallarını da siler. Her kanal yalnızca bir gruba ait olabilir.
Pratikte, kanal grupları 3’ten fazla kanalı olan uygulamalar için önerilir. Ayarlarda gezinmeyi basitleştirir ve kullanıcının kanal listesini anlamadan tüm bildirimleri bir kerede devre dışı bırakma olasılığını azaltır.
Bir grup createNotificationChannelGroup aracılığıyla benzersiz bir kimlik ve adla oluşturulur. Ardından her kanal, setGroup yöntemi aracılığıyla gruba atanır. Sistem ayarlarında, grup bir başlığa sahip bir bölüm olarak görünür ve altında bu grubun tüm kanalları listelenir. Bir grup silinirse, tüm kanalları da sistem tarafından otomatik olarak kurtarma imkanı olmadan kaldırılır.
Doğru bildirim kanalı tasarımı, kullanıcı deneyimini ve kullanıcıyı elde tutmayı doğrudan etkiler. Ana desen üç önem seviyesidir: mesajlar ve aramalar için kritik kanal (IMPORTANCE_HIGH), genel bildirimler için standart (IMPORTANCE_DEFAULT) ve pazarlama ve haberler için sessiz (IMPORTANCE_LOW). Bu kademelendirme, kullanıcıya aşırı yükleme olmadan net bir seçenek sunar.
İkinci desen her işlevsel modül için bir kanaldır. Uygulamanın her ana modülü (sohbet, siparişler, akış, pazarlama) kendi kanalına sahiptir. 5’ten fazla modül varsa, bunları bir NotificationChannelGroup içinde birleştirin. Sistem ayarlarında, grup daraltılabilir öğelere sahip bir bölüm olarak görünür — bu, gezinmeyi basitleştirir.
Üçüncü desen bir geliştirici kanalıdır. Hata ayıklama ve hizmet bildirimleri için IMPORTANCE_MIN ile ayrı bir kanal oluşturun. Kullanıcılar bunları gölgede görmez, ancak geliştirici adb aracılığıyla günlükleri analiz edebilir. Üretimde, bu kanal ayarlardaki Intent aracılığıyla silinebilir veya arayüzden gizlenebilir.
Dördüncü desen kanal geri bildirimidir. Kullanıcıya arayüzde hangi kanalların etkin olduğunu ve mevcut önemlerini gösterin. Android 8+’da getNotificationChannel aracılığıyla kanal durumunu alabilir ve kanal devre dışı bırakılmışsa kullanıcıya ayarları değiştirmeyi önerebilirsiniz. Bu, uygulamanın kritik işlevleri için özellikle önemlidir.
Sıkça sorulan sorular
Bildirim görüntülenmez ne gölgede ne de tepside. Sistem, notify() çağrısını sessizce yok sayar. İstisnalar: NotificationCompat kullanıldığında, kütüphane varsayılan bir kanal oluşturur, ancak önemi her zaman DEFAULT’tır. Her zaman kendi kanallarınızı oluşturmanız önerilir.
Bir kanalın adını, açıklamasını ve sesini değiştirebilirsiniz. Önemi değiştiremezsiniz — bu karar geliştiriciden sistem tarafından korunur. Önemi artırmanız gerekiyorsa, farklı bir kimliğe sahip yeni bir kanal oluşturun ve yeni bildirimler için kullanın. Kullanıcı önemi herhangi bir zamanda değiştirebilir.
getNotificationChannel kullanın ve önemi kontrol edin: değer IMPORTANCE_NONE ise kanal devre dışı bırakılmıştır. Ayrıca Intent aracılığıyla kanalın sistem ayarlarını açabilirsiniz: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS app_package ve channel_id parametreleriyle.
Limit yok — Android kanal sayısı için bir sınır belirlemez. Ancak, kullanıcıyı seçeneklerle boğmamak için 5–10’dan fazla kanal oluşturulmaması önerilir. Optimum minimum 2–3 kanaldır: kritik bildirimler, normal ve pazarlama.
Android 7.1 (API 25) ve altında, kanallar desteklenmez. NotificationChannel sınıfı yalnızca API 26’dan itibaren kullanılabilir. Geriye dönük uyumluluk için NotificationCompat kullanın ve kanal oluşturmayı bir koşul içine alın: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).
Ö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