Notification Category (meldingscategorie) is een iOS-mechanisme voor het groeperen van pushmeldingen per type en het koppelen van aanpasbare acties. De categorie bepaalt welke knoppen worden weergegeven bij 3D Touch of lang indrukken van een melding, en hoe het systeem inkomende meldingen van dit type verwerkt. Volgens Apple Developer Documentation wordt UNNotificationCategory geregistreerd in UNUserNotificationCenter en gekoppeld aan de melding via het veld category in de APNS-payload.
Belangrijkste punten
Notification Category is een iOS-functie (sinds versie 8.0) waarmee de ontwikkelaar pushmeldingen kan classificeren en interactieve acties kan toevoegen. Wanneer een gebruiker een melding ontvangt en er krachtig op drukt (3D Touch) of lang indrukt, verschijnen de knoppen die door de categorie zijn gedefinieerd.
De categorie wordt geregistreerd via het object UNNotificationCategory, dat een identificatie, een reeks acties en optionele weergaveparameters bevat. Het systeem gebruikt de categorie-id uit de APNS-payload om de geregistreerde categorie te vinden en de bijbehorende acties weer te geven.
In tegenstelling tot Android Notification Channel beheert iOS Category geen belang, geluid of trilling. De enige taak is het bieden van interactieve mogelijkheden voor de melding: knoppen voor antwoord, bevestiging, annulering of tekstinvoer.
Categorieën zijn niet verplicht voor het weergeven van pushmeldingen op iOS. De melding wordt in elk geval weergegeven — met knoppen als de categorie is geregistreerd, of zonder. Categorieën zijn alleen nodig om interactiviteit aan meldingen toe te voegen.
Het mechanisme van categorieën bestaat uit vier fasen: registratie van de categorie op de client, verzending van de APNS-payload met de categorie, herkenning van de categorie door het systeem en verwerking van de gebruikersactie.
Acties in een categorie kunnen twee typen zijn: foreground (openen de app) en background (worden op de achtergrond uitgevoerd). Voor achtergrondacties krijgt de app beperkte tijd (ongeveer 30 seconden) voor verwerking in UNNotificationActionHandler.
UNNotificationCategory ondersteunt verschillende opties via de parameter options: customDismissAction — een gebeurtenis ontvangen bij het wegvegen van de melding, allowInCarPlay — acties weergeven in CarPlay, hiddenPreviewsBodyPlaceholder — aangepaste tekst voor verborgen voorbeelden. Correcte configuratie van opties verbetert de gebruikerservaring op verschillende Apple-apparaten.
iOS biedt twee soorten acties voor meldingscategorieën. Elk type heeft zijn eigen doel en manier van interactie met de gebruiker.
| Type | Klasse | Beschrijving | Voorbeeld |
|---|---|---|---|
| Eenvoudige actie | UNNotificationAction | Knop met titel en opties (destructive, foreground, authenticationRequired) | „Verwijder”, „Bekijk” |
| Tekstinvoer | UNTextInputAction | Knop die een tekstinvoerveld met hint opent | „Antwoord”, „Reageer” |
UNTextInputAction — een unieke iOS-mogelijkheid. Bij het indrukken van de knop „Antwoord” toont het systeem een tekstveld waarin de gebruiker zijn antwoord typt. De ingevoerde tekst wordt samen met de actie-id aan de delegate doorgegeven. Dit maakt snelle antwoorden mogelijk zonder de app te openen.
Actie-opties: options.authenticationRequired — vereist ontgrendeling van het apparaat, options.destructive — markeert de knop rood (voor gevaarlijke acties), options.foreground — opent de app na indrukken.
Categorieën worden geregistreerd bij het opstarten van de app, meestal in de methode didFinishLaunchingWithOptions. Registratie gebeurt via UNUserNotificationCenter, na het vragen van toestemming voor meldingen. Categorieën kunnen bij elke start worden bijgewerkt — oude versies worden vervangen door nieuwe.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Antwoord",
options: [.foreground],
textInputButtonTitle: "Verzenden",
textInputPlaceholder: "Typ uw bericht..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Verwijder",
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
}
}
Na registratie van de categorie zal elke melding met category = „message” in de APNS-payload de knoppen „Antwoord” en „Verwijder” tonen. Verwerking van tikken gebeurt in userNotificationCenter:didReceive response, waar actionIdentifier bepaalt welke knop is ingedrukt.
Wanneer de gebruiker op een categorieknop drukt, roept iOS de delegate UNUserNotificationCenterDelegate aan met het UNNotificationResponse-object. response.actionIdentifier bevat de id van de ingedrukte knop, en response.notification.request.content.userInfo bevat aangepaste gegevens uit de APNS-payload. Voor UNTextInputAction is daarnaast response.userText beschikbaar met de door de gebruiker ingevoerde tekst.
Ontwikkelaars die bekend zijn met Android Notification Channels verwarren ze vaak met iOS Notification Categories. Ondanks de vergelijkbare naam lossen deze mechanismen verschillende taken op en werken ze op verschillende manieren.
Op beide platforms kunnen beide mechanismen worden gecombineerd: in Android kan een melding tot een kanaal behoren met acties van NotificationCompat, en in iOS vult de categorie de kanalen aan die in iOS thread-id worden genoemd en dienen voor het groeperen van meldingen in het meldingencentrum.
Om de melding met categorieknoppen weer te geven, moet de server de sleutel category in de APNS-payload opnemen. Zonder deze sleutel weet het systeem niet welke categorie op de melding moet worden toegepast.
{
"aps": {
"alert": {
"title": "Nieuw bericht",
"body": "Anna: Hallo! Hoe gaat het?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
De sleutel category moet exact overeenkomen met de id die via setNotificationCategories op de client is geregistreerd. Hoofdlettergevoeligheid is belangrijk — „message” en „Message” worden als verschillende categorieën beschouwd. Als de categorie niet wordt gevonden, wordt de melding zonder knoppen weergegeven, zonder fouten in de logboeken.
Als de server een melding heeft verzonden met een category die niet op de client is geregistreerd, negeert iOS de categorie en toont de melding zonder knoppen. De fout wordt niet gelogd en de app krijgt geen kennis van de mismatch. Het wordt aanbevolen om de lijst met categorieën tussen server en client te synchroniseren via een configuratiebestand en deze bij elke app-update te controleren.
Hanteer bij het ontwerpen van iOS-meldingscategorieën het principe één categorie — één scenario. Elke categorie moet overeenkomen met een specifiek type interactie: antwoord op bericht, bevestiging van actie, afwijzing van verzoek. Meng geen verschillende scenario's in één categorie — dit verwart de gebruiker en bemoeilijkt de verwerking in de delegate.
Gebruik UNTextInputAction voor scenario's waarin de gebruiker tekst moet invoeren zonder de app te openen: antwoorden in messengers, reacties, snelle notities. Tekstacties verhogen de betrokkenheid — de gebruiker voert een betekenisvolle actie uit in 2 tikken in plaats van 5+ in de geopende app.
Gebruik voor gevaarlijke acties (verwijderen, blokkeren) de optie destructive. iOS markeert deze knoppen rood, waarmee de gebruiker wordt gewaarschuwd voor de onomkeerbaarheid van de actie. Voor acties die ontgrendeling van het apparaat vereisen (bekijken van persoonlijke gegevens), stelt u authenticationRequired in — het systeem vraagt om Face ID of wachtwoord voordat de actie wordt uitgevoerd.
Test categorieën op verschillende apparaten: op iPhone met 3D Touch, op iPhone zonder 3D Touch (lang indrukken), op iPad en op Mac. Het gedrag van categorieën kan enigszins verschillen op verschillende Apple-platforms. Speciale aandacht — CarPlay: categorieknoppen worden op het autoscherm getoond, maar tekstinvoer is niet beschikbaar, dus UNTextInputAction wordt automatisch verborgen in CarPlay. Op watchOS worden categorieën niet ondersteund — alle meldingen worden zonder actieknoppen weergegeven.
Veelgestelde vragen
Er zijn geen beperkingen — iOS stelt geen limiet aan het aantal UNNotificationCategory. In de praktijk wordt echter aanbevolen om niet meer dan 10–15 categorieën te gebruiken om de verwerking in de delegate niet te compliceren. Elke categorie kan maximaal 4 acties (knoppen) bevatten. Meer dan 4 acties worden door het systeem genegeerd.
Implementeer de delegate UNUserNotificationCenterDelegate en de methode didReceive response. Controleer response.actionIdentifier: UNNotificationDismissActionIdentifier — veeg om te verwijderen, UNNotificationDefaultActionIdentifier — tik op de body, of uw eigen aangepaste knop-id. Voor tekstknoppen is de tekst beschikbaar via response.userText.
Category — bepaalt de interactieve acties (knoppen) voor de melding. Thread-id — groepeert meldingen in het Meldingencentrum op onderwerp. Beide sleutels worden in de APNS-payload opgegeven. Category en thread-id zijn niet gerelateerd: een melding kan een categorie hebben zonder thread-id en vice versa.
Ja, UNNotificationCategory wordt ondersteund op macOS 10.14+ (Mojave) in apps die het UserNotifications-framework gebruiken. Het gedrag van categorieën op macOS is vergelijkbaar met iOS: bij het indrukken van de melding worden knoppen getoond, verwerking vindt plaats via UNUserNotificationCenterDelegate.
Het wordt aanbevolen om categorieën bij elke start van de app te registreren via setNotificationCategories. Het systeem vervangt de oude set categorieën bij elke aanroep door een nieuwe. Als u niet bijwerkt, blijven categorieën tussen starts behouden, maar bij codewijzigingen kunnen oude categorieën niet overeenkomen met nieuwe.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook