Notification Content Extension — essens, anpassat UI och konfiguration i iOS

Författare: IT Sectr Publicerad: 2026-06-15 Lästid: 9 min

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 skapar ett anpassat gränssnitt för push-notifieringar istället för standardmallen
  • Arkitekturen baseras på protokollet UNNotificationContentExtension med metoderna didReceive(_:with:) och didReceive(_:withCompletionHandler:)
  • Tillägget kan visa media-bilagor — bilder, ljud och video — direkt i notifieringen utan att öppna appen
  • Interaktiva notifieringar stöder anpassade åtgärder med feedback och textinmatning
  • Gränssnittets storlek är begränsad — maxhöjd för anpassad notifiering 320 punkter på iPhone och 352 på iPad

Vad är Notification Content Extension

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.

Skapa ett anpassat notifieringsgränssnitt

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.

Storlek och begränsningar för gränssnittet

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.

Kommunikation med huvudappen

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.

swift
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()
        }
    }
}

Protokollet UNNotificationContentExtension

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.

Metoden didReceive:with:

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.

Hantering av mediaspelare

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.

Media-bilagor och deras hantering

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.

Format som stöds

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.

Arbete med security-scoped-resurser

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.

swift
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)

Interaktiva notifieringar och åtgärder

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.

Typer av åtgärder

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.

swift
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

Vad är skillnaden mellan Notification Content Extension och Service Extension?

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.

Vilka programmeringsspråk stöds?

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.

Kan SwiftUI användas i Notification Content Extension?

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.

Hur många media-bilagor kan bifogas till en notifiering?

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.

Hur överför man data från tillägget till huvudappen?

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

  • Notification Content Extension ersätter standardgränssnittet för notifieringar med ett anpassat med valfria visuella element
  • Arkitekturen använder protokollet UNNotificationContentExtension med didReceive-metoder för att uppdatera gränssnittet
  • UNNotificationAttachment tillhandahåller media-bilagor med automatisk nedladdning i bakgrunden och security-scoped-åtkomst
  • Interaktiva åtgärder stöder textinmatning och destruktiva operationer via UNNotificationAction
  • Maximal gränssnittshöjd — 320 punkter på iPhone, för anpassning av innehåll rekommenderas UIScrollView
  • Datautbyte med huvudappen — endast via App Group och delad katalog på disken

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.

Diskutera projektet

Läs också