Notification Channel (bildiriş kanalı) — Android-in 8.0 (API 26) versiyasında təqdim edilmiş mexanizmdir. O, bildirişləri kateqoriyalara qruplaşdırır və istifadəçiyə onların davranışına nəzarət etmək imkanı verir. Hər bir kanal özündən göndərilən bütün bildirişlər üçün vaciblik səviyyəsini, səsi, vibrasiyanı və vizual tərtibatı müəyyən edir. Android Developers məlumatına görə, NotificationChannel Android 8+-də bütün bildirişlər üçün məcburidir — onsuz bildirişlər göstərilmir.
Əsas məqamlar
Notification Channel — Android 8+ (Oreo) sistemində eyni tipli bildirişlər üçün məntiqi konteynerdir. Tərtibatçı unikal ID ilə kanal yaradır, onun parametrlərini təyin edir və sonra hər bir bildirişi bu kanalı göstərərək göndərir. Eyni kanaldakı bütün bildirişlər onun parametrlərini miras alır.
Android 8-dən əvvəl bildirişlərin idarə edilməsi ikili idi: ya hamısı, ya heç biri. İstifadəçi yalnız tətbiqin bildirişlərini tamamilə söndürə bilərdi. Kanallar bu problemi həll etdi: indi reklam bildirişlərini söndürüb, dostlardan gələn mesajları saxlamaq olar.
Kanal yaradıldıqdan sonra onun vaciblik səviyyəsi (importance) istifadəçi tərəfindən istənilən vaxt Parametrlər → Tətbiqlər → Bildirişlər vasitəsilə dəyişdirilə bilər. Tərtibatçı kanal yaradıldıqdan sonra importance-i proqram olaraq dəyişə bilməz — bu Android təhlükəsizlik məhdudiyyətidir.
Android 8+-də hər bir bildiriş NotificationChannel vasitəsilə göndərilməlidir. Tətbiq kanalsız bildiriş göstərməyə çalışarsa — sistem onu səssizcə görməzlikdən gəlir. İstisna — kitabxana tərəfindən avtomatik yaradılan standart kanalla NotificationCompat vasitəsilə bildirişlərdir.
Bildiriş kanalı NotificationChannel sinfi vasitəsilə yaradılarkən təyin olunan parametrlər dəsti ilə müəyyən edilir. Əsas parametr — bildirişin istifadəçi ilə qarşılıqlı əlaqəsini müəyyən edən importance səviyyəsidir.
Yaradıldıqdan sonra kanal sistem bildiriş parametrlərində görünür. İstifadəçi importance-i dəyişə, səsi, vibrasiyanı söndürə və ya kanalı tamamilə bloklaya bilər. Bütün dəyişikliklər sonrakı bildirişlər üçün dərhal qüvvəyə minir.
NotificationChannel yaradılarkən aşağıdakılar tənzimlənə bilər: səs (fərdi və ya sistem), vibrasiya (naxış və müddət), işıq göstəricisi (LED rəngi), nişan (setShowBadge), kilid ekranında görünmə (setLockscreenVisibility) və Rahatsız etmə rejimi (setBypassDnd). Bu parametrlər kanal yaradılarkən təsbit edilir və sonradan yalnız istifadəçi tərəfindən dəyişdirilə bilər.
Vaciblik səviyyəsi (importance) — kanalın əsas parametridir. Bildirişin səs çalacağını, ekranda görünəcəyini və ya sadəcə kölgədə yerləşəcəyini müəyyən edir. Importance-i prioritetlə qarışdırmaq olmaz — importance kanal tərəfindən təyin edilir, prioritet (setPriority) isə Android 8+-də nəzərə alınmır.
| Səviyyə | Sabit | Davranış | Səs |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Heads-up banner göstərir, pərdədə görünür | Bəli |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Pərdədə görünür, heads-up yoxdur | Bəli |
| LOW | IMPORTANCE_LOW (2) | Səssiz pərdədə görünür | Xeyr |
| MIN | IMPORTANCE_MIN (1) | Yalnız kölgədə, səs və vibrasiya olmadan | Xeyr |
| NONE | IMPORTANCE_NONE (0) | Ümumiyyətlə göstərilmir | Xeyr |
Əksər istifadəçi ssenariləri üçün IMPORTANCE_DEFAULT (3) istifadə edin — bildiriş səslə pərdədə görünəcək, lakin açılan banner olmadan. IMPORTANCE_HIGH yalnız kritik hadisələr üçün istifadə edin: daxil olan zəng, həmsöhbətdən mesaj, taymer xatırlatması.
Kanal bir dəfə — tətbiq işə salındıqda və ya ilk istifadə zamanı yaradılır. Ən yaxşı təcrübə — bütün kanalları tətbiq işə salındıqda, Application.onCreate metodunda yaratmaqdır. Mövcud kanalı təkrar yaratmaq təhlükəsizdir — kanal artıq varsa, Android zəngi nəzərə almır.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Mesajlar",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Yeni mesajlar haqqında bildirişlər"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Aksiyalar və xəbərlər",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Marketinq bildirişləri və xüsusi təkliflər"
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"
}
}
Bildiriş göndərərkən kanalın ID-sini setChannelId (NotificationCompat üçün) və ya Notification.Builder konstruktorunda göstərin. Göstərilən ID ilə kanal mövcud deyilsə — bildiriş göstərilməyəcək, lakin xəta baş verməyəcək.
Android kanalların proqram idarə edilməsi üçün bir neçə API təqdim edir: siyahının alınması, silinməsi və cari parametrlərin yoxlanılması. Kanalın silinməsi onun bütün bildirişlərinin sistem tərəfindən tarixçədən silinməsinə səbəb olur.
val manager =
getSystemService(NotificationManager::class.java)
// Bütün kanalların siyahısını əldə edin
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Kanallar", "${channel.id}: ${channel.importance}")
}
// Cari importance-i öyrənin (istifadəçi dəyişə bilər)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// İstifadəçi kanalı söndürüb
suggestEnablingChannel()
}
// Kanalı silin
manager.deleteNotificationChannel(CHANNEL_PROMO)
Kanal yaradıldıqdan sonra tərtibatçı onun importance-ni proqram olaraq dəyişə bilməz — bu Android-in istifadəçini sui-istifadədən qorumaq üçün məhdudiyyətidir. Kanalın vacibliyini dəyişmək lazımdırsa, fərqli ID ilə yeni kanal yaradın və bildirişləri köçürün.
Mövcud kanalın vacibliyini dəyişmək tələb olunarsa, fərqli ID ilə (məsələn, “messages_v2”) yeni kanal yaradın və ona bildirişlər göndərməyə başlayın. Köhnə kanalı deleteNotificationChannel vasitəsilə silmək olar — onun bütün bildirişləri tarixçədən silinəcək. İstifadəçini miqrasiya barədə tətbiq interfeysi vasitəsilə xəbərdar edin ki, parametrlərini itirməsin.
NotificationChannelGroup bir neçə kanalı Android parametrlər interfeysində bir vizual qrupda birləşdirir. Qruplar tətbiq 5+ kanaldan istifadə etdikdə istifadəçiyə istiqamətlənməyə kömək edir: məsələn, “Sosial”, “Sistem”, “Marketinq”.
Qrup createNotificationChannelGroup vasitəsilə yaradılır və setGroup metodu ilə kanala ötürülür. Qrupun silinməsi onun bütün kanallarını da silir. Hər bir kanal yalnız bir qrupa aid ola bilər.
Praktikada kanal qrupları 3-dən çox kanalı olan tətbiqlər üçün tövsiyə olunur. Onlar parametrlərdə naviqasiyanı sadələşdirir və istifadəçinin kanal siyahısını anlamadan bütün bildirişləri bir anda söndürmə ehtimalını azaldır.
Qrup unikal ID və adla createNotificationChannelGroup vasitəsilə yaradılır. Sonra hər bir kanal setGroup metodu ilə qrupa bağlanır. Sistem parametrlərində qrup başlıqlı bölmə kimi göstərilir, onun altında bu qrupun bütün kanalları yerləşir. Qrup silinərsə, onun bütün kanalları da sistem tərəfindən avtomatik silinir və bərpa edilə bilməz.
Bildiriş kanallarının düzgün dizaynı istifadəçi təcrübəsinə və saxlama qabiliyyətinə birbaşa təsir edir. Əsas nümunə — üç vaciblik səviyyəsi: mesajlar və zənglər üçün kritik kanal (IMPORTANCE_HIGH), ümumi bildirişlər üçün standart (IMPORTANCE_DEFAULT) və marketinq və xəbərlər üçün sakit (IMPORTANCE_LOW). Bu dərəcələndirmə istifadəçiyə yükləmədən başa düşülən seçim verir.
İkinci nümunə — funksional modula görə kanal. Tətbiqin hər bir böyük modulu (çat, sifarişlər, lent, marketinq) öz kanalını alır. Modullar 5-dən çoxdursa, onları NotificationChannelGroup-də birləşdirin. Sistem parametrlərində qrup gizlənə bilən elementləri olan bölmə kimi göstərilir — bu naviqasiyanı sadələşdirir.
Üçüncü nümunə — tərtibatçı üçün kanal. Debug və xidmət bildirişləri üçün IMPORTANCE_MIN ilə ayrıca kanal yaradın. İstifadəçilər onları pərdədə görməyəcək, lakin tərtibatçı adb vasitəsilə logları təhlil edə bilər. Production-da bu kanal silinə və ya Intent vasitəsilə parametrlərdən gizlənə bilər.
Dördüncü nümunə — kanallar haqqında geribildirim. İstifadəçiyə interfeysdə hansı kanalların aktiv olduğunu və onların cari importance-ni göstərin. Android 8+-də kanalın statusunu getNotificationChannel vasitəsilə əldə edib, kanal söndürülübsə istifadəçiyə parametrləri dəyişməyi təklif edə bilərsiniz. Bu, xüsusilə tətbiqin kritik funksiyaları üçün vacibdir.
Tez-tez verilən suallar
Bildiriş göstərilməyəcək nə pərdədə, nə də kölgədə. Sistem notify() çağırışını səssizcə görməzlikdən gəlir. İstisnalar: NotificationCompat istifadə edərkən kitabxana standart kanal yaradır, lakin onun importance həmişə DEFAULT olur. Həmişə öz kanallarınızı yaratmaq tövsiyə olunur.
Kanalın adını, təsvirini və səsini dəyişdirmək olar. Importance-i dəyişdirmək mümkün deyil — bu qərar sistem tərəfindən tərtibatçıdan qorunur. Vacibliyi artırmaq lazımdırsa — fərqli ID ilə yeni kanal yaradın və yeni bildirişlər üçün istifadə edin. İstifadəçi importance-i istənilən vaxt dəyişə bilər.
getNotificationChannel istifadə edin və importance-i yoxlayın: dəyər IMPORTANCE_NONE-dirsə, kanal söndürülüb. Həmçinin Intent vasitəsilə kanalın sistem parametrlərini aça bilərsiniz: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS app_package və channel_id parametrləri ilə.
Heç bir məhdudiyyət yoxdur — Android kanalların sayına limit qoymur. Bununla belə, istifadəçini seçimlə yükləməmək üçün 5–10-dan çox kanal yaratmamaq tövsiyə olunur. Optimal minimum 2–3 kanaldır: kritik bildirişlər, adi bildirişlər və marketinq.
Android 7.1 (API 25) və daha köhnə versiyalarda kanallar dəstəklənmir. NotificationChannel sinfi yalnız API 26-dan etibarən mövcuddur. Geriyə uyğunluq üçün NotificationCompat istifadə edin və kanal yaradılmasını if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) şərtinə salın.
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