Notification Channel (notiseringskanal) — är en Android-mekanism som introducerades i version 8.0 (API 26), som grupperar notiser efter kategori och ger användaren kontroll över deras beteende. Varje kanal definierar viktighetsnivå, ljud, vibration och visuellt utseende för alla notiser som skickas genom den. Enligt Android Developers är NotificationChannel obligatoriskt för alla notiser på Android 8+ — utan det visas inte notiserna.
Huvudpunkter
Notification Channel — är en logisk behållare för notiser av samma typ i Android 8+ (Oreo). Utvecklaren skapar en kanal med ett unikt ID, ställer in dess parametrar och skickar sedan varje notis med angivande av denna kanal. Alla notiser i samma kanal ärver dess inställningar.
Före Android 8 var notishanteringen binär: allt eller inget. Användaren kunde bara stänga av appens notiser helt. Kanaler löste detta problem: nu kan reklamnotiser stängas av medan meddelanden från vänner behålls.
Efter att kanalen har skapats kan dess viktighet (importance) ändras av användaren när som helst via Inställningar → Appar → Notiser. Utvecklaren kan inte programmatiskt ändra importance efter att kanalen har skapats — detta är en Android-säkerhetsbegränsning.
På Android 8+ måste varje notis skickas via NotificationChannel. Om appen försöker visa en notis utan kanal — ignorerar systemet den tyst. Undantag — notiser via NotificationCompat med en standardkanal som skapas automatiskt av biblioteket.
En notiseringskanal definieras av en uppsättning parametrar som ställs in när den skapas via klassen NotificationChannel. Huvudparametern — viktighetsnivå (importance level), som bestämmer hur notisen interagerar med användaren.
Efter skapandet visas kanalen i systemets notisinställningar. Användaren kan ändra importance, stänga av ljud, vibration eller helt blockera kanalen. Alla ändringar träder i kraft omedelbart för alla efterföljande notiser.
När NotificationChannel skapas kan följande konfigureras: ljud (anpassat eller system), vibration (mönster och varaktighet), ljusindikator (LED-färg), märke (setShowBadge), synlighet på låst skärm (setLockscreenVisibility) och Stör ej-läge (setBypassDnd). Dessa parametrar fastställs när kanalen skapas och kan senare endast ändras av användaren.
Viktighetsnivå (importance) — kanalens huvudparameter. Den bestämmer om notisen ska spela ljud, visas på skärmen eller bara placeras i skuggan. Viktighet ska inte förväxlas med prioritet — importance ställs in av kanalen, medan prioritet (setPriority) ignoreras på Android 8+.
| Nivå | Konstant | Beteende | Ljud |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Visar heads-up-banner, visas i panelen | Ja |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Visas i panelen, utan heads-up | Ja |
| LOW | IMPORTANCE_LOW (2) | Visas i panelen utan ljud | Nej |
| MIN | IMPORTANCE_MIN (1) | Endast i skuggan, utan ljud och vibration | Nej |
| NONE | IMPORTANCE_NONE (0) | Visas inte alls | Nej |
För de flesta användarscenarier använd IMPORTANCE_DEFAULT (3) — notisen visas i panelen med ljud, men utan popup-banner. Använd IMPORTANCE_HIGH endast för kritiska händelser: inkommande samtal, meddelande från samtalspartner, påminnelse med timer.
Kanalen skapas en gång — vid appstart eller vid första användningen. Bästa praxis är att skapa alla kanaler vid appstart, i metoden Application.onCreate. Att återskapa en befintlig kanal är säkert — Android ignorerar anropet om kanalen redan finns.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Meddelanden",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Notiser om nya meddelanden"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Erbjudanden och nyheter",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Marknadsföringsnotiser och specialerbjudanden"
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"
}
}
Vid sändning av notis, ange kanalens ID via setChannelId (för NotificationCompat) eller i konstruktorn för Notification.Builder. Om kanalen med angivet ID inte finns — visas inte notisen, men inget fel uppstår.
Android tillhandahåller flera API:er för programmatisk kanalhantering: hämta lista, ta bort och kontrollera aktuella inställningar. Borttagning av en kanal leder till att alla dess notiser tas bort från historiken av systemet.
val manager =
getSystemService(NotificationManager::class.java)
// Hämta lista över alla kanaler
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Kanaler", "${channel.id}: ${channel.importance}")
}
// Ta reda på aktuell importance (användaren kan ha ändrat den)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// Användaren har stängt av kanalen
suggestEnablingChannel()
}
// Ta bort kanal
manager.deleteNotificationChannel(CHANNEL_PROMO)
Efter att kanalen har skapats kan utvecklaren inte programmatiskt ändra dess importance — detta är en Android-begränsning för att skydda användaren från missbruk. Om kanalens viktighet behöver ändras, skapa en ny kanal med ett annat ID och migrera notiserna.
Om viktigheten för en befintlig kanal behöver ändras, skapa en ny kanal med ett annat ID (t.ex. “messages_v2”) och börja skicka notiser till den. Den gamla kanalen kan tas bort via deleteNotificationChannel — alla dess notiser tas bort från historiken. Informera användaren om migreringen via appens gränssnitt så att han eller hon inte förlorar inställningarna.
NotificationChannelGroup kombinerar flera kanaler i en visuell grupp i Android-inställningsgränssnittet. Grupper hjälper användaren att navigera när appen använder 5+ kanaler: till exempel “Socialt”, “System”, “Marknadsföring”.
Gruppen skapas via createNotificationChannelGroup och skickas till kanalen vid dess skapande via metoden setGroup. Borttagning av gruppen tar också bort alla dess kanaler. Varje kanal kan bara tillhöra en grupp.
I praktiken rekommenderas kanalgrupper starkt för appar med fler än 3 kanaler. De förenklar navigeringen i inställningarna och minskar sannolikheten för att användaren stänger av alla notiser på en gång utan att förstå kanallistan.
Gruppen skapas via createNotificationChannelGroup med ett unikt ID och namn. Sedan kopplas varje kanal till gruppen via metoden setGroup. I systeminställningarna visas gruppen som ett avsnitt med rubrik, under vilket alla kanaler i denna grupp finns. Om gruppen tas bort tas alla dess kanaler också automatiskt bort av systemet utan möjlighet till återställning.
Korrekt design av notiseringskanaler påverkar direkt användarupplevelsen och retention. Huvudmönstret — tre viktighetsnivåer: kritisk kanal (IMPORTANCE_HIGH) för meddelanden och samtal, standard (IMPORTANCE_DEFAULT) för allmänna notiser och tyst (IMPORTANCE_LOW) för marknadsföring och nyheter. En sådan gradering ger användaren ett tydligt val utan överbelastning.
Det andra mönstret — kanal per funktionell modul. Varje stor modul i appen (chatt, beställningar, flöde, marknadsföring) får sin egen kanal. Om det finns fler än 5 moduler, kombinera dem i NotificationChannelGroup. I systeminställningarna visas gruppen som ett avsnitt med dolda element — detta förenklar navigeringen.
Det tredje mönstret — kanal för utvecklare. Skapa en separat kanal med IMPORTANCE_MIN för felsöknings- och servicenotiser. Användare ser dem inte i panelen, men utvecklaren kan analysera loggar via adb. I produktion kan denna kanal tas bort eller döljas från gränssnittet via Intent i inställningarna.
Det fjärde mönstret — återkoppling om kanaler. Visa användaren i gränssnittet vilka kanaler som är aktiva och vad deras nuvarande importance är. På Android 8+ kan kanalstatus hämtas via getNotificationChannel och användaren kan föreslås ändra inställningar om kanalen är avstängd. Detta är särskilt viktigt för appens kritiska funktioner.
Vanliga frågor
Notisen visas inte vare sig i panelen eller i skuggan. Systemet ignorerar tyst anropet notify(). Undantag: vid användning av NotificationCompat skapar biblioteket en standardkanal, men dess importance är alltid DEFAULT. Det rekommenderas att alltid skapa egna kanaler.
Kan ändra kanalens namn, beskrivning och ljud. Importance kan inte ändras — detta beslut skyddas av systemet från utvecklaren. Om viktigheten behöver ökas — skapa en ny kanal med ett annat ID och använd den för nya notiser. Användaren kan ändra importance när som helst.
Använd getNotificationChannel och kontrollera importance: om värdet är IMPORTANCE_NONE är kanalen avstängd. Du kan också öppna kanalens systeminställningar via Intent: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS med parametrarna app_package och channel_id.
Det finns inga begränsningar — Android sätter ingen gräns för antalet kanaler. Det rekommenderas dock att inte skapa fler än 5–10 kanaler för att inte överbelasta användaren med val. Det optimala minimumet är 2–3 kanaler: kritiska notiser, vanliga och marknadsföring.
På Android 7.1 (API 25) och äldre stöds inte kanaler. Klassen NotificationChannel är endast tillgänglig från API 26. För bakåtkompatibilitet, använd NotificationCompat och omge skapandet av kanalen med en if-sats (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också