Notification Content Extension — is een iOS-extensie waarmee u de standaardinterface van een pushmelding kunt vervangen door een aangepaste UIView. De ontwikkelaar krijgt volledige controle over de weergave van inhoud: afbeeldingen, video's, animaties, aangepaste lettertypen en interactieve elementen. Volgens Apple Developer, 2025 ondersteunt Notification Content Extension elke UIKit-interface in de beperkte ruimte van de melding.
Belangrijkste punten
Notification Content Extension — is een app-extensie in iOS die het standaardweergavesjabloon van een pushmelding overschrijft met een aangepaste UIView. In tegenstelling tot een gewone melding, waar de inhoud beperkt is tot titel, subtitel en tekst, kan de extensie elke UIKit-interface weergeven: een kaart met coördinaten, een grafiek, een afbeeldingsgalerij of een invoerformulier.
Wanneer iOS een pushmelding ontvangt met een opgegeven categoryIdentifier, controleert het systeem of de extensie is geregistreerd voor deze categorie. Zo ja — start het systeem de extensie in een apart proces en geeft de inhoud van de melding door. De extensie toont zijn eigen interface in plaats van de standaard. De gebruiker interageert met de aangepaste interface zonder de hoofdapplicatie te openen.
Het is belangrijk om Notification Content Extension niet te verwarren met Notification Service Extension. Service Extension verwerkt de inhoud voordat de melding wordt weergegeven (bijlagen downloaden, decoderen). Content Extension vervangt de interface na ontvangst van de gereed inhoud. Beide extensies kunnen samenwerken: Service Extension bereidt gegevens voor, Content Extension toont ze.
| Kenmerk | Content Extension | Service Extension |
|---|---|---|
| Doel | Aangepaste UI van melding | Inhoud wijzigen vóór weergave |
| Uitvoeringstijd | Zolang gebruiker melding ziet | Tot 30 seconden op achtergrond |
| Interface | Volledige UIKit UIView | Geen interface |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension werkt in een geïsoleerd proces met beperkte bronnen. De extensie heeft geen toegang tot de hoofdopslag van de applicatie via NSUserDefaults, behalve App Group. De grootte van de extensie is beperkt tot 50 MB in uitgepakte vorm. De tijd voor het weergeven van inhoud is ook beperkt — als de extensie de update niet binnen een redelijke tijd voltooit, wordt deze door het systeem gesloten.
Om de extensie in Xcode te maken, moet u een nieuw target van het type Notification Content Extension toevoegen. Xcode maakt automatisch MainInterface.storyboard met een controller die overerft van UIViewController en UNNotificationContentExtension implementeert.
Selecteer in Xcode File → New → Target → Notification Content Extension. Geef de naam van de extensie, de taal (Swift of Objective-C) op en zorg ervoor dat het project is verbonden met hetzelfde ontwikkelteam. Na het maken van het target verschijnt er een map met drie bestanden: MainInterface.storyboard, Info.plist en het controllerbestand.
In Info.plist van de extensie wordt verplicht de array NSExtensionAttributes met de sleutel UNNotificationExtensionCategory opgegeven. Deze array bevat de identificatiecodes van de meldingscategorieën waarvoor de extensie wordt geactiveerd. De optionele sleutel UNNotificationExtensionInitialContentSizeRatio bepaalt de initiële beeldverhouding van de aangepaste interface voor correcte positionering.
Het wordt aanbevolen een schone architectuur in de target-extensie te behouden: aparte map voor controllers, aparte map voor aangepaste weergaven. Omdat de extensie een apart binair bestand is, is de code van de hoofdapplicatie niet direct toegankelijk. Maak voor het delen van code een apart framework of gebruik App Group voor gegevens.
UNNotificationContentExtension — een protocol dat de controller in Notification Content Extension moet implementeren. De enige verplichte methode is didReceive(_:with:), aangeroepen bij ontvangst van een melding. De controller ontvangt de melding en een gereed view controller die met gegevens moet worden bijgewerkt.
De controller van de extensie moet overerven van UIViewController en UNNotificationContentExtension implementeren. Storyboard of xib is gekoppeld aan deze controller. Bij ontvangst van een melding geeft de methode didReceive de inhoud door en werkt de controller zijn weergaven bij.
import UIKit
import UserNotifications
import UserNotificationsUI
class CustomNotificationViewController: UIViewController {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var customImageView: UIImageView!
func didReceive(
notification: UNNotification
) {
let content = notification.request.content
titleLabel.text = content.title
loadAttachment(content.attachments.first)
}
private func loadAttachment(attachment: UNNotificationAttachment?) {
guard let url = attachment?.URL else { return }
if let image = UIImage(contentsOfFile: url.path) {
customImageView.image = image
}
}
}
extension CustomNotificationViewController: UNNotificationContentExtension {
func didReceive(
notification: UNNotification
) {
didReceive(notification: notification)
}
}
Het systeem bepaalt de grootte van de aangepaste interface op basis van de sleutel UNNotificationExtensionInitialContentSizeRatio in Info.plist en de huidige inhoud. Het wordt aanbevolen deze sleutel in te stellen op 0.1 voor een minimale initiële grootte en vervolgens de grootte te wijzigen via preferredContentSize na het laden van de inhoud.
Notification Content Extension geeft volledige vrijheid bij het maken van de interface. U kunt elke UIKit-componenten gebruiken: UITableView, MKMapView, WKWebView, UIStackView. Houd echter rekening met de beperkte ruimte van de melding en optimaliseer de prestaties.
Een van de populaire scenario's is het weergeven van een kaart met een locatie. Hiervoor wordt in de Storyboard van de extensie een MKMapView toegevoegd en geeft de controller coördinaten door uit de inhoud van de melding. Vergeet niet MapKit toe te voegen aan het target van de extensie. Houd bij gebruik van de kaart rekening met de geheugenlimiet van de extensie — het laden van complexe tegels kan de beschikbare bronnen overschrijden.
Notification Content Extension ondersteunt UIView-animaties, waaronder het wijzigen van afmetingen, verplaatsen en transparantie van elementen. Bij het ingaan van de uitgebreide modus van de melding kunt u een animatie starten voor het verschijnen van inhoud. Animaties moeten kort zijn (tot 0.5 seconde) en de gebruiker niet hinderen bij interactie met de melding. Vermijd oneindige animaties — ze verbruiken de batterij en verminderen de prestaties.
Omdat de extensie een volwaardige UIViewController is, kunt u gebaren en aanraakafhandeling toevoegen. UIKit-gebaren (UITapGestureRecognizer, UIButton) werken standaard. Voor acties die het openen van de applicatie vereisen, gebruikt u de delegate van de extensie of userNotificationCenter. Interactieve elementen moeten groot genoeg zijn om comfortabel te kunnen worden aangeraakt in de beperkte ruimte — de minimale touch target-grootte is 44x44 punten volgens de aanbevelingen van Apple.
Mediainhoud — een belangrijkste mogelijkheid van Notification Content Extension. De melding kan afbeeldingen, GIF, audio en video bevatten die worden weergegeven in de aangepaste interface. Bijlagen worden geleverd via UNNotificationAttachment, die zowel door de server via payload als door Notification Service Extension na downloaden kan worden toegevoegd. Ondersteunde formaten zijn JPEG, PNG, MPEG-4 en MP3.
Om een afbeelding weer te geven, volstaat het om UNNotificationAttachment uit de inhoud van de melding te halen en deze van een lokale URL te laden. Het is belangrijk te onthouden dat de extensie alleen toegang heeft tot lokale bestanden — externe bronnen moeten vooraf door Service Extension worden gedownload. Maximale grootte van de bijlage — 50 MB op iOS 15+, de limiet wordt verhoogd met elke volgende update. Voor ondersteuning van meerdere afbeeldingen gebruikt u UNNotificationAttachment met verschillende identificatiecodes en geeft u ze weer via UIPageViewController.
Om een afbeelding in de aangepaste interface weer te geven, haalt de extensie UNNotificationAttachment uit de inhoud van de melding en laadt deze van een lokale URL. De bijlage moet vooraf door Notification Service Extension zijn gedownload — Content Extension heeft geen toegang tot het netwerk. Maximale grootte van de mediabijlage — 50 MB op iOS 15+, in eerdere versies was de limiet 10 MB. De extensie moet de afwezigheid van een bijlage correct verwerken en een fallback-interface weergeven. Gebruik voor het vooraf laden van afbeeldingen met lage resolutie miniatuurversies die door Service Extension zijn gemaakt vóór het toevoegen.
iOS ondersteunt het afspelen van video in Notification Content Extension via AVPlayerLayer. De extensie kan een videospeler met bedieningsknoppen direct in de melding weergeven. Dit is vooral nuttig voor beveiligingscamera-apps, streaming of voorbeeld van inhoud. Automatisch afspelen zonder geluid is toegestaan op voorwaarde dat de gebruiker mediainhoud in deze melding verwacht. Voeg bij het implementeren van de videospeler bedieningselementen toe: play/pause, voortgangsbalk en sluitknop. Zorg ervoor dat de video niet automatisch start met geluid — dit schendt de aanbevelingen van Apple voor gebruikerservaring. Gebruik voor een diavoorstelling van meerdere afbeeldingen een geanimeerde overgang ertussen via UIView.transition met de overgangsoptie voor het omslaan van een pagina.
Notification Content Extension werkt in een beperkte omgeving met een geheugenlimiet van ongeveer 50 MB. Gebruik voor prestatieoptimalisatie lui laden van afbeeldingen, vermijd zware berekeningen op de hoofdthread en pas Auto Layout toe met eenvoudige constraints. Voer zware bewerkingen zoals beeldverwerking of gegevensparsing uit op de achtergrond (DispatchQueue.global). Bij overschrijding van de geheugenlimiet sluit het systeem de extensie en ziet de gebruiker de standaardmelding. Het wordt aanbevolen de extensie te profileren via Instruments (Allocations en Time Profiler) vóór publicatie, evenals het controleren van het geheugengebruik op echte apparaten met verschillende iOS-versies.
Veelgestelde vragen
Ja, vanaf iOS 16 ondersteunt Notification Content Extension SwiftUI via UIHostingController. UIKit blijft echter een stabielere keuze voor complexe interfaces vanwege de beperkte ondersteuning van SwiftUI in extensies.
Controleer of de categoryIdentifier in de payload van de melding overeenkomt met UNNotificationExtensionCategory in Info.plist van de extensie. Zorg er ook voor dat de extensie is toegevoegd aan het hoofdapp-target en correct is ondertekend.
Gebruik App Group — gedeelde opslag (UserDefaults suite) of bestandscontainer. De hoofdapplicatie en extensie moeten in dezelfde ontwikkelaarsgroep zitten en de mogelijkheid App Groups moet zijn ingeschakeld.
Gebruik de methode didReceive(_:with:) met UNNotificationContentExtensionMediaPlayPauseButtonType voor mediabeheer of vraag een update aan via de delegate. Volledige update van inhoud zonder nieuwe melding is niet mogelijk.
Selecteer het extensie-target in Xcode en voer uit op de simulator. Gebruik lldb en breakpoints zoals in een gewone applicatie. Stuur voor testen een pushmelding via Firebase Console of lokaal via Pusher.
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