Notification Category (catégorie de notification) est un mécanisme iOS permettant de regrouper les notifications push par type et d'y attacher des actions personnalisées. La catégorie détermine quels boutons s'affichent lors de l'utilisation de 3D Touch ou d'un appui long sur une notification, ainsi que la façon dont le système traite les notifications entrantes de ce type. Selon la Documentation Développeur Apple, UNNotificationCategory est enregistré dans UNUserNotificationCenter et lié à une notification via le champ category dans le payload APNS.
Points clés
Notification Category est une fonctionnalité iOS (depuis la version 8.0) qui permet aux développeurs de classer les notifications push et d'y ajouter des actions interactives. Lorsqu'un utilisateur reçoit une notification et appuie fermement (3D Touch) ou effectue un appui long, des boutons définis par la catégorie apparaissent. Cela rend les notifications interactives et permet aux utilisateurs d'agir sans ouvrir l'application.
Une catégorie est enregistrée via un objet UNNotificationCategory, qui contient un identifiant, un tableau d'actions et des paramètres d'affichage optionnels. Le système utilise l'identifiant de catégorie du payload APNS pour trouver la catégorie enregistrée et afficher les boutons correspondants.
Contrairement à Android Notification Channel, iOS Category ne gère pas l'importance, le son ou la vibration. Son seul but est de fournir des capacités interactives pour les notifications : boutons de réponse, de confirmation, d'annulation ou de saisie de texte.
Les catégories ne sont pas obligatoires pour afficher les notifications push sur iOS. La notification apparaîtra de toute façon — avec des boutons si une catégorie est enregistrée, ou sans. Les catégories ne sont nécessaires que pour ajouter de l'interactivité aux notifications.
Le mécanisme des catégories comprend quatre étapes : enregistrer la catégorie sur le client, envoyer un payload APNS avec la catégorie, le système reconnaître la catégorie et traiter l'action de l'utilisateur.
Les actions dans une catégorie peuvent être de deux types : foreground (ouvrent l'application) et background (s'exécutent en arrière-plan). Pour les actions en arrière-plan, l'application dispose d'un temps limité (environ 30 secondes) pour traiter dans UNNotificationActionHandler.
UNNotificationCategory prend en charge plusieurs options via le paramètre options : customDismissAction — recevoir un événement lors du balayage de la notification, allowInCarPlay — afficher les actions dans CarPlay, hiddenPreviewsBodyPlaceholder — texte d'espace réservé personnalisé pour les aperçus masqués.
iOS propose deux types d'actions pour les catégories de notifications. Chaque type a son propre objectif et sa propre façon d'interagir avec l'utilisateur.
| Type | Classe | Description | Exemple |
|---|---|---|---|
| Action simple | UNNotificationAction | Un bouton avec un titre et des options (destructive, foreground, authenticationRequired) | « Supprimer », « Voir » |
| Saisie de texte | UNTextInputAction | Un bouton qui ouvre un champ de saisie de texte avec un espace réservé | « Répondre », « Commenter » |
UNTextInputAction est une fonctionnalité unique d'iOS. Lorsque l'utilisateur tape sur le bouton « Répondre », le système affiche un champ de texte où l'utilisateur saisit sa réponse. Le texte saisi est transmis au délégué avec l'identifiant de l'action. Cela permet d'implémenter des réponses rapides sans ouvrir l'application.
Options d'action : options.authenticationRequired — nécessite le déverrouillage de l'appareil, options.destructive — met le bouton en rouge (pour les actions dangereuses), options.foreground — ouvre l'application après le tap.
Les catégories sont enregistrées au lancement de l'application, généralement dans la méthode didFinishLaunchingWithOptions. L'enregistrement se fait via UNUserNotificationCenter, après avoir demandé l'autorisation de notification. Les catégories peuvent être mises à jour à chaque lancement — les anciennes versions sont remplacées par de nouvelles.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Répondre",
options: [.foreground],
textInputButtonTitle: "Envoyer",
textInputPlaceholder: "Saisissez un message..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Supprimer",
options: [.destructive]
)
let messageCategory = UNNotificationCategory(
identifier: "message",
actions: [replyAction, deleteAction],
intentIdentifiers: [],
options: [.customDismissAction]
)
UNUserNotificationCenter.current()
.setNotificationCategories([messageCategory])
}
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UNUserNotificationCenter.current().delegate = self
registerNotificationCategories()
return true
}
}
Après avoir enregistré la catégorie, toute notification avec category = « message » dans le payload APNS affichera les boutons « Répondre » et « Supprimer ». Le traitement des taps se fait dans userNotificationCenter:didReceive response, où actionIdentifier détermine quel bouton a été pressé.
Lorsque l'utilisateur tape sur un bouton de catégorie, iOS appelle le UNUserNotificationCenterDelegate avec un objet UNNotificationResponse. response.actionIdentifier contient l'identifiant du bouton tapé, et response.notification.request.content.userInfo contient les données personnalisées du payload.
Les développeurs familiarisés avec les canaux de notification Android les confondent souvent avec les catégories de notification iOS. Malgré le nom similaire, ces mécanismes résolvent des tâches différentes et fonctionnent différemment.
Les deux plateformes peuvent combiner les deux mécanismes : sur Android, une notification peut appartenir à un canal avec des actions de NotificationCompat, tandis que sur iOS, une catégorie complète les canaux, qui sur iOS sont appelés thread-id et servent à regrouper les notifications dans le centre de notifications.
Pour qu'une notification s'affiche avec les boutons de la catégorie, le serveur doit inclure la clé category dans le payload APNS. Sans cette clé, le système ne saura pas quelle catégorie appliquer à la notification.
{
"aps": {
"alert": {
"title": "Nouveau message",
"body": "Anna : Bonjour ! Comment vas-tu ?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
La clé category doit correspondre exactement à l'identifiant enregistré via setNotificationCategories sur le client. La casse est importante — « message » et « Message » sont considérées comme des catégories différentes. Si la catégorie n'est pas trouvée, la notification apparaît sans boutons, sans erreur dans les logs.
Si le serveur envoie une notification avec une catégorie non enregistrée sur le client, iOS ignore la catégorie et affiche la notification sans boutons. L'erreur n'est pas journalisée et l'application n'a pas connaissance de l'inadéquation. Il est recommandé de synchroniser la liste des catégories entre le serveur et le client.
Lors de la conception de catégories de notifications sur iOS, suivez le principe une catégorie — un scénario. Chaque catégorie doit correspondre à un type spécifique d'interaction : répondre à un message, confirmer une action, refuser une demande. Ne mélangez pas différents scénarios dans une même catégorie.
Utilisez UNTextInputAction pour les scénarios où l'utilisateur doit saisir du texte sans ouvrir l'application : réponses de messagerie, commentaires, notes rapides. Les actions textuelles augmentent l'engagement — l'utilisateur effectue une action significative en 2 taps au lieu de 5+ dans l'application.
Pour les actions dangereuses (supprimer, bloquer), utilisez l'option destructive. iOS mettra ces boutons en rouge, avertissant l'utilisateur de l'irréversibilité de l'action. Pour les actions nécessitant le déverrouillage de l'appareil (visualisation de données personnelles), spécifiez authenticationRequired.
Testez les catégories sur différents appareils : sur iPhone avec 3D Touch, sur iPhone sans 3D Touch (appui long), sur iPad et sur Mac. Le comportement des catégories peut légèrement différer selon les plateformes Apple. Une attention particulière pour CarPlay : les boutons de catégorie apparaissent sur l'écran de la voiture et doivent être conçus avec un texte minimal pour la sécurité du conducteur.
Questions fréquentes
Il n'y a aucune limite — iOS n'impose pas de limite sur le nombre de UNNotificationCategory. Cependant, dans la pratique, il est recommandé de ne pas utiliser plus de 10 à 15 catégories pour ne pas compliquer le traitement dans le délégué. Chaque catégorie peut contenir jusqu'à 4 actions (boutons). Plus de 4 actions sont ignorées par le système.
Implémentez le protocole UNUserNotificationCenterDelegate et la méthode didReceive. Vérifiez response.actionIdentifier : UNNotificationDismissActionIdentifier — balayer pour rejeter, UNNotificationDefaultActionIdentifier — tap sur le corps, ou votre identifiant de bouton personnalisé. Pour les boutons de saisie de texte, le texte est disponible via response.userText.
Category — définit les actions interactives (boutons) pour la notification. Thread-id — regroupe les notifications dans le Centre de notifications par sujet. Les deux clés sont spécifiées dans le payload APNS. Category et thread-id ne sont pas liés : une notification peut avoir une catégorie mais pas de thread-id, et vice versa.
Oui, UNNotificationCategory est pris en charge sur macOS 10.14+ (Mojave) dans les applications utilisant le framework UserNotifications. Le comportement des catégories sur macOS est similaire à iOS : en cliquant sur une notification, les boutons s'affichent et le traitement se fait via UNUserNotificationCenterDelegate.
Il est recommandé d'enregistrer les catégories à chaque lancement de l'application via setNotificationCategories. Le système remplace l'ancien ensemble de catégories par le nouveau à chaque appel. Si vous ne mettez pas à jour, les catégories persistent entre les lancements, mais lorsque le code change, les anciennes catégories peuvent provoquer un comportement inattendu.
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