Sobes.tech
Middle

Was ist eine Erweiterung des Benachrichtigungsdienstes?

sobes.tech KI

Antwort von AI

Die Erweiterung des Benachrichtigungsdienstes (Notification Service Extension) ist eine kleine ausführbare Ergänzung, die in Ihre iOS-Anwendung integriert ist. Sie ermöglicht es, das Erscheinungsbild des Inhalts einer entfernten Push-Benachrichtigung vor deren Anzeige beim Benutzer zu ändern.

Hauptfunktionen:

  • Inhaltsänderung: Ändern des Titels, Untertitels, Texts oder Hinzufügen von Anhängen (Bilder, Videos) zur Benachrichtigung.
  • Entschlüsselung verschlüsselter Inhalte: Entschlüsseln verschlüsselter Daten, die zusammen mit der Benachrichtigung gesendet werden, bevor sie dem Benutzer angezeigt werden.
  • Reiche Benachrichtigungen: In Kombination mit der Erweiterung für Benachrichtigungsinhalte (Notification Content Extension) können benutzerdefinierte Schnittstellen für die Anzeige von Benachrichtigungen erstellt werden.

Lebenszyklus:

  1. Bei Empfang einer entfernten Benachrichtigung mit dem Schlüssel mutable-content: 1 initiiert das System den Start der Benachrichtigungsdienst-Erweiterung.
  2. Die Methode didReceive(_:withContentHandler:) wird implementiert, in der die Verarbeitung und Modifikation der Benachrichtigung erfolgt.
  3. Der modifizierte Inhalt wird an den Abschluss-Handler contentHandler übergeben.
  4. Das System zeigt die modifizierte Benachrichtigung an.

Einschränkungen:

  • Kurze Ausführungszeit (in der Regel etwa 30 Sekunden).
  • Eingeschränkter Zugriff auf Systemressourcen.
  • Kann keine längeren Hintergrundaufgaben ausführen.

Beispiel für eine grundlegende Implementierung:

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
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            // Ändern Sie den Inhalt der Benachrichtigung hier...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Kein Titel") [geändert]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Wird kurz vor Beendigung der Erweiterung durch das System aufgerufen.
        // Nutzen Sie dies als Gelegenheit, um Ihren "besten Versuch" an modifiziertem Inhalt zu liefern,
        // andernfalls wird die ursprüngliche Push-Payload geliefert.
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}