Notification Channel (canal de notification) est un mécanisme Android, introduit dans la version 8.0 (API 26), qui regroupe les notifications par catégorie et donne à l’utilisateur le contrôle sur leur comportement. Chaque canal définit le niveau d’importance, le son, la vibration et l’apparence visuelle pour toutes les notifications envoyées via celui-ci. Selon Android Developers, NotificationChannel est obligatoire pour toutes les notifications sur Android 8+ — sans lui, les notifications ne s’affichent pas.
Points clés
Notification Channel est un conteneur logique pour les notifications du même type dans Android 8+ (Oreo). Le développeur crée un canal avec un ID unique, définit ses paramètres, puis envoie chaque notification en spécifiant ce canal. Toutes les notifications d’un même canal héritent de ses réglages.
Avant Android 8, la gestion des notifications était binaire : tout ou rien. L’utilisateur ne pouvait que désactiver complètement toutes les notifications de l’application. Les canaux ont résolu ce problème : vous pouvez maintenant désactiver les notifications « publicitaires » mais conserver les « messages d’amis ».
Après la création d’un canal, son importance peut être modifiée par l’utilisateur à tout moment via Paramètres → Applications → Notifications. Le développeur ne peut pas modifier l’importance par programmation après la création du canal — il s’agit d’une restriction de sécurité d’Android.
Sur Android 8+, chaque notification doit être envoyée via un NotificationChannel. Si une application tente d’afficher une notification sans canal, le système l’ignore silencieusement. L’exception concerne les notifications via NotificationCompat avec un canal par défaut, qui est créé automatiquement par la bibliothèque.
Un canal de notification est défini par un ensemble de paramètres définis lors de sa création via la classe NotificationChannel. Le paramètre principal est le niveau d’importance, qui détermine la façon dont la notification interagit avec l’utilisateur.
Après la création, le canal apparaît dans les paramètres de notification du système. L’utilisateur peut modifier l’importance, désactiver le son, la vibration ou bloquer complètement le canal. Toutes les modifications prennent effet immédiatement pour toutes les notifications suivantes.
Lors de la création d’un NotificationChannel, vous pouvez configurer : le son (personnalisé ou système), la vibration (motif et durée), l’indicateur lumineux (couleur LED), l’icône de badge (setShowBadge), l’écran de verrouillage (setLockscreenVisibility) et le mode Ne pas déranger (setBypassDnd). Ces paramètres sont fixés à la création du canal et ne peuvent être modifiés que par l’utilisateur ultérieurement.
Le niveau d’importance est le paramètre principal d’un canal. Il détermine si la notification émettra un son, apparaîtra à l’écran ou sera simplement placée dans l’ombre. L’importance ne doit pas être confondue avec la priorité — l’importance est définie par le canal, et la priorité (setPriority) est ignorée sur Android 8+.
| Niveau | Constante | Comportement | Son |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Affiche une bannière heads-up, apparaît dans l’ombre | Oui |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Apparaît dans l’ombre, sans heads-up | Oui |
| LOW | IMPORTANCE_LOW (2) | Apparaît dans l’ombre sans son | Non |
| MIN | IMPORTANCE_MIN (1) | Uniquement dans l’ombre, sans son ni vibration | Non |
| NONE | IMPORTANCE_NONE (0) | Ne s’affiche pas du tout | Non |
Pour la plupart des scénarios utilisateur, utilisez IMPORTANCE_DEFAULT (3) — la notification apparaîtra dans l’ombre avec son mais sans bannière contextuelle. Utilisez IMPORTANCE_HIGH uniquement pour les événements critiques : appel entrant, message d’un contact, rappel de minuteur.
Le canal est créé une fois au démarrage de l’application ou lors de la première utilisation. La meilleure pratique est de créer tous les canaux au démarrage de l’application, dans la méthode Application.onCreate. La recréation d’un canal existant est sûre — Android ignore l’appel si le canal existe déjà.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Messages",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Notifications de nouveaux messages"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Promotions et actualités",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Notifications marketing et offres spéciales"
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"
}
}
Lors de l’envoi d’une notification, spécifiez l’ID du canal via setChannelId (pour NotificationCompat) ou dans le constructeur Notification.Builder. Si le canal avec l’ID spécifié n’existe pas, la notification ne sera pas affichée, mais aucune erreur ne se produira.
Android fournit plusieurs API pour la gestion programmatique des canaux : obtenir la liste, supprimer et vérifier les paramètres actuels. La suppression d’un canal entraîne la suppression de toutes ses notifications de l’historique système.
val manager =
getSystemService(NotificationManager::class.java)
// Obtenir la liste de tous les canaux
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Canaux", "${channel.id}: ${channel.importance}")
}
// Connaître l’importance actuelle (l’utilisateur a pu la modifier)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// L’utilisateur a désactivé le canal
suggestEnablingChannel()
}
// Supprimer le canal
manager.deleteNotificationChannel(CHANNEL_PROMO)
Après la création d’un canal, le développeur ne peut pas modifier son importance par programmation — il s’agit d’une restriction Android pour protéger l’utilisateur des abus. Si vous devez modifier l’importance d’un canal, créez un nouveau canal avec un ID différent et migrez les notifications.
Si vous devez modifier l’importance d’un canal existant, créez un nouveau canal avec un ID différent (ex. « messages_v2 ») et commencez à y envoyer des notifications. L’ancien canal peut être supprimé via deleteNotificationChannel — toutes ses notifications seront supprimées de l’historique. Avertissez l’utilisateur de la migration via l’interface de l’application afin qu’il ne perde pas ses réglages.
NotificationChannelGroup regroupe plusieurs canaux en un groupe visuel dans l’interface des paramètres Android. Les groupes aident l’utilisateur à naviguer lorsque l’application utilise 5 canaux ou plus : par exemple, « Social », « Système », « Marketing ».
Un groupe est créé via createNotificationChannelGroup et transmis au canal lors de sa création via la méthode setGroup. La suppression d’un groupe supprime également tous ses canaux. Chaque canal peut appartenir à un seul groupe.
Dans la pratique, les groupes de canaux sont recommandés pour les applications ayant plus de 3 canaux. Ils simplifient la navigation dans les paramètres et réduisent la probabilité que l’utilisateur désactive toutes les notifications à la fois sans comprendre la liste des canaux.
Un groupe est créé via createNotificationChannelGroup avec un ID et un nom uniques. Ensuite, chaque canal est attribué au groupe via la méthode setGroup. Dans les paramètres système, le groupe apparaît comme une section avec un en-tête, sous lequel tous les canaux de ce groupe sont répertoriés. Si un groupe est supprimé, tous ses canaux sont également automatiquement supprimés par le système sans possibilité de récupération.
Une conception appropriée des canaux de notification affecte directement l’expérience utilisateur et la fidélisation. Le modèle principal est celui des trois niveaux d’importance : canal critique (IMPORTANCE_HIGH) pour les messages et les appels, standard (IMPORTANCE_DEFAULT) pour les notifications générales et silencieux (IMPORTANCE_LOW) pour le marketing et les actualités. Cette gradation offre à l’utilisateur un choix clair sans surcharge.
Le deuxième modèle est un canal par module fonctionnel. Chaque module principal de l’application (chat, commandes, fil d’actualité, marketing) a son propre canal. S’il y a plus de 5 modules, regroupez-les dans un NotificationChannelGroup. Dans les paramètres système, le groupe apparaît comme une section avec des éléments pliables — cela simplifie la navigation.
Le troisième modèle est un canal développeur. Créez un canal séparé avec IMPORTANCE_MIN pour les notifications de débogage et de service. Les utilisateurs ne les verront pas dans l’ombre, mais le développeur peut analyser les logs via adb. En production, ce canal peut être supprimé ou masqué de l’interface via Intent dans les paramètres.
Le quatrième modèle est le retour d’information sur le canal. Affichez à l’utilisateur dans l’interface quels canaux sont actifs et quelle est leur importance actuelle. Sur Android 8+, vous pouvez obtenir l’état du canal via getNotificationChannel et proposer à l’utilisateur de modifier les paramètres si le canal est désactivé. Ceci est particulièrement important pour les fonctions critiques de l’application.
Foire aux questions
La notification ne s’affichera pas ni dans l’ombre ni dans le tiroir. Le système ignore silencieusement l’appel de notify(). Exceptions : lors de l’utilisation de NotificationCompat, la bibliothèque crée un canal par défaut, mais son importance est toujours DEFAULT. Il est recommandé de toujours créer vos propres canaux.
Vous pouvez modifier le nom, la description et le son d’un canal. Vous ne pouvez pas modifier l’importance — cette décision est protégée par le système contre le développeur. Si vous devez augmenter l’importance, créez un nouveau canal avec un ID différent et utilisez-le pour les nouvelles notifications. L’utilisateur peut modifier l’importance à tout moment.
Utilisez getNotificationChannel et vérifiez l’importance : si la valeur est IMPORTANCE_NONE, le canal est désactivé. Vous pouvez également ouvrir les paramètres système du canal via Intent : Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS avec les paramètres app_package et channel_id.
Il n’y a pas de limites — Android ne fixe pas de limite au nombre de canaux. Cependant, il est recommandé de ne pas créer plus de 5–10 canaux pour ne pas surcharger l’utilisateur de choix. Le minimum optimal est de 2–3 canaux : notifications critiques, régulières et marketing.
Sur Android 7.1 (API 25) et versions antérieures, les canaux ne sont pas pris en charge. La classe NotificationChannel n’est disponible qu’à partir de l’API 26. Pour la rétrocompatibilité, utilisez NotificationCompat et encapsulez la création du canal dans une condition : if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi