Sobes.tech
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 :

  1. 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.
  2. La méthode didReceive(_:withContentHandler:) est implémentée, dans laquelle le traitement et la modification de la notification ont lieu.
  3. Le contenu modifié est transmis au gestionnaire de fin contentHandler.
  4. 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)
        }
    }

}