Notification Service Extension: Was es ist, Inhaltsverarbeitung vor der Anzeige auf iOS

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

Notification Service Extension ist eine iOS-Erweiterung, die eine Push-Benachrichtigung abfängt, bevor sie dem Benutzer angezeigt wird, und ermöglicht, den Inhalt zu modifizieren. Die Erweiterung kann verschlüsselte Daten entschlüsseln, Medienanhänge herunterladen, Text ändern oder benutzerdefinierte Felder hinzufügen. Laut Apple Developer, 2025 hat Notification Service Extension bis zu 30 Sekunden Zeit, um die Aufgabe im Hintergrund abzuschließen.

Wichtige Punkte

  • Notification Service Extension ist eine iOS-Erweiterung zur Verarbeitung von Push-Benachrichtigungen vor der Anzeige.
  • Die Erweiterung erbt von UNNotificationServiceExtension und implementiert die Methode didReceive.
  • Bis zu 30 Sekunden Hintergrundausführung zum Herunterladen und Verarbeiten von Daten.
  • Hauptanwendungsfälle: Entschlüsselung von Payloads, Herunterladen von Bildern und Videos, Inhaltsvalidierung.
  • Die Erweiterung kann die Anzeige der Benachrichtigung verzögern oder vollständig über contentHandler abbrechen.

Was ist Notification Service Extension

Notification Service Extension ist eine App-Erweiterung in iOS, die ausgeführt wird, bevor eine Push-Benachrichtigung angezeigt wird. Sie erlaubt dem Server, einen minimalen Payload zu senden, während die Erweiterung ihn mit Inhalten anreichert: Bilder herunterladen, Daten entschlüsseln, Text ersetzen. Der Benutzer sieht die bereits verarbeitete Benachrichtigung.

Wie es funktioniert

Wenn iOS eine Push-Benachrichtigung erhält, prüft das System, ob eine Erweiterung für die App vorhanden ist. Wenn die Erweiterung registriert ist, startet iOS sie in einem Hintergrundprozess und übergibt den Benachrichtigungsinhalt über die Methode didReceive(_:withContentHandler:). Die Erweiterung verarbeitet den Inhalt und ruft contentHandler mit dem modifizierten Inhalt auf. Wenn die Erweiterung nicht innerhalb von 30 Sekunden abschließt, zeigt das System die ursprüngliche Benachrichtigung an.

Wann Service Extension verwendet werden sollte

Service Extension ist in Szenarien erforderlich, in denen Benachrichtigungsinhalte eine Verarbeitung auf dem Gerät erfordern. Sichere Kommunikation: Der Server sendet einen verschlüsselten Payload, die Erweiterung entschlüsselt ihn lokal. Rich Media-Benachrichtigungen: Der Server sendet eine Bild-URL, die Erweiterung lädt sie herunter und hängt sie an. Dynamische Lokalisierung: Die Erweiterung setzt Text in der Gerätesprache ein.

SzenarioOhne ErweiterungMit Erweiterung
BildNicht unterstütztHeruntergeladen und angezeigt
VerschlüsselungServer speichert den SchlüsselEntschlüsselung auf dem Gerät
TextAuf dem Server festgelegtDynamische Ersetzung
ValidierungNicht geprüftSchädliche Benachrichtigungen abbrechen

Einschränkungen und Ausführungszeit

Notification Service Extension läuft in einer eingeschränkten Umgebung. Die maximale Ausführungszeit beträgt 30 Sekunden. Die Erweiterung hat keinen Zugriff auf den Hauptspeicher der App (außer App Group). Die Größe der Erweiterung ist auf 50 MB begrenzt. Bei Zeitüberschreitung ruft das System contentHandler mit dem ursprünglichen Inhalt auf, und alle Änderungen gehen verloren.

Erstellung der Erweiterung und Konfiguration von Info.plist

In Xcode wird Notification Service Extension durch Erstellen eines neuen Targets vom Typ Notification Service Extension hinzugefügt. Xcode generiert eine Vorlagenklasse NotificationService, die von UNNotificationServiceExtension erbt, mit zwei Methoden: didReceive und serviceExtensionTimeWillExpire.

Hinzufügen eines Targets zum Projekt

Wählen Sie in Xcode File → New → Target → Notification Service Extension. Geben Sie einen Namen ein (z.B. PushNotificationService) und wählen Sie die Sprache Swift. Stellen Sie sicher, dass das Target zur Haupt-App hinzugefügt wurde und die richtige Signatur hat. Nach der Erstellung wird die Klasse NotificationService.swift mit einer Basisimplementierung generiert.

Info.plist-Struktur der Erweiterung

Das Info.plist der Erweiterung enthält den Schlüssel NSExtension mit den Unterschlüsseln NSExtensionPointIdentifier (com.apple.usernotifications.service) und NSExtensionPrincipalClass (der Name Ihres Controllers). Zusätzlich können NSExtensionAttributes mit Aktivierungsregeln für die Erweiterung angegeben werden. Xcode generiert diese Einstellungen automatisch.

Beispiel einer Basis-Erweiterung

Die Basisimplementierung überschreibt didReceive, modifiziert den Benachrichtigungsinhalt und ruft contentHandler auf. Wenn die Verarbeitung zu lange dauert, wird serviceExtensionTimeWillExpire aufgerufen, wo Sie die Arbeit mit dem aktuellen Zustand abschließen müssen.

swift
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

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

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

        if let bestAttemptContent = bestAttemptContent {
            bestAttemptContent.title = "[Verarbeitet] \(bestAttemptContent.title)"
            contentHandler?(bestAttemptContent)
        }
    }

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

Entschlüsselung des verschlüsselten Payloads

Eine der Hauptanwendungen von Service Extension ist die Entschlüsselung von Benachrichtigungsinhalten auf dem Gerät. Der Server sendet einen verschlüsselten Payload, und die Erweiterung entschlüsselt ihn mit einem in Keychain oder App Group gespeicherten Schlüssel. Dies stellt sicher, dass der Inhalt während der Übertragung nicht abgefangen werden kann.

Sichere Zustellungsarchitektur

Der Server verschlüsselt den Benachrichtigungstext mit einem symmetrischen Schlüssel (AES-256). Der Verschlüsselungsschlüssel wird zwischen Client und Server vorab vereinbart. Die Erweiterung erhält die verschlüsselte Zeichenfolge im Datenfeld des Payloads, entschlüsselt sie und setzt sie in die Benachrichtigungsfelder ein. Der Benutzerschlüssel kann nach der Authentifizierung aus der Keychain abgerufen werden.

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    guard let content = request.content.mutableCopy()
        as? UNMutableNotificationContent else {
        handler(request.content)
        return
    }

    guard let encryptedData = content.userInfo["encrypted_data"]
        as? String else {
        handler(content)
        return
    }

    let decrypted = CryptoService.decrypt(encryptedData)
    content.body = decrypted.body
    content.title = decrypted.title
    handler(content)
}

Sichere Schlüsselspeicherung

Der Entschlüsselungsschlüssel darf nicht im Erweiterungscode oder in NSUserDefaults gespeichert werden. Verwenden Sie iOS Keychain mit Zugriff über App Group, damit sowohl die App als auch die Erweiterung den Schlüssel lesen können. Verwenden Sie Security.framework mit dem AES-256-GCM-Algorithmus zur Schlüsselgenerierung auf dem Client.

Herunterladen und Anhängen von Medienanhängen

Die häufigste Verwendung von Notification Service Extension ist das Herunterladen von Bildern, GIFs und Videos zur Anzeige in der Benachrichtigung. Der Server sendet eine Medien-URL, und die Erweiterung lädt sie herunter, speichert sie in einem temporären Verzeichnis und erstellt ein UNNotificationAttachment.

Medien-Download und Anhängeprozess

Die Erweiterung erhält die Bild-URL aus dem Payload-Feld der Benachrichtigung. Mit URLSession lädt die Erweiterung die Datei in ein temporäres Verzeichnis herunter. Nach Abschluss des Downloads wird ein UNNotificationAttachment mit der lokalen URL erstellt. Der Anhang wird an den modifizierten Inhalt übergeben. iOS zeigt automatisch das Bild in der Standardschnittstelle oder in einer Notification Content Extension an.

swift
private func downloadAndAttachMedia(
    content: UNMutableNotificationContent,
    mediaUrl: String,
    handler: @escaping (UNNotificationContent) -> Void
) {
    guard let url = URL(string: mediaUrl) else {
        handler(content)
        return
    }

    let task = URLSession.shared.downloadTask(with: url) { localUrl, _, error in
        guard let localUrl = localUrl, error == nil else {
            handler(content)
            return
        }

        let attachment = try? UNNotificationAttachment(
            identifier: "media",
            url: localUrl,
            options: nil
        )

        if let attachment = attachment {
            content.attachments = [attachment]
        }
        handler(content)
    }
    task.resume()
}

Unterstützte Medienformate

iOS unterstützt die folgenden Formate für die Anzeige in Benachrichtigungen: JPEG, PNG, GIF (statisch), MPEG-4-Video bis 50 MB. Für Audiodateien werden MP3, AAC und ALAC unterstützt. Wichtig: Alle Mediendateien müssen innerhalb des 30-Sekunden-Limits heruntergeladen werden. Für große Dateien wird serverseitiges Zuschneiden oder progressives Laden empfohlen.

Zeitverwaltung und Fallback-Szenarien

Die Verwaltung des 30-Sekunden-Limits ist eine Schlüsselaufgabe bei der Entwicklung von Notification Service Extension. Wenn die Erweiterung die Verarbeitung nicht rechtzeitig abschließt, ruft das System serviceExtensionTimeWillExpire auf und zeigt den ursprünglichen Inhalt an. Für jede Verarbeitungsart müssen Fallback-Szenarien vorgesehen werden.

Prioritätsstrategie

Teilen Sie Aufgaben nach Priorität auf. Führen Sie zuerst kritische Änderungen (Entschlüsselung, grundlegende Lokalisierung) durch. Optionale Verbesserungen (Bild-Download, Textanreicherung) kommen danach. Verwenden Sie URLSession mit Timeouts für Netzwerkanfragen, um nicht das gesamte Limit für eine einzige Operation zu verbrauchen.

Fallback bei Fehlern

Wenn der Bild-Download fehlschlägt oder die Payload-Entschlüsselung einen Fehler zurückgibt, sollte die Erweiterung contentHandler mit dem ursprünglichen Inhalt aufrufen. Beenden Sie die Erweiterung niemals ohne Aufruf von contentHandler — dies führt zum Verlust der Benachrichtigung. Ein sicherer Fallback sollte immer im Erweiterungscode vorgesehen sein.

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    let content = (request.content.mutableCopy()
        as? UNMutableNotificationContent) ?? request.content

    // Kritische Aufgabe: Entschlüsselung
    var decryptedContent = tryDecryptPayload(content)

    // Optionale Aufgabe: Medien
    guard let mediaUrl = decryptedContent.userInfo["media_url"]
        as? String else {
        handler(decryptedContent)
        return
    }

    downloadAndAttachMedia(
        content: decryptedContent,
        mediaUrl: mediaUrl,
        handler: handler
    )
}

Testen der Erweiterung

Zum Testen von Notification Service Extension verwenden Sie Xcode: Wählen Sie das Erweiterungs-Target aus, führen Sie es auf dem Simulator aus und senden Sie eine Push-Benachrichtigung über das Terminal oder die Firebase Console. Protokollieren Sie jede Verarbeitungsstufe mit os_log — dies hilft bei der Diagnose von Zeit- und Download-Problemen.

Häufig gestellte Fragen

Was passiert, wenn die Erweiterung nicht innerhalb von 30 Sekunden abschließt?

Das System ruft serviceExtensionTimeWillExpire auf und zeigt dann die ursprüngliche Benachrichtigung unverändert an. Alle heruntergeladenen Dateien und Änderungen werden verworfen.

Kann die Anzeige der Benachrichtigung von der Erweiterung abgebrochen werden?

Ja, wenn Sie contentHandler mit leerem Inhalt (UNNotificationContent mit leeren Feldern) aufrufen, wird die Benachrichtigung nicht angezeigt. Dies wird zum Filtern von Spam-Benachrichtigungen oder ungültigen Daten verwendet.

Wie übergibt man ein Autorisierungstoken für den Medien-Download?

Das Token kann im userInfo des Benachrichtigungs-Payloads übergeben oder über App Group aus der Keychain abgerufen werden. Es wird nicht empfohlen, Tokens in den UserDefaults der Erweiterung zu speichern.

Ist eine spezielle Zertifikatskonfiguration für die Erweiterung erforderlich?

Die Erweiterung muss mit demselben Entwicklerzertifikat signiert sein wie die Haupt-App. Für die Produktion ist ein Produktionszertifikat mit aktivierter Push Notifications-Funktion erforderlich.

Wie debuggt man die Erweiterung auf einem echten Gerät?

Verbinden Sie das Gerät mit Xcode, wählen Sie das Erweiterungs-Target im Ausführungsschema aus und senden Sie eine Push-Benachrichtigung über die Firebase Console. Breakpoints in der Erweiterung funktionieren genauso wie in der Haupt-App.

Zusammenfassung

  • Notification Service Extension ist eine iOS-Erweiterung zur Hintergrundverarbeitung von Push-Benachrichtigungen vor der Anzeige.
  • Die maximale Ausführungszeit beträgt 30 Sekunden, danach zeigt das System den ursprünglichen Inhalt an.
  • Hauptanwendungsfälle: Payload-Entschlüsselung, Medien-Download, Inhaltsvalidierung und Lokalisierung.
  • Die Erweiterung erbt von UNNotificationServiceExtension mit den Methoden didReceive und serviceExtensionTimeWillExpire.
  • Für Medien-Downloads verwenden Sie URLSession, für die Schlüsselspeicherung iOS Keychain.
  • Stellen Sie immer einen Fallback bereit — rufen Sie bei Fehlern contentHandler mit dem ursprünglichen Inhalt auf.
  • Kombinieren Sie Service Extension mit Content Extension für die vollständige Kontrolle über Benachrichtigungen.

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