Notification Content Extension — essence, interface personnalisée et configuration dans iOS

Auteur : IT Sectr Publié le : 2026-06-15 Temps de lecture : 9 min

Notification Content Extension est un type d'extension iOS qui remplace le modèle de notification push standard par une interface utilisateur entièrement personnalisée. Les développeurs peuvent afficher des images, des lecteurs audio, des boutons d'action, des barres de progression et des animations personnalisées dans une notification, transformant la bannière standard en une mini-application complète. Selon la WWDC 2025, l'extension utilise UNNotificationContentExtension et prend en charge jusqu'à 4 pièces jointes multimédias dans une seule notification, ainsi que le traitement des actions interactives via UNNotificationAction.

Points clés

  • Notification Content Extension crée une interface personnalisée pour les notifications push au lieu du modèle système standard
  • L'architecture est basée sur le protocole UNNotificationContentExtension avec les méthodes didReceive(_:with:) et didReceive(_:withCompletionHandler:)
  • L'extension peut afficher des pièces jointes multimédias — images, audio et vidéo — directement dans la notification sans ouvrir l'application
  • Notifications interactives prennent en charge des actions personnalisées avec retour d'information et saisie de texte
  • La taille de l'interface est limitée — la hauteur maximale de la notification personnalisée est de 320 points sur iPhone et 352 sur iPad

Qu'est-ce que Notification Content Extension

Notification Content Extension est une extension d'application qui remplace l'affichage des notifications push sur iOS. Au lieu d'une bannière standard avec un titre, un corps de message et des boutons, vous pouvez montrer une interface entièrement conçue dans Interface Builder ou par programmation via UIKit ou SwiftUI.

Contrairement à Notification Service Extension, qui modifie le contenu avant l'affichage, Content Extension est responsable uniquement de la présentation visuelle. . L'extension reçoit la notification complète après toutes les modifications et décide comment l'afficher. C'est la différence clé entre les deux types d'extensions de notification.

L'extension est activée lorsque l'utilisateur effectue un geste d'expansion — faire défiler la notification vers le bas ou appuyer dessus (selon le modèle de l'appareil). iOS lance le processus d'extension, crée un contrôleur à partir du nib ou storyboard spécifié et délivre la notification via UNNotificationContentExtension .

Création d'une interface de notification personnalisée

Le développement commence par l'ajout d'une nouvelle cible dans Xcode avec le modèle Notification Content Extension. Xcode crée un fichier MainInterface.storyboard et une classe héritant de UIViewController qui implémente le protocole UNNotificationContentExtension.

Taille et limites de l'interface

La hauteur maximale de la zone personnalisée est de 320 points sur iPhone (pour les modèles à grand écran) et 352 points sur iPad. Le contenu qui dépasse ces limites est coupé. Pour s'adapter à différentes tailles, il est recommandé d'utiliser Auto Layout et UIScrollView pour le contenu défilable. La largeur correspond toujours à la largeur de la notification et change automatiquement lors de la rotation de l'appareil.

Les Apple Human Interface Guidelines avertissent : l'interface de notification doit être concise et contenir un seul élément principal — une image, un lecteur, une carte ou un formulaire de saisie rapide. De multiples éléments interactifs submergent l'utilisateur et compliquent l'interaction.

Communication avec l'application principale

App Group est le seul mécanisme de partage de données entre l'extension et l'application principale. Grâce au répertoire partagé App Group, les images mises en cache, les jetons et les paramètres peuvent être transférés. Les appels API directs à l'application principale ou l'accès à ses UserDefaults ne sont pas disponibles en raison de l'isolement des processus.

swift
class NotificationViewController: UIViewController {

    func didReceive(
        _ notification: UNNotification
    ) {
        guard let attachment = notification
            .request.content.attachments.first()
        else { return }
        if attachment.url.startAccessingSecurityScopedResource() {
            imageView.image = UIImage(contentsOfFile:
                attachment.url.path)
            attachment.url.stopAccessingSecurityScopedResource()
        }
    }
}

Protocole UNNotificationContentExtension

UNNotificationContentExtension est le protocole principal qui définit le cycle de vie d'une notification personnalisée. Le protocole fournit des méthodes pour recevoir du contenu, gérer les actions et administrer l'interface.

Méthode didReceive:with:

didReceive(_:with:) est appelée lorsqu'une notification est reçue. L'extension reçoit un objet UNNotification et UNNotificationContentExtensionMediaPlayPauseButtonType pour gérer le lecteur multimédia. Dans cette méthode, vous devez configurer l'interface — charger une image, initialiser le lecteur ou afficher des données. Le système appelle cette méthode chaque fois que la notification est mise à jour en temps réel.

Il est important de noter que l'extension dispose d'un temps limité pour s'exécuter — environ 30 secondes pour un cycle d'affichage complet. Si l'interface n'est pas préparée dans ce délai, iOS affichera la notification système. Pour les ressources lourdes — chargement d'images depuis le réseau, décodage vidéo — il est recommandé d'utiliser des opérations asynchrones avec pré- mise en cache via App Group.

Contrôle du lecteur multimédia

Le protocole inclut des méthodes optionnelles pour les boutons lecture/pause : mediaPlay, mediaPause, mediaPlayPauseButtonType. Si la notification contient du contenu audio ou vidéo, l'extension peut afficher un lecteur intégré avec un élément de contrôle système. iOS ajoute automatiquement un bouton de lecture dans le coin supérieur droit de l'extension lorsque le type de bouton approprié est retourné.

Pièces jointes multimédias et leur traitement

UNNotificationAttachment est un objet qui contient des données multimédias jointes à une notification. Les images, fichiers audio et vidéo sont ajoutés au stade de la création de la notification sur le serveur ou dans Notification Service Extension via UNNotificationAttachment.

Formats pris en charge

Pour les images : JPEG, PNG, GIF, HEIF. Pour l'audio : MP3, AAC, ALAC, WAV. Pour la vidéo : MPEG-4, H.264, HEVC. Taille maximale de chaque pièce jointe : 50 Mo, jusqu'à 4 pièces jointes par notification. Le système télécharge automatiquement les pièces jointes en arrière-plan avant d'afficher la notification et donne à l'extension accès aux URL locales via des ressources à portée de sécurité.

Selon Apple, l'extension ne doit pas télécharger elle-même les médias — UNNotificationAttachment contient déjà une URL locale après que le système a terminé le téléchargement. Cependant, si la pièce jointe n'a pas été téléchargée à temps (par exemple, en raison d'une mauvaise connexion), l'extension peut afficher un espace réservé ou un texte alternatif.

Utilisation des ressources à portée de sécurité

Chaque UNNotificationAttachment fournit une URL à portée de sécurité à laquelle l'extension doit accéder via startAccessingSecurityScopedResource() et libérer via stopAccessingSecurityScopedResource(). Ces méthodes doivent être appelées par paires — sinon la ressource ne sera pas libérée et provoquera une fuite de droits d'accès.

swift
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)

Notifications interactives et actions

Notification Content Extension prend en charge des actions interactives personnalisées — des boutons affichés sous le contenu de la notification. Les actions sont enregistrées lors de la création de la catégorie de notification via UNNotificationCategory et peuvent être destructives, textuelles ou d'arrière-plan.

Types d'actions

UNNotificationAction est une action simple avec un titre et un indicateur facultatif de destructivité. UNTextInputNotificationAction est une action avec un champ de saisie de texte, par exemple pour les réponses rapides aux messages. Les deux types prennent en charge l'option UNNotificationActionOptions.authenticationRequired — nécessitant le déverrouillage de l'appareil avant l'exécution.

L'extension reçoit l'action sélectionnée via la méthode didReceive(_:withCompletionHandler:), qui transmet un objet UNNotificationResponse avec l'identifiant de l'action et un texte optionnel. L'extension peut traiter la réponse elle-même ou la transmettre à l'application principale via le conteneur partagé App Group.

swift
let category = UNNotificationCategory(
    identifier: "message",
    actions: [
        UNTextInputNotificationAction(
            identifier: "reply",
            title: "Reply",
            options: .authenticationRequired
        ),
        UNNotificationAction(
            identifier: "mark_read",
            title: "Mark Read",
            options: .foreground
        )
    ],
    intentIdentifiers: []
)

Questions fréquemment posées

Quelle est la différence entre Notification Content Extension et Service Extension ?

Content Extension est responsable de l'affichage visuel de la notification, tandis que Service Extension est responsable de la modification du contenu avant l'affichage. Content Extension fonctionne après Service Extension et ne peut pas modifier le payload de la notification.

Quels langages de programmation sont pris en charge ?

Swift et Objective-C pour UIKit. À partir d'iOS 16, SwiftUI est également pris en charge pour créer des interfaces de notification via NotificationContentView avec des modificateurs de taille et de configuration.

Peut-on utiliser SwiftUI dans Notification Content Extension ?

Oui, à partir d'iOS 16, l'extension peut utiliser SwiftUI via UIHostingController. Cependant, toutes les compétences UIKit — taille, contraintes, ressources à portée de sécurité — sont préservées et appliquées au contenu SwiftUI.

Combien de pièces jointes multimédias peuvent être attachées à une notification ?

4 pièces jointes par notification. Chaque pièce jointe peut peser jusqu'à 50 Mo. Les formats pris en charge incluent les images (JPEG, PNG, HEIF), l'audio (MP3, AAC) et la vidéo (MPEG-4, H.264).

Comment transférer des données de l'extension vers l'application principale ?

App Group — un répertoire partagé sur le disque. UserDefaults avec le suffixe app group fonctionne également. Les appels API directs à l'application principale ne sont pas disponibles en raison de l'isolement des processus.

Résumé

  • Notification Content Extension remplace l'interface de notification standard par une interface personnalisée avec tous les éléments visuels souhaités
  • L'architecture utilise le protocole UNNotificationContentExtension avec les méthodes didReceive pour les mises à jour d'interface
  • UNNotificationAttachment fournit des pièces jointes multimédias avec téléchargement automatique en arrière-plan et accès à portée de sécurité
  • Les actions interactives prennent en charge la saisie de texte et les opérations destructives via UNNotificationAction
  • La hauteur maximale de l'interface est de 320 points sur iPhone, UIScrollView est recommandé pour l'adaptation du contenu
  • L'échange de données avec l'application principale se fait uniquement via App Group et un répertoire partagé sur le disque

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi