Notification Content Extension — is een type iOS-extensie dat de standaard pushmelding-sjabloon vervangt door een volledig aangepaste gebruikersinterface. De ontwikkelaar krijgt de mogelijkheid om afbeeldingen, een audioplayer, actieknoppen, voortgangsbalken en aangepaste animatie in de melding weer te geven, waardoor de standaard banner wordt uitgebreid tot een volwaardige mini-applicatie. Volgens WWDC 2025 gebruikt de extensie UNNotificationContentExtension en ondersteunt het tot 4 media-bijlagen in één melding, evenals de verwerking van interactieve acties via UNNotificationAction.
Belangrijkste punten
Notification Content Extension — is een app-extensie die de weergave van pushmeldingen op iOS overschrijft. In plaats van een standaard banner met titel, berichttekst en knoppen kan een interface worden getoond die volledig is ontworpen in Interface Builder of programmatisch via UIKit of SwiftUI.
In tegenstelling tot Notification Service Extension, die de inhoud wijzigt vóór weergave, is Content Extension alleen verantwoordelijk voor de visuele presentatie. De extensie ontvangt de kant-en-klare melding na alle wijzigingen en beslist hoe deze weer te geven. Dit is het belangrijkste verschil tussen de twee typen meldingsextensies.
De extensie wordt geactiveerd wanneer de gebruiker een uitbreidingsgebaar uitvoert — de melding naar beneden scrollt of erop klikt (afhankelijk van het apparaatmodel). iOS start het extensieproces, maakt de controller van de opgegeven nib of storyboard en geeft de melding door via UNNotificationContentExtension.
De ontwikkeling begint met het toevoegen van een nieuw target in Xcode met de sjabloon Notification Content Extension. Xcode maakt het bestand MainInterface.storyboard en een klasse die overerft van UIViewController, die het protocol UNNotificationContentExtension implementeert.
Maximale hoogte van het aangepaste gebied — 320 punten op iPhone (voor modellen met groot scherm) en 352 punten op iPad. Inhoud die buiten deze grenzen valt, wordt afgesneden. Voor aanpassing aan verschillende formaten wordt aanbevolen Auto Layout en UIScrollView te gebruiken voor scrollbare inhoud. De breedte is altijd gelijk aan de breedte van de melding en verandert automatisch bij rotatie van het apparaat.
Apple Human Interface Guidelines waarschuwen: de meldingsinterface moet beknopt zijn en slechts één hoofdelement bevatten — een afbeelding, speler, kaart of snel invoerformulier. Meerdere interactieve elementen overbelasten de gebruiker en bemoeilijken de interactie.
App Group — het enige mechanisme voor gegevensuitwisseling tussen de extensie en de hoofdapp. Via de gedeelde App Group-directory kunnen gecachte afbeeldingen, tokens en instellingen worden doorgegeven. Directe API-aanroepen van de hoofdapp of toegang tot de UserDefaults zijn niet beschikbaar vanwege processisolatie.
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 — het hoofdprotocol dat de levenscyclus van een aangepaste melding definieert. Het protocol biedt methoden voor het ontvangen van inhoud, verwerken van acties en beheren van de interface.
didReceive(_:with:) wordt aangeroepen bij ontvangst van een melding. De extensie ontvangt een UNNotification-object en UNNotificationContentExtensionMediaPlayPauseButtonType voor het beheren van de mediaspeler. In deze methode moet de interface worden geconfigureerd — afbeelding laden, speler initialiseren of gegevens weergeven. Het systeem roept deze methode elke keer aan wanneer de melding in realtime wordt bijgewerkt.
Het is belangrijk om in gedachten te houden dat de extensie beperkte tijd heeft voor uitvoering — ongeveer 30 seconden voor een volledige weergavecyclus. Als de interface niet binnen deze tijd gereed is, toont iOS een systeemmelding. Voor zware bronnen — laden van afbeeldingen via het netwerk, decoderen van video — wordt aanbevolen asynchrone bewerkingen te gebruiken met vooraf cachen via App Group.
Het protocol bevat optionele methoden voor play/pause-knoppen: mediaPlay, mediaPause en mediaPlayPauseButtonType. Als de melding audio- of video-inhoud bevat, kan de extensie een ingebouwde speler met een systeembedieningselement tonen. iOS voegt automatisch een afspeelknop toe in de rechterbovenhoek van de extensie wanneer het juiste knoptype wordt geretourneerd.
UNNotificationAttachment — het object dat de media-gegevens bevat die aan de melding zijn gekoppeld. Afbeeldingen, audiobestanden en video worden toegevoegd in de fase van het aanmaken van de melding op de server of in Notification Service Extension via UNNotificationAttachment.
Voor afbeeldingen: JPEG, PNG, GIF, HEIF. Voor audio: MP3, AAC, ALAC, WAV. Voor video: MPEG-4, H.264, HEVC. Maximale grootte van elke bijlage — 50 MB, tot 4 bijlagen per melding. Het systeem downloadt bijlagen automatisch op de achtergrond vóór weergave van de melding en biedt de extensie toegang tot lokale URL's via security-scoped bronnen.
Volgens Apple mag de extensie media niet zelfstandig laden — UNNotificationAttachment bevat al een lokale URL na voltooiing van de download door het systeem. Als de bijlage echter niet op tijd is gedownload (bijvoorbeeld bij slechte verbinding), kan de extensie een placeholder of alternatieve tekst weergeven.
Elke UNNotificationAttachment biedt een security-scoped URL, waartoe de extensie toegang moet krijgen via startAccessingSecurityScopedResource() en moet vrijgeven via stopAccessingSecurityScopedResource(). Deze methoden moeten in paren worden aangeroepen — anders wordt de bron niet vrijgemaakt en veroorzaakt dit een lekkage van toegangsrechten.
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 ondersteunt aangepaste interactieve acties — knoppen die onder de meldingsinhoud worden weergegeven. Acties worden geregistreerd bij het aanmaken van de meldingscategorie via UNNotificationCategory en kunnen destructief, tekstueel of achtergrond zijn.
UNNotificationAction — een eenvoudige actie met een titel en optionele destructieve vlag. UNTextInputNotificationAction — een actie met een tekstinvoerveld, bijvoorbeeld voor snel antwoord op een bericht. Beide typen ondersteunen de optie UNNotificationActionOptions.authenticationRequired — vereiste om het apparaat te ontgrendelen vóór uitvoering.
De extensie ontvangt de geselecteerde actie via de methode didReceive(_:withCompletionHandler:), waarbij een UNNotificationResponse-object met de actie-ID en optionele tekst wordt doorgegeven. De extensie kan het antwoord zelfstandig verwerken of doorgeven aan de hoofdapp via de gedeelde App Group-container.
let category = UNNotificationCategory(
identifier: "message",
actions: [
UNTextInputNotificationAction(
identifier: "reply",
title: "Reply",
options: .authenticationRequired
),
UNNotificationAction(
identifier: "mark_read",
title: "Mark Read",
options: .foreground
)
],
intentIdentifiers: []
)
Veelgestelde vragen
Content Extension is verantwoordelijk voor de visuele weergave van de melding, terwijl Service Extension verantwoordelijk is voor het wijzigen van de inhoud vóór weergave. Content Extension werkt na Service Extension en kan de payload van de melding niet wijzigen.
Swift en Objective-C voor UIKit. Vanaf iOS 16 wordt ook SwiftUI ondersteund voor het maken van de meldingsinterface via NotificationContentView met modificatoren voor grootte en configuratie.
Ja, vanaf iOS 16 kan de extensie SwiftUI gebruiken via UIHostingController. Alle competenties van UIKit — grootte, beperkingen, security-scoped bronnen — blijven echter behouden en worden toegepast op SwiftUI-inhoud.
Tot 4 bijlagen per melding. Elke bijlage maximaal 50 MB. Ondersteund worden afbeeldingen (JPEG, PNG, HEIF), audio (MP3, AAC) en video (MPEG-4, H.264).
Via App Group — een gedeelde directory op schijf. UserDefaults met app group suffix werkt ook. Directe API-aanroepen van de hoofdapp zijn niet beschikbaar vanwege processisolatie van de extensie.
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