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:
- Bei Empfang einer entfernten Benachrichtigung mit dem Schlüssel
mutable-content: 1initiiert das System den Start der Benachrichtigungsdienst-Erweiterung. - Die Methode
didReceive(_:withContentHandler:)wird implementiert, in der die Verarbeitung und Modifikation der Benachrichtigung erfolgt. - Der modifizierte Inhalt wird an den Abschluss-Handler
contentHandlerübergeben. - 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)
}
}
}