Notification Content Extension — är en typ av iOS-tillägg som ersätter standardmallen för push-notifieringar med ett helt anpassat användargränssnitt. Utvecklaren får möjlighet att visa bilder, en ljudspelare, åtgärdsknappar, förloppsindikatorer och anpassad animation i notifieringen, vilket utökar den vanliga bannern till en fullfjädrad mini-applikation. Enligt data från WWDC 2025 använder tillägget UNNotificationContentExtension och stöder upp till 4 media-bilagor i en notifiering, samt hantering av interaktiva åtgärder via UNNotificationAction.
Huvudpunkter
Notification Content Extension — är ett apptillägg som åsidosätter visningen av push-notifieringar på iOS. Istället för en standardbanner med titel, meddelandetext och knappar kan ett gränssnitt visas som är helt utformat i Interface Builder eller programmatiskt via UIKit eller SwiftUI.
Till skillnad från Notification Service Extension, som ändrar innehållet före visning, ansvarar Content Extension endast för visuell presentation. Tillägget får den färdiga notifieringen efter alla ändringar och bestämmer hur den ska visas. Detta är den viktigaste skillnaden mellan de två typerna av notifieringstillägg.
Tillägget aktiveras när användaren utför en utvidgningsgest — rullar notifieringen nedåt eller klickar på den (beroende på enhetsmodell). iOS startar tilläggsprocessen, skapar kontrollern från angiven nib eller storyboard och skickar notifieringen via UNNotificationContentExtension.
Utvecklingen börjar med att lägga till ett nytt target i Xcode med mallen Notification Content Extension. Xcode skapar filen MainInterface.storyboard och en klass som ärver från UIViewController och implementerar protokollet UNNotificationContentExtension.
Maxhöjd för det anpassade området — 320 punkter på iPhone (för modeller med stor skärm) och 352 punkter på iPad. Innehåll som går utanför dessa gränser beskärs. För anpassning till olika storlekar rekommenderas Auto Layout och UIScrollView för rullningsbart innehåll. Bredden är alltid lika med notifieringens bredd och ändras automatiskt vid rotation av enheten.
Apple Human Interface Guidelines varnar: notifieringsgränssnittet bör vara koncist och endast innehålla ett huvudelement — bild, spelare, karta eller snabbregistreringsformulär. Flera interaktiva element överbelastar användaren och försvårar interaktionen.
App Group — den enda mekanismen för datautbyte mellan tillägget och huvudappen. Via den delade App Group-katalogen kan cachade bilder, token och inställningar överföras. Direkta API-anrop till huvudappen eller åtkomst till dess UserDefaults är inte tillgängliga på grund av processisolering.
class NotificationViewController: UIViewController {
func didReceive(
_ notification: UNNotification
) {
guard let attachment = notification
.request.content.attachments.first()
else { return }
if attachment.url.startAccessingSecurityScopedResource() {
imageView.image = UIImage(contentsOfFile:
attachment.url.path)
attachment.url.stopAccessingSecurityScopedResource()
}
}
}
UNNotificationContentExtension — huvudprotokollet som definierar livscykeln för en anpassad notifiering. Protokollet tillhandahåller metoder för att ta emot innehåll, hantera åtgärder och styra gränssnittet.
didReceive(_:with:) anropas när en notifiering tas emot. Tillägget får ett UNNotification-objekt och UNNotificationContentExtensionMediaPlayPauseButtonType för att hantera mediaspelaren. I denna metod måste gränssnittet konfigureras — ladda bild, initiera spelare eller visa data. Systemet anropar denna metod varje gång notifieringen uppdateras i realtid.
Det är viktigt att ta hänsyn till att tillägget har begränsad tid för körning — cirka 30 sekunder för en full visningscykel. Om gränssnittet inte är klart inom denna tid kommer iOS att visa en systemnotifiering. För tunga resurser — laddning av bilder från nätverket, avkodning av video — rekommenderas asynkrona operationer med förhands-cachning via App Group.
Protokollet innehåller valfria metoder för play/pause-knappar: mediaPlay, mediaPause och mediaPlayPauseButtonType. Om notifieringen innehåller ljud- eller videoinnehåll kan tillägget visa en inbyggd spelare med ett systemkontroll-element. iOS lägger automatiskt till en spelknapp i det övre högra hörnet av tillägget när motsvarande knapptyp returneras.
UNNotificationAttachment — objektet som innehåller mediadata som bifogats till notifieringen. Bilder, ljudfiler och video läggs till i fasen för att skapa notifieringen på servern eller i Notification Service Extension via UNNotificationAttachment.
För bilder: JPEG, PNG, GIF, HEIF. För ljud: MP3, AAC, ALAC, WAV. För video: MPEG-4, H.264, HEVC. Maximal storlek för varje bilaga — 50 MB, upp till 4 bilagor per notifiering. Systemet laddar automatiskt ner bilagor i bakgrunden före visning av notifieringen och ger tillägget åtkomst till lokala URL:er via security-scoped-resurser.
Enligt Apple bör tillägget inte ladda media självständigt — UNNotificationAttachment innehåller redan en lokal URL efter att systemet slutfört nedladdningen. Om bilagan inte har laddats ner i tid (till exempel vid dålig anslutning), kan tillägget visa en platshållare eller alternativ text.
Varje UNNotificationAttachment tillhandahåller en security-scoped URL, som tillägget måste få åtkomst till via startAccessingSecurityScopedResource() och frigöra via stopAccessingSecurityScopedResource(). Dessa metoder måste anropas i par — annars frigörs inte resursen och orsakar läckage av åtkomsträttigheter.
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)
Notification Content Extension stöder anpassade interaktiva åtgärder — knappar som visas under notifieringens innehåll. Åtgärder registreras när notifieringskategorin skapas via UNNotificationCategory och kan vara destruktiva, textbaserade eller bakgrundsbaserade.
UNNotificationAction — en enkel åtgärd med en titel och en valfri flagga för destruktivitet. UNTextInputNotificationAction — en åtgärd med ett textinmatningsfält, till exempel för snabbt svar på ett meddelande. Båda typerna stöder alternativet UNNotificationActionOptions.authenticationRequired — krav på att låsa upp enheten före utförande.
Tillägget tar emot den valda åtgärden via metoden didReceive(_:withCompletionHandler:), där ett UNNotificationResponse-objekt med åtgärdens identifierare och valfri text skickas. Tillägget kan behandla svaret självständigt eller skicka det till huvudappen via den delade App Group-containern.
let category = UNNotificationCategory(
identifier: "message",
actions: [
UNTextInputNotificationAction(
identifier: "reply",
title: "Reply",
options: .authenticationRequired
),
UNNotificationAction(
identifier: "mark_read",
title: "Mark Read",
options: .foreground
)
],
intentIdentifiers: []
)
Vanliga frågor
Content Extension ansvarar för visuell visning av notifieringen, medan Service Extension ansvarar för att ändra innehållet före visning. Content Extension fungerar efter Service Extension och kan inte ändra notifieringens payload.
Swift och Objective-C för UIKit. Från och med iOS 16 stöds även SwiftUI för att skapa notifieringsgränssnitt via NotificationContentView med storleks- och konfigurationsmodifierare.
Ja, från och med iOS 16 kan tillägget använda SwiftUI via UIHostingController. Alla UIKit-kompetenser — storlek, begränsningar, security-scoped-resurser — bevaras dock och tillämpas på SwiftUI-innehållet.
Upp till 4 bilagor per notifiering. Varje bilaga upp till 50 MB. Bilder (JPEG, PNG, HEIF), ljud (MP3, AAC) och video (MPEG-4, H.264) stöds.
Via App Group — en delad katalog på disken. UserDefaults med app group-suffix fungerar också. Direkta API-anrop till huvudappen är inte tillgängliga på grund av processisolering av tillägget.
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å