> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Livraison confirmée

> La Livraison confirmée suit quand un appareil reçoit une notification push envoyée via OneSignal. Couvre les prérequis, les limitations de plateforme et le dépannage pour iOS, Android, Huawei et Web.

## Vue d'ensemble

La Livraison confirmée suit quand un appareil **reçoit** réellement une notification push envoyée via OneSignal. Lorsque le SDK OneSignal sur l'appareil reçoit un push, il envoie un événement de confirmation à OneSignal contenant l'ID de notification et l'[ID d'abonnement](./subscriptions) de l'appareil. Cela vous permet de voir exactement quels abonnements ont reçu quelles notifications.

Dans votre tableau de bord OneSignal, la Livraison confirmée apparaît dans le [Rapport de message](./push-notification-message-reports) comme **Confirmé** (ou **Reçu**). Pour toutes les métriques de livraison et d'engagement, consultez le [Glossaire des métriques](./analytics-metrics-glossary).

<Frame caption="Flux de livraisons confirmées">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=17ce8f50b8e92e0d368abe42865709c3" alt="Flux de livraisons confirmées" width="800" height="667" data-path="images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png" />
</Frame>

<Note>
  La Livraison confirmée est différente de "Livré." Les services push de plateforme (APNs, FCM, ADM, HMS) indiquent si une notification a été acceptée par le service — pas si l'appareil l'a réellement reçue. La Livraison confirmée est la confirmation côté appareil.
</Note>

***

## Prérequis

* Disponible uniquement sur les **forfaits payants**. [Comparer les forfaits](https://onesignal.com/pricing).
* Complétez la [Configuration du SDK web](./web-sdk-setup) et/ou la [Configuration du SDK mobile](./mobile-sdk-setup).
  * La Livraison confirmée fonctionne uniquement si l'appareil a le SDK OneSignal installé.
  * **Non pris en charge** pour les abonnements créés uniquement via API.

### Limitations spécifiques à la plateforme

**iOS**

* Nécessite à la fois la configuration de l'**extension de service de notification** et du **groupe d'applications**.
* APNs ne conserve qu'**un seul message par application** lorsque hors ligne. Si plusieurs notifications push sont envoyées hors ligne, seule la dernière est livrée.

**Huawei**

* Pris en charge uniquement pour le `data` [type de message Huawei](/reference/push-notification#body-huawei-msg-type).
* Pour le type `message`, Huawei fournit les données de réception uniquement dans leur propre tableau de bord.

**Web**

* Safari ne prend **pas** en charge la Livraison confirmée.

***

## Dépannage de la Livraison confirmée

Si vous ne recevez pas de notifications push du tout, consultez d'abord [Notifications non affichées](./notifications-show-successful-but-are-not-being-shown).

### iOS

La Livraison confirmée sur iOS nécessite deux choses qui fonctionnent ensemble :

1. Une **Notification Service Extension** (NSE) qui exécute le code OneSignal lorsqu'un push arrive
2. Un **App Group** partagé entre votre cible d'application principale et la cible NSE pour qu'elles puissent échanger des données

Si l'une ou l'autre est manquante ou mal configurée, l'appareil reçoit le push mais ne le signale jamais à OneSignal.

**Vérifiez votre configuration iOS**

<Steps>
  <Step title="Confirmez que la cible NSE existe et a le code correct">
    Dans Xcode, vérifiez que vous avez une cible **OneSignalNotificationServiceExtension** listée sous les cibles de votre projet. Si elle n'existe pas, suivez l'[Étape 2 de la Configuration du SDK iOS](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse).

    Ouvrez le fichier `NotificationService.swift` (ou `.m`) de la NSE. Il doit appeler `OneSignalExtension.didReceiveNotificationExtensionRequest` dans `didReceive(_:withContentHandler:)`. Si le fichier contient encore le code de modèle par défaut d'Apple, remplacez-le par le [code NSE OneSignal](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse).
  </Step>

  <Step title="Confirmez que la NSE a le package OneSignalExtension">
    Sélectionnez votre **cible NSE > General > Frameworks and Libraries** (ou **Build Phases > Link Binary With Libraries**). Vérifiez que `OneSignalExtension` est listé. La cible de l'application principale utilise `OneSignalFramework`, mais la cible NSE doit utiliser `OneSignalExtension` — ce sont des packages différents.
  </Step>

  <Step title="Vérifiez que l'App Group est correctement configuré sur les deux cibles">
    Le SDK OneSignal utilise un App Group pour partager des données entre votre application principale et la NSE. Il y a deux façons de le configurer — choisissez celle qui correspond à votre configuration.

    1. Sélectionnez votre **cible d'application principale > Signing & Capabilities > App Groups**.
    2. Confirmez l'App Group.

    Si votre App Group est `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal` — où `YOUR_MAIN_APP_BUNDLE_ID` est l'identifiant de bundle de la cible de votre application principale (disponible sous **General > Identity**), suivez l'onglet App Group par défaut. Sinon, suivez l'onglet App Group personnalisé.

    <Tabs>
      <Tab title="App Group par défaut - group.YOUR_MAIN_APP_BUNDLE_ID.onesignal">
        1. Sélectionnez votre **cible NSE > Signing & Capabilities > App Groups**.
        2. Confirmez que le **même** App Group est listé. S'il manque, ajoutez-le via **+ Capability > App Groups** et sélectionnez le même groupe.

        Une erreur courante est d'utiliser l'identifiant de bundle de la NSE au lieu de celui de l'application principale :

        * **Correct :** `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal`
        * **Incorrect :** `group.YOUR_MAIN_APP_BUNDLE_ID.OneSignalNotificationServiceExtension.onesignal`

        Votre cible d'application principale et votre cible NSE doivent avoir le même identifiant d'App Group.
      </Tab>

      <Tab title="App Group personnalisé">
        Utilisez cette option si l'identifiant de votre App Group ne suit pas le format `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal`.

        1. Sélectionnez votre **cible d'application principale > Signing & Capabilities > App Groups**.
        2. Confirmez que votre App Group personnalisé est listé.
        3. Sélectionnez le `Info.plist` de votre cible d'application principale et ajoutez la clé suivante :

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        Remplacez `group.your-custom-group-name` par le nom réel de votre App Group.

        4. Sélectionnez votre **cible NSE > Signing & Capabilities > App Groups**.
        5. Confirmez que le **même** App Group personnalisé est listé. S'il manque, ajoutez-le via **+ Capability > App Groups** et sélectionnez le même groupe.
        6. Sélectionnez le `Info.plist` de votre cible NSE et ajoutez la clé suivante :

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        Remplacez `group.your-custom-group-name` par le nom réel de votre App Group.

        Votre cible d'application principale et votre cible NSE doivent avoir le même identifiant d'App Group.
      </Tab>
    </Tabs>

    <Warning>
      Si vous utilisez des fichiers `.xcconfig` pour les paramètres de build, vérifiez que l'App Group n'est pas remplacé ou omis dans ces fichiers.
    </Warning>
  </Step>

  <Step title="Confirmez que les cibles de déploiement minimum correspondent">
    Sélectionnez votre **cible NSE > General > Minimum Deployments**. Cette valeur doit correspondre au déploiement minimum de la cible de votre application principale. Une incompatibilité peut empêcher la NSE de s'exécuter sur certaines versions du système d'exploitation.
  </Step>

  <Step title="Décochez &#x22;Copy only when installing&#x22;">
    Sélectionnez votre **cible d'application principale > Build Phases > Embed App Extensions**. Assurez-vous que **"Copy only when installing" est décoché**. Si coché, la NSE n'est pas intégrée lors des builds de développement, donc elle ne s'exécute jamais lors des tests.
  </Step>

  <Step title="Vérifiez les valeurs NSExtension dans Info.plist">
    Sélectionnez votre **cible NSE > onglet Info** et développez la clé `NSExtension`. Confirmez qu'elle contient :

    ```xml theme={null}
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.service</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).NotificationService</string>
    ```

    Si votre NSE est écrite en Objective-C, utilisez `NotificationService` au lieu de `$(PRODUCT_MODULE_NAME).NotificationService`.
  </Step>

  <Step title="Vérifiez que mutable-content est configuré">
    OneSignal définit automatiquement `mutable-content: 1` dans la charge utile push, ce qui indique à iOS d'invoquer la NSE. Si vous envoyez des pushes via l'[API REST](/reference/push-notification), vérifiez que vous ne définissez pas explicitement `mutable_content: false`. Sans `mutable-content`, iOS n'exécute pas la NSE et la Livraison confirmée ne peut pas se déclencher.
  </Step>

  <Step title="Testez que la NSE s'exécute">
    Ajoutez cette ligne temporairement dans `didReceive` avant l'appel OneSignal :

    ```swift theme={null}
    bestAttemptContent.body = "[Modified] " + bestAttemptContent.body
    ```

    Envoyez-vous un push de test. Si le corps de la notification commence par `[Modified]`, la NSE s'exécute correctement. Si non, repassez les étapes précédentes — la NSE n'est pas invoquée. Supprimez cette ligne après les tests.

    Pour le débogage avancé de la NSE avec les journaux de la Xcode Console, consultez [Débogage de l'iOS Notification Service Extension](./service-extensions#debugging-the-ios-notification-service-extension).
  </Step>
</Steps>

### Android

* Si les notifications ne s'affichent pas : consultez [Dépannage des notifications push mobiles](./notifications-show-successful-but-are-not-being-shown).
* Si les notifications s'affichent mais que la Livraison confirmée est manquante : une extension de service Android personnalisée peut la bloquer. Consultez le [guide d'extension de service Android](./service-extensions#android-service-extension).

### Web

* Safari n'est pas pris en charge.
* Pour les autres navigateurs, assurez-vous que la migration vers le **SDK v16** est terminée :
  * Initialisation SDK correcte :
    ```html theme={null}
    <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
    ```
  * Référence Service Worker correcte :
    ```html theme={null}
    importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
    ```

***

## FAQ

### Pourquoi mes chiffres de Livraison confirmée sont-ils faibles ou manquants ?

Les causes les plus courantes sont des problèmes de configuration (surtout sur iOS), des appareils inactifs et des limitations de plateforme.

1. **Mauvaise configuration iOS :** L'extension de service de notification ou l'App Group est manquant ou incorrect. Consultez [Dépannage de la Livraison confirmée sur iOS](#ios) ci-dessus.
2. **Appareils inactifs ou abandonnés :** Les appareils hors ligne ou qui ne sont plus utilisés ne reçoivent pas de pushes ni n'envoient d'événements de Livraison confirmée. Consultez [Comment gérer les appareils inactifs ?](#comment-gérer-les-appareils-inactifs) ci-dessous.
3. **Limitations de plateforme :** Le type `message` de Huawei et Safari ne prennent pas en charge la Livraison confirmée.
4. **Fermeture forcée sur Android :** Certains fabricants d'appareils traitent le balayage de l'application comme une fermeture forcée, ce qui arrête les événements du SDK. Consultez le [Guide de push mobile non affiché](./notifications-show-successful-but-are-not-being-shown).

### Comment gérer les appareils inactifs ?

Les appareils hors ligne ou abandonnés ne reçoivent pas de notifications push ni n'envoient d'événements de Livraison confirmée. C'est courant lorsque les utilisateurs remplacent ou abandonnent des appareils.

Pour réengager les utilisateurs inactifs :

* Utilisez l'**Activité d'audience** pour renvoyer aux utilisateurs qui n'ont pas confirmé la livraison.
* Créez des [Segments](./segmentation) basés sur la **Dernière session** (par ex., inactif pendant 90+ jours).
  * Combinez avec un [Journey de réengagement](./journeys-examples#re-engagement-campaign) pour les reconquérir.
  * Ciblez périodiquement les utilisateurs inactifs pour éliminer les appareils inaccessibles.

Consultez [Quand les statuts d'abonnement push sont-ils mis à jour ?](./subscriptions#when-do-push-subscription-statuses-update) pour plus de détails sur la façon dont OneSignal met à jour le statut des abonnements.

### Pourquoi affiche-t-il Confirmé mais n'apparaît pas sur mon appareil ?

Un événement de Livraison confirmée signifie que l'appareil a reçu la charge utile push. Dans de rares cas, la notification peut ne pas s'afficher.

Causes possibles :

* **Notification manquée :** Envoyez-vous un push de test via [Trouver et définir les abonnements de test](./test-users) pour l'écarter.
* **Mode Focus iOS :** "Ne pas déranger", "Sommeil" ou d'autres [modes Focus](./ios-focus-modes-and-interruption-levels) retardent ou regroupent les notifications. Vous avez peut-être fermé une notification groupée sans la voir.
* **Code d'application supprimant l'affichage :**
  * `event.preventDefault()` dans l'[écouteur du cycle de vie au premier plan](./mobile-sdk-reference#addforegroundlifecyclelistener-push) ou l'[extension de service de notification](./service-extensions) empêche l'affichage de la notification.
  * Les appels à [`removeDeliveredNotifications(withIdentifiers:)`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removedeliverednotifications\(withidentifiers:\)) ou [`removeAllDeliveredNotifications()`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removealldeliverednotifications\(\)) suppriment les notifications après leur arrivée.
* **Paramètres de charge utile push :**
  * Assurez-vous que `priority` est défini sur élevé. Consultez [Priorité push](./push#priority).
  * [`collapse_id`](./push#collapse_id) remplace les anciens pushes par les nouveaux en utilisant le même ID.

***

<Info>
  Besoin d'aide ?

  Discutez avec notre équipe d'assistance ou envoyez un e-mail à `support@onesignal.com`

  Veuillez inclure :

  * Les détails du problème que vous rencontrez et les étapes de reproduction si disponibles
  * Votre OneSignal App ID
  * L'External ID ou le Subscription ID le cas échéant
  * L'URL du message que vous avez testé dans le OneSignal Dashboard le cas échéant
  * Tous les [journaux ou messages d'erreur](/docs/en/capturing-a-debug-log) pertinents

  Nous serons ravis de vous aider !
</Info>
