Notification Channel (értesítési csatorna) — egy Android mechanizmus, amely a 8.0 (API 26) verzióban került bevezetésre, és amely kategóriákba csoportosítja az értesítéseket, és kontrollt ad a felhasználónak a viselkedésük felett. Minden csatorna meghatározza a fontossági szintet, hangot, rezgést és vizuális megjelenést az összes rajta keresztül küldött értesítés számára. A Android Developers szerint a NotificationChannel kötelező minden Android 8+ értesítéshez — nélküle az értesítések nem jelennek meg.
Főbb pontok
Notification Channel — egy logikai tároló az azonos típusú értesítések számára Android 8+ (Oreo) rendszerben. A fejlesztő létrehoz egy csatornát egyedi ID-val, beállítja a paramétereit, majd minden értesítést ennek a csatornának a megjelölésével küld el. Az egy csatornában lévő összes értesítés örökli annak beállításait.
Az Android 8 előtt az értesítések kezelése bináris volt: mindent vagy semmit. A felhasználó csak az alkalmazás összes értesítését kapcsolhatta ki teljesen. A csatornák megoldották ezt a problémát: most kikapcsolhatók a reklámértesítések, miközben a barátok üzenetei megmaradnak.
A csatorna létrehozása után annak fontossága (importance) a felhasználó által bármikor módosítható a Beállítások → Alkalmazások → Értesítések menüpontban. A fejlesztő nem változtathatja meg az importance-t programozottan a csatorna létrehozása után — ez egy Android biztonsági korlátozás.
Android 8+-on minden értesítést NotificationChannel-en keresztül kell elküldeni. Ha az alkalmazás csatorna nélkül próbál meg értesítést megjeleníteni — a rendszer csendben figyelmen kívül hagyja. Kivétel — a NotificationCompat-on keresztüli értesítések az alapértelmezett csatornával, amelyet a könyvtár automatikusan hoz létre.
Az értesítési csatornát a NotificationChannel osztályon keresztül történő létrehozáskor beállított paraméterek határozzák meg. A fő paraméter — az importance level, amely meghatározza, hogy az értesítés hogyan lép kölcsönhatásba a felhasználóval.
A létrehozás után a csatorna megjelenik a rendszer értesítési beállításaiban. A felhasználó módosíthatja az importance-t, kikapcsolhatja a hangot, rezgést, vagy teljesen blokkolhatja a csatornát. Minden változás azonnal életbe lép az összes későbbi értesítésre.
A NotificationChannel létrehozásakor beállítható: hang (egyéni vagy rendszer), rezgés (minta és időtartam), fényjelző (LED szín), jelvény (setShowBadge), láthatóság a zárolt képernyőn (setLockscreenVisibility) és Ne zavarjanak mód (setBypassDnd). Ezek a paraméterek a csatorna létrehozásakor rögzítésre kerülnek, és később csak a felhasználó módosíthatja őket.
A fontossági szint (importance) — a csatorna fő paramétere. Meghatározza, hogy az értesítés lejátssza-e a hangot, megjelenik-e a képernyőn, vagy csak az árnyékba kerül. A fontosságot nem szabad összetéveszteni a prioritással — az importance-t a csatorna állítja be, míg a prioritás (setPriority) Android 8+-on figyelmen kívül van hagyva.
| Szint | Konstans | Viselkedés | Hang |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Heads-up banner megjelenítése, megjelenik a panelen | Igen |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Megjelenik a panelen, heads-up nélkül | Igen |
| LOW | IMPORTANCE_LOW (2) | Hang nélkül jelenik meg a panelen | Nem |
| MIN | IMPORTANCE_MIN (1) | Csak az árnyékban, hang és rezgés nélkül | Nem |
| NONE | IMPORTANCE_NONE (0) | Egyáltalán nem jelenik meg | Nem |
A legtöbb felhasználói forgatókönyvhöz használja a IMPORTANCE_DEFAULT (3) értéket — az értesítés hanggal jelenik meg a panelen, de felugró banner nélkül. Az IMPORTANCE_HIGH-t csak kritikus eseményekhez használja: bejövő hívás, üzenet a beszélgetőpartnertől, időzítős emlékeztető.
A csatorna egyszer jön létre — az alkalmazás indításakor vagy az első használatkor. A legjobb gyakorlat az összes csatorna létrehozása az alkalmazás indításakor, az Application.onCreate metódusban. Meglévő csatorna újbóli létrehozása biztonságos — az Android figyelmen kívül hagyja a hívást, ha a csatorna már létezik.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Üzenetek",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Értesítések az új üzenetekről"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Akciók és hírek",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Marketing értesítések és különleges ajánlatok"
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"
}
}
Értesítés küldésekor adja meg a csatorna ID-ját a setChannelId (NotificationCompat esetén) vagy a Notification.Builder konstruktorában. Ha a megadott ID-val rendelkező csatorna nem létezik — az értesítés nem jelenik meg, de hiba sem történik.
Az Android több API-t biztosít a csatornák programozott kezeléséhez: lista lekérése, törlés és aktuális beállítások ellenőrzése. A csatorna törlése azt eredményezi, hogy a rendszer törli az összes értesítését az előzményekből.
val manager =
getSystemService(NotificationManager::class.java)
// Az összes csatorna listájának lekérése
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Csatornák", "${channel.id}: ${channel.importance}")
}
// A jelenlegi importance megismerése (a felhasználó megváltoztathatta)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// A felhasználó kikapcsolta a csatornát
suggestEnablingChannel()
}
// Csatorna törlése
manager.deleteNotificationChannel(CHANNEL_PROMO)
A csatorna létrehozása után a fejlesztő nem tudja programozottan megváltoztatni annak importance-ját — ez az Android korlátozása a felhasználó visszaélésekkel szembeni védelmére. Ha meg kell változtatni a csatorna fontosságát, hozzon létre egy új csatornát másik ID-val, és migrálja az értesítéseket.
Ha egy meglévő csatorna fontosságát kell megváltoztatni, hozzon létre egy új csatornát másik ID-val (pl. „messages_v2“), és kezdjen el értesítéseket küldeni rá. A régi csatorna törölhető a deleteNotificationChannel segítségével — az összes értesítése törlődik az előzményekből. Tájékoztassa a felhasználót a migrációról az alkalmazás felületén keresztül, hogy ne veszítse el a beállításait.
A NotificationChannelGroup több csatornát egyesít egy vizuális csoportba az Android beállítások felületén. A csoportok segítik a felhasználót a navigációban, amikor az alkalmazás 5+ csatornát használ: például „Szociális“, „Rendszer“, „Marketing“.
A csoport a createNotificationChannelGroup segítségével jön létre, és a setGroup metódussal kerül átadásra a csatornának a létrehozásakor. A csoport törlése az összes csatornáját is törli. Minden csatorna csak egy csoporthoz tartozhat.
A gyakorlatban a csatornacsoportok ajánlottak a 3-nál több csatornával rendelkező alkalmazások számára. Egyszerűsítik a navigációt a beállításokban, és csökkentik annak valószínűségét, hogy a felhasználó a csatornalista megértése nélkül egyszerre minden értesítést kikapcsoljon.
A csoport a createNotificationChannelGroup segítségével jön létre egyedi ID-val és névvel. Ezután minden csatorna a setGroup metódussal csatlakozik a csoporthoz. A rendszerbeállításokban a csoport fejlécű szakaszként jelenik meg, amely alatt a csoport összes csatornája található. Ha a csoport törlésre kerül, az összes csatornája automatikusan törlődik a rendszer által, helyreállítási lehetőség nélkül.
Az értesítési csatornák helyes tervezése közvetlenül befolyásolja a felhasználói élményt és a megtartást. Az alapminta — három fontossági szint: kritikus csatorna (IMPORTANCE_HIGH) az üzenetekhez és hívásokhoz, standard (IMPORTANCE_DEFAULT) az általános értesítésekhez és csendes (IMPORTANCE_LOW) a marketinghez és hírekhez. Ez a fokozatosság egyértelmű választást ad a felhasználónak anélkül, hogy túlterhelné.
A második minta — csatorna funkcionális modulonként. Az alkalmazás minden nagy modulja (chat, rendelések, hírfolyam, marketing) megkapja a saját csatornáját. Ha több mint 5 modul van, egyesítse őket NotificationChannelGroup-ban. A rendszerbeállításokban a csoport elrejthető elemekkel rendelkező szakaszként jelenik meg — ez egyszerűsíti a navigációt.
A harmadik minta — csatorna a fejlesztő számára. Hozzon létre egy külön csatornát IMPORTANCE_MIN értékkel a hibakeresési és szerviz értesítések számára. A felhasználók nem látják őket a panelen, de a fejlesztő elemezheti a naplókat az adb-n keresztül. Éles környezetben ez a csatorna törölhető vagy elrejthető a felületről Intent segítségével a beállításokban.
A negyedik minta — visszajelzés a csatornákról. Mutassa meg a felhasználónak a felületen, hogy mely csatornák aktívak és mi a jelenlegi importance-jük. Android 8+-on a csatorna állapota lekérhető a getNotificationChannel segítségével, és javasolható a felhasználónak a beállítások módosítása, ha a csatorna ki van kapcsolva. Ez különösen fontos az alkalmazás kritikus funkciói esetén.
Gyakran Ismételt Kérdések
Az értesítés nem jelenik meg sem a panelen, sem az árnyékban. A rendszer csendben figyelmen kívül hagyja a notify() hívást. Kivételek: a NotificationCompat használatakor a könyvtár létrehoz egy alapértelmezett csatornát, de annak importance mindig DEFAULT. Javasolt mindig saját csatornákat létrehozni.
Megváltoztatható a csatorna neve, leírása és hangja. Az importance nem változtatható meg — ezt a döntést a rendszer védi a fejlesztőtől. Ha növelni kell a fontosságot — hozzon létre egy új csatornát másik ID-val, és használja azt az új értesítésekhez. A felhasználó bármikor módosíthatja az importance-t.
Használja a getNotificationChannel függvényt, és ellenőrizze az importance-t: ha az érték IMPORTANCE_NONE, a csatorna ki van kapcsolva. Megnyithatja a csatorna rendszerbeállításait Intent segítségével is: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS app_package és channel_id paraméterekkel.
Nincs korlátozás — az Android nem szab határt a csatornák számának. Azonban javasolt nem 5–10-nél több csatornát létrehozni, hogy ne terhelje túl a felhasználót a választással. Az optimális minimum 2–3 csatorna: kritikus értesítések, szokásosak és marketing.
Android 7.1 (API 25) és régebbi verziókon a csatornák nem támogatottak. A NotificationChannel osztály csak API 26-tól érhető el. A visszafelé kompatibilitáshoz használja a NotificationCompat osztályt, és csomagolja a csatorna létrehozását egy if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) feltételbe.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is