Notification Category (notiseringskategori) är en iOS-mekanism för att gruppera push-notiser efter typ och koppla anpassningsbara åtgärder till dem. Kategorin bestämmer vilka knappar som visas vid 3D Touch eller lång tryckning på notisen, samt hur systemet bearbetar inkommande notiser av denna typ. Enligt Apple Developer Documentation registreras UNNotificationCategory i UNUserNotificationCenter och kopplas till notisen via fältet category i APNS-nyttolasten.
Huvudpunkter
Notification Category är en iOS-funktion (sedan version 8.0) som gör det möjligt för utvecklaren att klassificera push-notiser och lägga till interaktiva åtgärder. När en användare får en notis och trycker hårt (3D Touch) eller länge på den, visas knapparna som definieras av kategorin.
Kategorin registreras via objektet UNNotificationCategory, som innehåller en identifierare, en array av åtgärder och valfria visningsparametrar. Systemet använder kategoriidentifieraren från APNS-nyttolasten för att hitta den registrerade kategorin och visa motsvarande åtgärder.
Till skillnad från Android Notification Channel hanterar iOS Category inte betydelse, ljud eller vibration. Dess enda uppgift är att tillhandahålla interaktiva möjligheter för notisen: knappar för svar, bekräftelse, avbrytande eller textinmatning.
Kategorier är inte obligatoriska för visning av push-notiser på iOS. Notisen visas i vilket fall som helst — med knappar om kategorin är registrerad, eller utan dem. Kategorier behövs bara för att lägga till interaktivitet till notiser.
Mekanismen för kategorier består av fyra steg: registrering av kategorin på klienten, sändning av APNS-nyttolasten med kategorin, igenkänning av kategorin av systemet och bearbetning av användarens åtgärd.
Åtgärder i en kategori kan vara av två typer: foreground (öppnar appen) och background (körs i bakgrunden). För bakgrundsåtgärder får appen begränsad tid (cirka 30 sekunder) för bearbetning i UNNotificationActionHandler.
UNNotificationCategory stöder flera alternativ via parametern options: customDismissAction — ta emot händelse vid svepning av notisen, allowInCarPlay — visa åtgärder i CarPlay, hiddenPreviewsBodyPlaceholder — anpassad text för dolda förhandsvisningar. Korrekt konfiguration av alternativ förbättrar användarupplevelsen på olika Apple-enheter.
iOS erbjuder två typer av åtgärder för notiseringskategorier. Varje typ har sitt eget syfte och sätt att interagera med användaren.
| Typ | Klass | Beskrivning | Exempel |
|---|---|---|---|
| Enkel åtgärd | UNNotificationAction | Knapp med titel och alternativ (destructive, foreground, authenticationRequired) | ”Ta bort”, ”Visa” |
| Textinmatning | UNTextInputAction | Knapp som öppnar ett textinmatningsfält med ledtråd | ”Svara”, ”Kommentera” |
UNTextInputAction — en unik iOS-förmåga. När knappen ”Svara” trycks in visar systemet ett textfält där användaren skriver sitt svar. Den inmatade texten skickas till delegaten tillsammans med åtgärdens identifierare. Detta möjliggör snabba svar utan att öppna appen.
Åtgärdsalternativ: options.authenticationRequired — kräver upplåsning av enheten, options.destructive — markerar knappen röd (för farliga åtgärder), options.foreground — öppnar appen efter tryckning.
Kategorier registreras vid appstart, vanligtvis i metoden didFinishLaunchingWithOptions. Registrering sker via UNUserNotificationCenter efter att ha begärt tillstånd för notiser. Kategorier kan uppdateras vid varje start — gamla versioner ersätts med nya.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Svara",
options: [.foreground],
textInputButtonTitle: "Skicka",
textInputPlaceholder: "Skriv meddelande..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Ta bort",
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
}
}
Efter registrering av kategorin kommer varje notis med category = ”message” i APNS-nyttolasten att visa knapparna ”Svara” och ”Ta bort”. Bearbetning av tryckningar sker i userNotificationCenter:didReceive response, där actionIdentifier avgör vilken knapp som trycktes.
När användaren trycker på en kategori-knapp anropar iOS delegaten UNUserNotificationCenterDelegate med ett UNNotificationResponse-objekt. response.actionIdentifier innehåller identifieraren för den tryckta knappen och response.notification.request.content.userInfo innehåller anpassad data från APNS-nyttolasten. För UNTextInputAction är även response.userText tillgänglig med texten som användaren matade in.
Utvecklare som känner till Android Notification Channels blandar ofta ihop dem med iOS Notification Categories. Trots det liknande namnet löser dessa mekanismer olika uppgifter och fungerar på olika sätt.
På båda plattformarna kan båda mekanismerna kombineras: i Android kan en notis tillhöra en kanal med åtgärder från NotificationCompat, och i iOS kompletterar kategorin de kanaler som i iOS kallas thread-id och används för att gruppera notiser i notiscentret.
För att notisen ska visas med kategorins knappar måste servern inkludera nyckeln category i APNS-nyttolasten. Utan denna nyckel vet systemet inte vilken kategori som ska tillämpas på notisen.
{
"aps": {
"alert": {
"title": "Nytt meddelande",
"body": "Anna: Hej! Hur mår du?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
Nyckeln category måste exakt matcha identifieraren som registrerats via setNotificationCategories på klienten. Versaler och gemener har betydelse — ”message” och ”Message” betraktas som olika kategorier. Om kategorin inte hittas visas notisen utan knappar, utan fel i loggarna.
Om servern skickade en notis med en category som inte är registrerad på klienten ignorerar iOS kategorin och visar notisen utan knappar. Felet loggas inte och appen får inte veta om avvikelsen. Det rekommenderas att synkronisera listan över kategorier mellan server och klient via en konfigurationsfil och kontrollera dem vid varje appuppdatering.
Vid utformning av iOS-notiseringskategorier, följ principen en kategori — ett scenario. Varje kategori bör motsvara en specifik interaktionstyp: svar på meddelande, bekräftelse av åtgärd, avvisande av begäran. Blanda inte olika scenarier i en kategori — detta förvirrar användaren och komplicerar bearbetningen i delegaten.
Använd UNTextInputAction för scenarier där användaren måste mata in text utan att öppna appen: svar i meddelandeprogram, kommentarer, snabba anteckningar. Textåtgärder ökar engagemanget — användaren utför en meningsfull åtgärd med 2 tryckningar istället för 5+ i den öppna appen.
För farliga åtgärder (ta bort, blockera) använd alternativet destructive. iOS markerar dessa knappar röda och varnar användaren om åtgärdens oåterkallelighet. För åtgärder som kräver upplåsning av enheten (visning av personuppgifter), ställ in authenticationRequired — systemet begär Face ID eller lösenord före utförande.
Testa kategorier på olika enheter: på iPhone med 3D Touch, på iPhone utan 3D Touch (lång tryckning), på iPad och på Mac. Beteendet hos kategorier kan variera något på olika Apple-plattformar. Särskild uppmärksamhet — CarPlay: kategoriknappar visas på bilens skärm, men textinmatning är inte tillgänglig, så UNTextInputAction döljs automatiskt i CarPlay. På watchOS stöds inte kategorier — alla notiser visas utan åtgärdsknappar.
Vanliga frågor
Det finns inga begränsningar — iOS sätter ingen gräns för antalet UNNotificationCategory. I praktiken rekommenderas dock inte mer än 10–15 kategorier för att inte komplicera bearbetningen i delegaten. Varje kategori kan innehålla upp till 4 åtgärder (knappar). Fler än 4 åtgärder ignoreras av systemet.
Implementera delegaten UNUserNotificationCenterDelegate och metoden didReceive response. Kontrollera response.actionIdentifier: UNNotificationDismissActionIdentifier — svep för att ta bort, UNNotificationDefaultActionIdentifier — tryck på kroppen, eller din egen anpassade knappidentifierare. För textknappar är texten tillgänglig via response.userText.
Category — bestämmer de interaktiva åtgärderna (knapparna) för notisen. Thread-id — grupperar notiser i Notiscentret efter ämne. Båda nycklarna anges i APNS-nyttolasten. Category och thread-id är inte relaterade: en notis kan ha en kategori utan thread-id och vice versa.
Ja, UNNotificationCategory stöds på macOS 10.14+ (Mojave) i appar som använder UserNotifications-ramverket. Beteendet hos kategorier på macOS är liknande iOS: vid tryckning på notisen visas knappar, bearbetning sker via UNUserNotificationCenterDelegate.
Det rekommenderas att registrera kategorier vid varje appstart via setNotificationCategories. Systemet ersätter den gamla uppsättningen kategorier med en ny vid varje anrop. Om du inte uppdaterar bevaras kategorierna mellan starterna, men vid kodändringar kan gamla kategorier inte matcha nya.
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å