Notification Extension: Grundlegende Konzepte, Erweiterungstypen und Einrichtung

Autor: IT Sectr Veröffentlicht: 2026-03-20 Lesezeit: 8 Min.

Notification Extension ist ein iOS-Mechanismus, der es ermöglicht, den Inhalt und das Erscheinungsbild von Push-Benachrichtigungen zu ändern, bevor sie dem Benutzer angezeigt werden. Erweiterungen arbeiten auf der Betriebssystemseite in einem separaten Prozess: UNNotificationServiceExtension verarbeitet eingehende Inhalte, während UNNotificationContentExtension die Schnittstelle verwaltet. Laut Apple Developer Documentation, 2026 hat die Service Extension bis zu 30 Sekunden Zeit, um Aufgaben vor der Anzeige der Benachrichtigung auszuführen. Diese Einschränkung ist beim Herunterladen von Anhängen oder Entschlüsseln von Daten kritisch.

Wichtige Punkte

  • Service Extension — fängt die Benachrichtigung vor der Anzeige ab, ermöglicht das Ändern von Text, Hinzufügen von Medien und Entschlüsseln von Daten mit einem 30-Sekunden-Limit.
  • Content Extension — erstellt eine benutzerdefinierte Benachrichtigungsoberfläche mit individuellem UI, Schaltflächen und Touch-Handling über Storyboard oder SwiftUI.
  • Medienanhänge — Bilder, Videos und Audio werden über UNNotificationAttachment in der Service Extension hinzugefügt, bevor sie an die Content Extension weitergegeben werden.
  • Registrierung — beide Erweiterungen werden in Info.plist als separate Targets mit Angabe von Benachrichtigungskategorien und NSExtensionPointIdentifier registriert.
  • Einschränkungen — Erweiterungen haben keinen Zugriff auf die Hauptanwendung, arbeiten in einer isolierten Sandbox mit 50 MB Speicherlimit.

Was ist Notification Extension

Notification Extension ist eine iOS-Softwarekomponente, die das Standardverhalten von Push-Benachrichtigungen erweitert, indem sie die Möglichkeit bietet, Inhalte zu ändern und die Oberfläche anzupassen. Im Gegensatz zu gewöhnlichen Benachrichtigungen, die vom System in einem Standardformat angezeigt werden, ermöglichen Erweiterungen dem Entwickler, den Inhalt vor der Anzeige zu beeinflussen und eine einzigartige Benutzeroberfläche zu erstellen.

Zwei Arten von Benachrichtigungserweiterungen

Apple bietet zwei Arten von Notification Extension für unterschiedliche Zwecke an: UNNotificationServiceExtension übernimmt die Verarbeitung eingehender Payloads, während UNNotificationContentExtension die Anzeige verwaltet. Die Service Extension wird vor der Anzeige der Benachrichtigung ausgeführt und hat laut Apple Developer Documentation eine begrenzte Ausführungszeit von bis zu 30 Sekunden. Die Content Extension wird aktiviert, nachdem der Benutzer mit der Benachrichtigung interagiert hat, und zeigt eine benutzerdefinierte Ansicht an.

Unterschied zu Standardbenachrichtigungen

Eine standardmäßige iOS-Push-Benachrichtigung wird vom System automatisch basierend auf den Feldern alert, title und subtitle des JSON-Payloads angezeigt. Notification Extension fängt die Kontrolle ab: Service Extension erhält den rohen Payload, modifiziert ihn und übergibt ihn zur Anzeige an das System. Content Extension ersetzt das Standard-Banner durch eine benutzerdefinierte Oberfläche mit beliebigen Steuerelementen.

Lebenszyklus der Erweiterung

Wenn das Gerät eine Push-Benachrichtigung mit dem Schlüssel mutable-content: 1 erhält, startet das System die Service Extension in einem separaten Prozess. Der Erweiterungsprozess ist von der Hauptanwendung isoliert und hat eine eigene Sandbox mit einem Speicherlimit von 50 MB. Nach Abschluss der Verarbeitung ruft die Erweiterung den Completion Handler auf und übergibt den modifizierten UNNotificationContent zur Anzeige an das System.

UNNotificationServiceExtension: Inhaltsänderung

UNNotificationServiceExtension ist das primäre Werkzeug, um Push-Benachrichtigungen programmatisch zu ändern, bevor sie dem Benutzer angezeigt werden. Die Erweiterung wird automatisch aktiviert, wenn eine Benachrichtigung empfangen wird, deren Payload das Flag mutable-content: 1 gesetzt hat. Innerhalb von 30 Sekunden kann die Erweiterung einen Medienanhang herunterladen, Text ändern, verschlüsselte Daten entschlüsseln oder den Inhalt anreichern.

Methoden des UNNotificationServiceExtension-Protokolls

Die Erweiterung implementiert zwei Schlüsselmethoden aus dem UNNotificationServiceExtension-Protokoll. Die didReceive-Methode empfängt die eingehende Anfrage mit dem rohen UNNotificationRequest und ermöglicht die Änderung über den Completion Handler mit einem neuen UNNotificationContent. Die Methode serviceExtensionTimeWillExpire wird vom System eine Sekunde vor dem Timeout aufgerufen — in ihr muss die Verarbeitung abgeschlossen und das aktuelle (möglicherweise teilweise) Ergebnis übergeben werden.

Beispiel: Hinzufügen eines Bildes zu einer Benachrichtigung

Betrachten Sie ein Szenario, in dem der Server einen Push mit einer Bild-URL in einem benutzerdefinierten Feld sendet. Die Service Extension lädt dieses Bild über das Netzwerk herunter, erstellt ein UNNotificationAttachment und fügt es zum Inhalt hinzu. UNNotificationAttachment akzeptiert eine lokale Bild-, Video- oder Audiodatei und kopiert sie automatisch in die Sandbox der Erweiterung. Nach der Erstellung des Anhangs übergibt die Erweiterung den aktualisierten Inhalt an das System.

swift
class NotificationService: UNNotificationServiceExtension {

    override func didReceive(_ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void) {

        let userInfo = request.content.userInfo
        guard let imageURL = URL(string: userInfo["image-url"] as! String)
        else { contentHandler(request.content); return }

        let attachment = try! UNNotificationAttachment(
            identifier: "image", url: imageURL,
            options: [UNNotificationAttachmentOptionsTypeHintKey: "jpg"])

        let modifiedContent = request.content.mutableCopy()
            as! UNMutableNotificationContent
        modifiedContent.attachments = [attachment]
        contentHandler(modifiedContent)
    }

    override func serviceExtensionTimeWillExpire() {
        contentHandler?(bestAttemptContent ?? request.content)
    }
}

Zwischenspeicherung und Wiederverwendung

Wenn Benachrichtigungen mit denselben Anhängen häufig gesendet werden, wird empfohlen, heruntergeladene Dateien auf dem Gerät zwischenzuspeichern. FileManager bietet Zugriff auf das Cache-Verzeichnis der Erweiterung, das zwischen Starts erhalten bleibt. Dies reduziert die Verarbeitungszeit nachfolgender Benachrichtigungen und verringert die Netzwerklast. Laut Apple kann die Zwischenspeicherung die Verarbeitungszeit auf 2–5 Sekunden statt eines vollständigen Downloads reduzieren.

UNNotificationContentExtension: Benutzerdefinierte Oberfläche

UNNotificationContentExtension ermöglicht es, das Standard-Benachrichtigungsbanner durch eine benutzerdefinierte Oberfläche zu ersetzen, die in Interface Builder oder SwiftUI erstellt wurde. Die Erweiterung wird aktiviert, wenn der Benutzer eine Aktion mit der Benachrichtigung ausführt: Tippen, nach unten wischen oder 3D Touch. Content Extension erhält den bereits von der Service Extension verarbeiteten Inhalt und zeigt ihn in einer benutzerdefinierten Ansicht an.

Storyboard und Benachrichtigungskategorien

Jede Content Extension wird über Info.plist mit einer oder mehreren Benachrichtigungskategorien verknüpft. Die Kategorie wird auf dem Server durch das Feld category im APNS-Payload definiert. Das System wählt automatisch die passende Erweiterung basierend auf der Kategorie der empfangenen Benachrichtigung aus. Die Oberfläche wird über Storyboard mit standardmäßigen UIKit-Komponenten oder SwiftUI View erstellt.

Behandlung von Benutzeraktionen

Content Extension unterstützt benutzerdefinierte Schaltflächen und Touch-Handler, die in UNNotificationAction definiert sind. UNNotificationAction wird in der Kategorieregistrierungsphase erstellt und kann Texteingabe über UNTextInputNotificationAction unterstützen. Wenn der Benutzer eine Schaltfläche drückt, erhält die Erweiterung den didReceive-Callback mit der Aktionskennung und kann die entsprechende Logik ausführen — eine URL öffnen, eine Anfrage an den Server senden oder die Oberfläche aktualisieren.

Leistungseinschränkungen

Content Extension läuft in einem isolierten Prozess mit einer eigenen Ausführungsschleife und einem Speicherlimit von etwa 50 MB. Die Leistung der Erweiterung ist kritisch, da der System-Watchdog den Prozess beendet, wenn die Grenzen überschritten werden. Es wird empfohlen, aufwändige Berechnungen, das Laden großer Bilder und lange Netzwerkanfragen innerhalb der Content Extension zu vermeiden.

Medienanhänge und UNNotificationAttachment

UNNotificationAttachment ist ein Objekt, das eine Mediendatei zu einer Push-Benachrichtigung hinzufügt: Bild, Video, Audio oder GIF. Der Anhang wird aus einer lokalen Datei-URL erstellt, die sich in der Sandbox der Erweiterung befinden muss. Die maximale Anhangsgröße darf 10 MB nicht überschreiten, andernfalls wird das System den Anhang bei der Erstellung ablehnen.

Unterstützte Formate

Apple unterstützt eine begrenzte Anzahl von Formaten für Medienanhänge. Bilder — JPEG, PNG, GIF (einschließlich animierter), TIFF. Video — MPEG, MP4, MOV mit einer maximalen Dauer von 30 Sekunden. Audio — MP3, AAC, WAV, CAF. Für jedes Format kann der Typ über UNNotificationAttachmentOptionsTypeHintKey angegeben werden, was dem System hilft, die Datei korrekt zu verarbeiten.

Herunterladen von Anhängen aus dem Netzwerk

Da der Push-Payload nur eine URL enthält, nicht die Datei selbst, muss das Herunterladen des Anhangs innerhalb der Service Extension erfolgen. Die maximale Downloadzeit ist auf 30 Sekunden begrenzt, daher wird empfohlen, URLSession mit minimalen Einstellungen zu verwenden und den Download bei schwachem Signal zu deaktivieren. Wenn der Anhang nicht rechtzeitig geladen wird, wird die Benachrichtigung ohne Medien angezeigt — dies ist das Standardverhalten des Systems.

Implementierungsbeispiel in Swift

Lassen Sie uns ein vollständiges Notification Extension-Beispiel durchgehen, das ein Bild herunterlädt, speichert und zur Benachrichtigung hinzufügt. NotificationService erbt von UNNotificationServiceExtension und überschreibt die didReceive-Methode. Das Beispiel zeigt die Behandlung optionaler Felder, die Erstellung von Anhängen und das Aufrufen des Completion Handlers mit modifiziertem Inhalt.

swift
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(
        _ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void
    ) {
        self.contentHandler = contentHandler
        self.bestAttemptContent =
            (request.content.mutableCopy()
                as! UNMutableNotificationContent)

        guard let attachmentURLString =
            bestAttemptContent?.userInfo["attachment-url"] as? String,
            let url = URL(string: attachmentURLString)
        else {
            contentHandler(request.content)
            return
        }

        URLSession.shared.downloadTask(with: url) {
            [weak self] localURL, _, error in
            guard let localURL = localURL, error == nil
            else {
                contentHandler(request.content)
                return
            }
            let attachment = try! UNNotificationAttachment(
                identifier: "media", url: localURL)
            self?.bestAttemptContent?.attachments = [attachment]
            contentHandler(self?.bestAttemptContent
                ?? request.content)
        }.resume()
    }

    override func serviceExtensionTimeWillExpire() {
        if let content = bestAttemptContent {
            contentHandler?(content)
        }
    }
}

Info.plist für die Erweiterung konfigurieren

Damit die Erweiterung korrekt funktioniert, müssen die Benachrichtigungskategorien in Info.plist registriert werden. Der Schlüssel NSExtensionPointIdentifier wird für Service Extension auf com.apple.usernotifications.service oder für Content Extension auf com.apple.usernotifications.content gesetzt. Kategorien werden in AppDelegate beim Start der Anwendung über UNUserNotificationCenter definiert, und die Erweiterung wird nur für Benachrichtigungen mit einer entsprechenden Kategorie im Payload aktiviert.

Häufig gestellte Fragen

Was ist der Unterschied zwischen Service Extension und Content Extension?

Service Extension ändert den Inhalt vor der Anzeige der Benachrichtigung — fügt Medien hinzu, ändert Text, entschlüsselt Daten. Content Extension ersetzt die Benachrichtigungsoberfläche nach Benutzerinteraktion durch eine benutzerdefinierte Oberfläche. Service Extension arbeitet vor der Anzeige, Content Extension danach.

Wie viel Zeit steht für die Verarbeitung in der Service Extension zur Verfügung?

Das System weist 30 Sekunden für die Codeausführung in didReceive zu. Wenn die Verarbeitung nicht innerhalb dieser Zeit abgeschlossen ist, wird serviceExtensionTimeWillExpire aufgerufen, wo das aktuelle Ergebnis übergeben werden muss. Es wird empfohlen, unter Berücksichtigung von Anhangs-Downloads innerhalb von 10–15 Sekunden zu bleiben.

Kann SwiftUI in Content Extension verwendet werden?

Ja, SwiftUI wird in Content Extension ab iOS 16 unterstützt. Die View wird in einen UIHostingController eingebettet und zum Storyboard hinzugefügt. Aufgrund der Speichergrenzen wird jedoch empfohlen, SwiftUI nur für einfache Oberflächen mit einer minimalen Anzahl von Elementen zu verwenden.

Wie behandelt man Anhangs-Download-Fehler?

Bei einem Downloadfehler oder Zeitüberschreitung rufen Sie einfach den Completion Handler mit dem ursprünglichen Inhalt ohne Anhang auf. Das System zeigt die Benachrichtigung im Standardformat ohne Medien an. Protokollieren Sie Fehler über OSLog zur Diagnose, blockieren Sie jedoch nicht die Anzeige der Benachrichtigung.

Welche Speicherbeschränkungen hat Notification Extension?

Die Erweiterung läuft in einem isolierten Prozess mit einem Limit von etwa 50 MB. Bei Überschreitung beendet das System den Prozess über den Watchdog. Vermeiden Sie das Laden großer Dateien, das Speichern von Bildern im Speicher und Lecks bei der Arbeit mit URLSession.

Zusammenfassung

  • Notification Extension — ein iOS-Mechanismus zur Änderung von Push-Benachrichtigungen, einschließlich Service Extension (Inhalt) und Content Extension (Oberfläche).
  • Service Extension verarbeitet den Payload vor der Anzeige der Benachrichtigung mit einem 30-Sekunden-Limit, kann Medienanhänge hinzufügen und Daten entschlüsseln.
  • Content Extension ersetzt das Standard-Banner durch eine benutzerdefinierte Oberfläche über UIKit oder SwiftUI mit Unterstützung für interaktive Schaltflächen.
  • UNNotificationAttachment fügt Bilder, Videos und Audio zu Benachrichtigungen hinzu und unterstützt Formate wie JPEG, PNG, MP4, MP3 und andere.
  • Erweiterungsregistrierung erfolgt über Info.plist mit Angabe von NSExtensionPointIdentifier und Benachrichtigungskategorien zur Aktivierung.
  • Einschränkungen — 50 MB Speicherlimit, isolierte Sandbox ohne Zugriff auf die Hauptanwendung, begrenzte Ausführungszeit.
  • Notification Extension ist ein Schlüsselwerkzeug zur Erstellung umfangreicher Benutzerbenachrichtigungen, das die Interaktion und Funktionalität von Push-Kommunikation in iOS verbessert.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch