> ## 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.

# Notifications push VoIP

> Envoyez des notifications push VoIP sur iOS avec OneSignal via l'enregistrement de jetons PushKit et un certificat VoIP, ainsi que des alternatives Android pour un comportement de type appel.

Les notifications push VoIP permettent à votre application de recevoir des alertes d'appel entrant même lorsqu'elle est en arrière-plan ou terminée. Apple gère les pushs VoIP différemment des notifications push standard — ils utilisent un type de certificat distinct, un jeton distinct (via PushKit) et des règles de livraison différentes.

OneSignal prend en charge l'**envoi** de pushs VoIP, mais le SDK OneSignal ne gère **pas** l'enregistrement des jetons VoIP. Vous êtes responsable de :

* L'enregistrement des jetons VoIP dans votre application avec Apple PushKit
* La création d'une application OneSignal dédiée avec un certificat VoIP Services
* L'enregistrement des jetons et l'envoi des pushs via l'API REST OneSignal

### Différences entre plateformes

| Plateforme  | Push VoIP supporté ? | Fonctionnement                                                               |
| ----------- | -------------------- | ---------------------------------------------------------------------------- |
| **iOS**     | Yes                  | Utilise Apple PushKit et un certificat APNs VoIP                             |
| **Android** | No                   | Utilise des pushs de données uniquement pour simuler un comportement d'appel |

Si vous créez une application d'appel multiplateforme, vous utiliserez des approches différentes par plateforme.

***

## iOS : envoyer des notifications push VoIP

Sur iOS, les notifications VoIP utilisent Apple PushKit et suivent des règles de livraison spéciales qui diffèrent des notifications push standard. Parce qu'Apple traite les pushs VoIP différemment, OneSignal nécessite une configuration d'application distincte pour VoIP.

<Warning>
  **Avant de commencer** — voici les erreurs de configuration VoIP les plus courantes :

  1. **Ne pas créer d'application OneSignal distincte pour VoIP.** Apple exige un type de certificat différent pour VoIP, OneSignal a donc besoin d'une application dédiée pour envoyer des pushs VoIP. Votre application push existante ne peut pas être utilisée pour les deux.
  2. **Télécharger le mauvais certificat.** Vous avez besoin d'un **certificat VoIP Services (.p12)**, pas de votre certificat push APNs standard. Utiliser le mauvais entraîne des échecs de livraison silencieux.
  3. **Oublier `test_type` en sandbox.** Lors des tests avec un build de développement, vous devez inclure `"test_type": 1` lors de l'enregistrement du jeton. Sans cela, l'appel API réussit mais les pushs n'arrivent jamais.
</Warning>

<Steps>
  <Step title="Enregistrer un jeton VoIP avec PushKit">
    Utilisez le framework PushKit d'Apple pour vous enregistrer aux notifications VoIP et recevoir un jeton VoIP.

    * Implémentez PushKit dans votre application
    * Stockez et rafraîchissez le jeton VoIP lorsqu'Apple le fait tourner
    * Suivez de près les politiques VoIP d'Apple

    <Accordion title="Exemple : implémentation du délégué PushKit">
      ```swift theme={null}
      import PushKit

      class AppDelegate: NSObject, PKPushRegistryDelegate {
          func registerForVoIPPushes() {
              let registry = PKPushRegistry(queue: .main)
              registry.delegate = self
              registry.desiredPushTypes = [.voIP]
          }

          func pushRegistry(_ registry: PKPushRegistry, didUpdatePushCredentials credentials: PKPushCredentials, for type: PKPushType) {
              let token = credentials.token.map { String(format: "%02x", $0) }.joined()
              // Transmettez ce jeton à OneSignal — voir l'étape 4
          }
      }
      ```

      <Note>Il s'agit de code Apple PushKit standard. OneSignal ne fournit pas de SDK PushKit — vous enregistrez le jeton vous-même et le transmettez à OneSignal à l'étape 4.</Note>
    </Accordion>

    Ressources Apple :

    * [Documentation PushKit](https://developer.apple.com/documentation/pushkit)
    * [Répondre aux pushs VoIP](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit)
    * [Meilleures pratiques VoIP d'Apple](https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html)
  </Step>

  <Step title="Créer une application OneSignal distincte pour VoIP">
    Les pushs VoIP Apple nécessitent un type de certificat différent des notifications push standard. Une seule application OneSignal ne peut utiliser qu'un seul type de certificat, vous devez donc créer **deux applications OneSignal distinctes** :

    * **Application Push Principale** : Utilise votre certificat APNs pour les notifications push standard
    * **Application Push VoIP** : Utilise un certificat VoIP Services pour les notifications VoIP uniquement

    Les deux applications doivent utiliser le même ID de bundle iOS et être associées à la même application iOS native. Vous n'avez **pas** besoin d'initialiser le SDK OneSignal deux fois — l'application VoIP est uniquement utilisée côté serveur pour envoyer des pushs VoIP via l'API.

    <Note>L'ID de bundle (par ex. `com.yourcompany.appname`) se trouve dans Xcode sous l'onglet **General** de votre cible.</Note>
  </Step>

  <Step title="Télécharger un certificat VoIP Services">
    Dans votre application VoIP OneSignal, téléchargez un **certificat VoIP Services (.p12)**. Il s'agit d'un type de certificat différent du certificat push APNs standard que vous utilisez pour les notifications ordinaires.

    Pour en créer un :

    1. Accédez au [Portail Développeur Apple](https://developer.apple.com/account/resources/certificates/add)
    2. Sélectionnez **VoIP Services Certificate**
    3. Suivez les instructions pour générer et télécharger le certificat
    4. Ouvrez-le dans Trousseau d'accès et exportez-le en fichier `.p12`
    5. Téléchargez le fichier `.p12` dans les paramètres iOS de votre application VoIP OneSignal

    <Warning>
      Ne téléchargez **pas** votre certificat push APNs standard dans l'application VoIP. Si vous utilisez le mauvais type de certificat, l'API acceptera votre requête push mais Apple la rejettera et la notification n'arrivera jamais.
    </Warning>

    <Frame caption="Certificat VoIP dans Trousseau d'accès">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=5d19f1262fdf67d5185ed8d8b4743493" alt="Certificat VoIP Services affiché dans Trousseau d'accès macOS" width="1868" height="1624" data-path="images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png" />
    </Frame>

    <Frame caption="Certificat VoIP téléchargé dans le tableau de bord OneSignal">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=6ee92a10fc3473c644880fa7517eb46b" alt="Certificat VoIP Services téléchargé dans le tableau de bord OneSignal" width="466" height="130" data-path="images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png" />
    </Frame>
  </Step>

  <Step title="Enregistrer le jeton VoIP avec OneSignal">
    Utilisez l'API [Create User](/reference/create-user) pour enregistrer le jeton VoIP avec votre application VoIP OneSignal.

    <Warning>
      **Les builds sandbox/développement nécessitent `"test_type": 1`.** Si vous omettez ce champ, l'appel API réussit et ne renvoie aucune erreur, mais Apple traite le jeton comme production et rejette silencieusement chaque push qui lui est envoyé.
    </Warning>

    ```curl theme={null}
    curl --request POST \
         --url https://api.onesignal.com/apps/YOUR_VOIP_APP_ID/users \
         --header 'accept: application/json' \
         --header 'content-type: application/json' \
         --data '
    {
      "subscriptions": [
        {
          "type": "iOSPush",
          "token": "YOUR_VOIP_TOKEN",
          "test_type": 1
        }
      ]
    }
    '
    ```

    <Note>Un jeton VoIP valide est une chaîne hexadécimale minuscule de 64 caractères (par ex. `a1b2c3d4e5f6...`). PushKit ne fonctionne pas sur le simulateur iOS — vous devez utiliser un appareil réel pour obtenir un jeton valide.</Note>

    Pour mettre à jour le jeton ultérieurement, utilisez l'API [Update Subscription](/reference/update-subscription).
  </Step>

  <Step title="Envoyer des notifications VoIP">
    Utilisez l'API [Create Notification](/reference/create-message) avec les paramètres suivants :

    * `"apns_push_type_override": "voip"` — indique à Apple qu'il s'agit d'un push VoIP
    * `app_id` — l'ID de votre application VoIP
    * `include_subscription_ids` — l'ID d'abonnement VoIP que vous avez enregistré
    * `contents` ou `content_available` est requis

    ```curl theme={null}
    curl --include \
         --request POST \
         --header "Content-Type: application/json; charset=utf-8" \
         --header "Authorization: key YOUR_REST_API_KEY" \
         --data-binary '{
      "app_id": "YOUR_VOIP_APP_ID",
      "content_available": true,
      "data": {
        "your_custom_data": "your_custom_value"
      },
      "apns_push_type_override": "voip",
      "include_subscription_ids": ["YOUR_VOIP_SUBSCRIPTION_ID"]
    }' \
    https://api.onesignal.com/notifications
    ```
  </Step>

  <Step title="Vérifier votre configuration VoIP">
    Votre intégration VoIP iOS fonctionne correctement si :

    1. Le jeton VoIP apparaît comme un abonnement push iOS dans votre **application VoIP**
    2. Un push VoIP déclenche [`pushRegistry(_:didReceiveIncomingPushWith:for:completion:)`](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit) dans votre application
    3. L'application se réveille même lorsqu'elle est terminée ou en arrière-plan
  </Step>
</Steps>

***

## Android : simuler un comportement de type VoIP

Android ne prend pas en charge les notifications push VoIP. Il n'existe pas d'équivalent à Apple PushKit.

Au lieu de cela, les applications d'appel Android simulent le comportement VoIP en utilisant :

* Des notifications push de données uniquement
* Des services de premier plan
* Une interface utilisateur d'appel personnalisée

Vous pouvez utiliser la prise en charge push Android normale de OneSignal combinée avec des API Android natives pour y parvenir.

**Approche recommandée :**

* Envoyer des notifications de données uniquement
* Les gérer dans votre application pour :
  * Démarrer un service de premier plan
  * Lancer une activité d'interface d'appel
  * Afficher une notification d'appel entrant personnalisée

Si vous souhaitez intercepter et contrôler entièrement le rendu des notifications, utilisez l'[Extension de Service de Notification](./service-extensions#notification-service-extension) d'Android.

**Ressources utiles :**

* [Guide d'application d'appel Android](https://developer.android.com/guide/topics/connectivity/telecom/selfManaged)
* [Exemple d'interface d'appel entrant](https://medium.com/@dcostalloyd90/show-incoming-voip-call-notification-and-open-activity-for-android-os-10-5aada2d4c1e4)

<Info>La configuration Android **n'est pas spécifique à OneSignal**. OneSignal ne fait que livrer la charge utile push ; votre application gère le comportement d'appel.</Info>

***

## FAQ

### Les livraisons confirmées fonctionnent-elles avec VoIP ?

Non. Les [Livraisons Confirmées](./confirmed-delivery) ne sont **pas suivies** pour les pushs VoIP. Les livraisons confirmées reposent sur l'Extension de Service de Notification, qui ne se déclenche pas pour les notifications VoIP.

Au lieu de cela, suivez la réception via l'événement PushKit iOS natif :

```swift theme={null}
pushRegistry(_:didReceiveIncomingPushWith:for:completion:)
```

Cet événement fait partie de votre cible d'application principale et ne nécessite pas d'extension séparée. Consultez la [documentation VoIP d'Apple](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit#3377587) pour plus de détails.

### Puis-je envoyer des notifications VoIP depuis le tableau de bord OneSignal ?

Non. Les notifications VoIP doivent être envoyées via l'API [Create Notification](/reference/create-message) avec `"apns_push_type_override": "voip"`. Le tableau de bord ne prend pas en charge ce paramètre.

### Pourquoi mon push VoIP échoue-t-il silencieusement ?

Les pushs VoIP peuvent échouer sans aucune erreur de l'API OneSignal. Parcourez cette liste de vérification :

1. **Utilisez-vous un build sandbox/développement ?** Vous devez inclure `"test_type": 1` lors de l'enregistrement du jeton via l'API Create User. Sans cela, le jeton s'enregistre comme production, Apple rejette le push et il échoue silencieusement.
2. **Avez-vous téléchargé le bon certificat ?** L'application VoIP OneSignal doit utiliser un **certificat VoIP Services (.p12)**, pas un certificat push APNs standard. Les deux se ressemblent dans Trousseau d'accès — vérifiez que le nom du certificat commence par "VoIP Services".
3. **Envoyez-vous vers la bonne application OneSignal ?** Le `app_id` dans votre requête d'envoi doit être votre **application VoIP**, pas votre application push principale. La `REST API Key` doit également provenir de l'application VoIP.
4. **Le jeton VoIP est-il valide ?** Les jetons expirent lors de la réinstallation de l'application ou de la restauration de l'appareil. Vérifiez que le jeton est une chaîne hexadécimale minuscule de 64 caractères et qu'il a été enregistré récemment.
5. **Votre application appelle-t-elle `reportNewIncomingVoIPPushPayload` ?** Depuis iOS 13, Apple **termine** les applications qui reçoivent un push VoIP mais ne signalent pas un appel à CallKit. Il s'agit d'une exigence Apple, pas d'une limitation OneSignal.

***

## Pages associées

<Columns cols={2}>
  <Card title="API Create message" icon="code" href="/reference/create-message">
    Envoyez des notifications push par programme en utilisant l'API REST.
  </Card>

  <Card title="Livraisons confirmées" icon="circle-check" href="./confirmed-delivery">
    Suivez la confirmation de livraison des notifications push sur les plateformes prises en charge.
  </Card>

  <Card title="Extensions de service" icon="puzzle-piece" href="./service-extensions">
    Personnalisez la gestion des notifications avec les Extensions de Service de Notification.
  </Card>

  <Card title="API Create User" icon="user-plus" href="/reference/create-user">
    Enregistrez des utilisateurs et des abonnements avec l'API OneSignal.
  </Card>
</Columns>
