Middle
Qu'est-ce qu'une extension du service de notifications?
sobes.tech IA
Réponse de l'IA
L'extension du service de notifications (Notification Service Extension) est un petit complément exécutable intégré à votre application iOS. Elle permet de modifier l'apparence du contenu d'une notification push distante avant son affichage à l'utilisateur.
Fonctions principales :
- Modification du contenu : Modifier le titre, le sous-titre, le texte ou ajouter des pièces jointes (images, vidéos) à la notification.
- Décryptage du contenu chiffré : Déchiffrer les données chiffrées envoyées avec la notification avant de les afficher à l'utilisateur.
- Notifications enrichies : En combinaison avec l'extension de contenu de notification (Notification Content Extension), permet de créer des interfaces personnalisées pour l'affichage des notifications.
Cycle de vie :
- Lors de la réception d'une notification distante avec la clé
mutable-content: 1, le système initie le lancement de l'extension du service de notifications. - La méthode
didReceive(_:withContentHandler:)est implémentée, dans laquelle le traitement et la modification de la notification ont lieu. - Le contenu modifié est transmis au gestionnaire de fin
contentHandler. - Le système affiche la notification modifiée.
Contraintes :
- Exécution courte (généralement environ 30 secondes).
- Accès limité aux ressources du système.
- Ne peut pas effectuer de longues tâches en arrière-plan.
Exemple d'implémentation de base :
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 {
// Modifier le contenu de la notification ici...
bestAttemptContent.title = "\(bestAttemptContent.title ?? "Pas de titre") [modifié]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Appelé juste avant que l'extension ne soit terminée par le système.
// Utilisez cela comme une opportunité pour livrer votre "meilleur essai" de contenu modifié,
// sinon la charge utile push originale sera livrée.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}