Notification Category (Benachrichtigungskategorie) ist ein iOS-Mechanismus zum Gruppieren von Push-Benachrichtigungen nach Typ und zum Hinzufügen von benutzerdefinierten Aktionen. Die Kategorie bestimmt, welche Schaltflächen bei 3D Touch oder langem Druck auf eine Benachrichtigung angezeigt werden, sowie wie das System eingehende Benachrichtigungen dieses Typs verarbeitet. Laut Apple Developer Documentation wird UNNotificationCategory im UNUserNotificationCenter registriert und über das Feld category in der APNS-Nutzlast mit einer Benachrichtigung verknüpft.
Wichtige Punkte
Notification Category ist eine iOS-Funktion (seit Version 8.0), die es Entwicklern ermöglicht, Push-Benachrichtigungen zu klassifizieren und interaktive Aktionen hinzuzufügen. Wenn ein Benutzer eine Benachrichtigung erhält und fest drückt (3D Touch) oder lange drückt, erscheinen Schaltflächen, die durch die Kategorie definiert werden. Dies macht Benachrichtigungen interaktiv und ermöglicht Benutzern, ohne Öffnen der App zu handeln.
Eine Kategorie wird mit einem UNNotificationCategory-Objekt registriert, das eine Kennung, ein Array von Aktionen und optionale Anzeigeparameter enthält. Das System verwendet die Kategoriekennung aus der APNS-Nutzlast, um die registrierte Kategorie zu finden und die entsprechenden Schaltflächen anzuzeigen.
Im Gegensatz zu Android Notification Channel verwaltet iOS Category nicht die Wichtigkeit, den Ton oder die Vibration. Ihr einziger Zweck ist es, interaktive Möglichkeiten für Benachrichtigungen bereitzustellen: Antwort-, Bestätigungs-, Abbruch- oder Texteingabeschaltflächen.
Kategorien sind nicht obligatorisch für die Anzeige von Push-Benachrichtigungen auf iOS. Die Benachrichtigung wird trotzdem angezeigt — mit Schaltflächen, wenn eine Kategorie registriert ist, oder ohne. Kategorien werden nur benötigt, um Benachrichtigungen Interaktivität hinzuzufügen.
Der Kategoriemechanismus besteht aus vier Phasen: Registrieren der Kategorie auf dem Client, Senden einer APNS-Nutzlast mit der Kategorie, Erkennen der Kategorie durch das System und Verarbeiten der Benutzeraktion.
Aktionen in einer Kategorie können zwei Arten sein: foreground (öffnen die App) und background (werden im Hintergrund ausgeführt). Für Hintergrundaktionen hat die App begrenzte Zeit (ca. 30 Sekunden) für die Verarbeitung im UNNotificationActionHandler.
UNNotificationCategory unterstützt mehrere Optionen über den Parameter options: customDismissAction — Ereignis beim Wegwischen der Benachrichtigung erhalten, allowInCarPlay — Aktionen in CarPlay anzeigen, hiddenPreviewsBodyPlaceholder — benutzerdefinierter Platzhaltertext für ausgeblendete Vorschauen.
iOS bietet zwei Arten von Aktionen für Benachrichtigungskategorien. Jede Art hat ihren eigenen Zweck und ihre eigene Art der Interaktion mit dem Benutzer.
| Art | Klasse | Beschreibung | Beispiel |
|---|---|---|---|
| Einfache Aktion | UNNotificationAction | Eine Schaltfläche mit Titel und Optionen (destructive, foreground, authenticationRequired) | „Löschen“, „Anzeigen“ |
| Texteingabe | UNTextInputAction | Eine Schaltfläche, die ein Texteingabefeld mit Platzhalter öffnet | „Antworten“, „Kommentieren“ |
UNTextInputAction ist eine einzigartige iOS-Funktion. Wenn der Benutzer auf die Schaltfläche „Antworten“ tippt, zeigt das System ein Textfeld an, in das der Benutzer seine Antwort eingibt. Der eingegebene Text wird zusammen mit der Aktionskennung an den Delegaten übergeben. Dies ermöglicht schnelle Antworten ohne Öffnen der App.
Aktionsoptionen: options.authenticationRequired — erfordert Geräteentsperrung, options.destructive — hebt die Schaltfläche rot hervor (für gefährliche Aktionen), options.foreground — öffnet die App nach dem Tippen.
Kategorien werden beim App-Start registriert, normalerweise in der Methode didFinishLaunchingWithOptions. Die Registrierung erfolgt über UNUserNotificationCenter nach der Anfrage der Benachrichtigungsberechtigung. Kategorien können bei jedem Start aktualisiert werden — alte Versionen werden durch neue ersetzt.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Antworten",
options: [.foreground],
textInputButtonTitle: "Senden",
textInputPlaceholder: "Nachricht eingeben..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Löschen",
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
}
}
Nach dem Registrieren der Kategorie zeigt jede Benachrichtigung mit category = „message“ in der APNS-Nutzlast die Schaltflächen „Antworten“ und „Löschen“ an. Die Tippverarbeitung erfolgt in userNotificationCenter:didReceive response, wobei actionIdentifier bestimmt, welche Schaltfläche gedrückt wurde.
Wenn der Benutzer auf eine Kategorieschaltfläche tippt, ruft iOS den UNUserNotificationCenterDelegate mit einem UNNotificationResponse-Objekt auf. response.actionIdentifier enthält die Kennung der gedrückten Schaltfläche, und response.notification.request.content.userInfo enthält benutzerdefinierte Daten aus der Nutzlast.
Entwickler, die mit Android Notification Channels vertraut sind, verwechseln diese oft mit iOS Notification Categories. Trotz des ähnlichen Namens lösen diese Mechanismen unterschiedliche Aufgaben und funktionieren anders.
Beide Plattformen können beide Mechanismen kombinieren: Auf Android kann eine Benachrichtigung zu einem Kanal mit Aktionen von NotificationCompat gehören, während auf iOS eine Kategorie die Kanäle ergänzt, die in iOS als thread-id bezeichnet werden und zum Gruppieren von Benachrichtigungen im Benachrichtigungscenter dienen.
Damit eine Benachrichtigung mit Kategorieschaltflächen angezeigt wird, muss der Server den Schlüssel category in die APNS-Nutzlast aufnehmen. Ohne diesen Schlüssel weiß das System nicht, welche Kategorie auf die Benachrichtigung angewendet werden soll.
{
"aps": {
"alert": {
"title": "Neue Nachricht",
"body": "Anna: Hallo! Wie geht es dir?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
Der Schlüssel category muss exakt mit der Kennung übereinstimmen, die über setNotificationCategories auf dem Client registriert wurde. Groß-/Kleinschreibung ist wichtig — „message“ und „Message“ gelten als unterschiedliche Kategorien. Wenn die Kategorie nicht gefunden wird, erscheint die Benachrichtigung ohne Schaltflächen, ohne Fehler in den Protokollen.
Wenn der Server eine Benachrichtigung mit einer auf dem Client nicht registrierten Kategorie sendet, ignoriert iOS die Kategorie und zeigt die Benachrichtigung ohne Schaltflächen an. Der Fehler wird nicht protokolliert, und die App erfährt nichts von der Nichtübereinstimmung. Es wird empfohlen, die Kategorieliste zwischen Server und Client zu synchronisieren.
Beim Entwerfen von Benachrichtigungskategorien in iOS folgen Sie dem Prinzip eine Kategorie — ein Szenario. Jede Kategorie sollte einer bestimmten Art der Interaktion entsprechen: Antworten auf eine Nachricht, Bestätigen einer Aktion, Ablehnen einer Anfrage. Mischen Sie nicht verschiedene Szenarien in einer Kategorie.
Verwenden Sie UNTextInputAction für Szenarien, in denen der Benutzer Text eingeben muss, ohne die App zu öffnen: Nachrichtenantworten, Kommentare, Kurznotizen. Textaktionen erhöhen das Engagement — der Benutzer führt eine sinnvolle Aktion in 2 Tipps statt 5+ in der App aus.
Verwenden Sie für gefährliche Aktionen (Löschen, Blockieren) die Option destructive. iOS hebt diese Schaltflächen rot hervor und warnt den Benutzer vor der Unumkehrbarkeit der Aktion. Für Aktionen, die eine Geräteentsperrung erfordern (Anzeigen persönlicher Daten), geben Sie authenticationRequired an.
Testen Sie Kategorien auf verschiedenen Geräten: auf iPhone mit 3D Touch, auf iPhone ohne 3D Touch (langer Druck), auf iPad und auf Mac. Das Verhalten von Kategorien kann auf den verschiedenen Apple-Plattformen leicht abweichen. Besondere Aufmerksamkeit für CarPlay: Kategorieschaltflächen erscheinen auf dem Autobildschirm und sollten aus Sicherheitsgründen für den Fahrer mit minimalem Text gestaltet werden.
Häufig gestellte Fragen
Es gibt keine Grenzen — iOS legt keine Beschränkung für die Anzahl der UNNotificationCategory fest. In der Praxis wird jedoch empfohlen, nicht mehr als 10–15 Kategorien zu verwenden, um die Delegatenverarbeitung nicht zu verkomplizieren. Jede Kategorie kann bis zu 4 Aktionen (Schaltflächen) enthalten. Mehr als 4 Aktionen werden vom System ignoriert.
Implementieren Sie das Protokoll UNUserNotificationCenterDelegate und die Methode didReceive. Überprüfen Sie response.actionIdentifier: UNNotificationDismissActionIdentifier — Wischen zum Verwerfen, UNNotificationDefaultActionIdentifier — Tippen auf den Körper, oder Ihre benutzerdefinierte Schaltflächenkennung. Für Texteingabeschaltflächen ist der Text über response.userText verfügbar.
Category — definiert die interaktiven Aktionen (Schaltflächen) für die Benachrichtigung. Thread-id — gruppiert Benachrichtigungen im Benachrichtigungscenter nach Thema. Beide Schlüssel werden in der APNS-Nutzlast angegeben. Category und thread-id sind nicht verwandt: eine Benachrichtigung kann eine Kategorie haben, aber keine thread-id, und umgekehrt.
Ja, UNNotificationCategory wird auf macOS 10.14+ (Mojave) in Apps unterstützt, die das UserNotifications-Framework verwenden. Das Verhalten von Kategorien auf macOS ähnelt iOS: Beim Klicken auf eine Benachrichtigung werden Schaltflächen angezeigt, und die Verarbeitung erfolgt über UNUserNotificationCenterDelegate.
Es wird empfohlen, Kategorien bei jedem App-Start über setNotificationCategories zu registrieren. Das System ersetzt bei jedem Aufruf den alten Kategoriesatz durch den neuen. Wenn Sie nicht aktualisieren, bleiben Kategorien zwischen Starts erhalten, aber bei Codeänderungen können alte Kategorien unerwartetes Verhalten verursachen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch