Passer au contenu principal
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

PlateformePush VoIP supporté ?Fonctionnement
iOSYesUtilise Apple PushKit et un certificat APNs VoIP
AndroidNoUtilise 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.
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.
1

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
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
    }
}
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.
Ressources Apple :
2

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.
L’ID de bundle (par ex. com.yourcompany.appname) se trouve dans Xcode sous l’onglet General de votre cible.
3

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
  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
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.
Certificat VoIP Services affiché dans Trousseau d'accès macOS
Certificat VoIP Services téléchargé dans le tableau de bord OneSignal
4

Enregistrer le jeton VoIP avec OneSignal

Utilisez l’API Create User pour enregistrer le jeton VoIP avec votre application VoIP OneSignal.
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é.
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
    }
  ]
}
'
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.
Pour mettre à jour le jeton ultérieurement, utilisez l’API Update Subscription.
5

Envoyer des notifications VoIP

Utilisez l’API Create Notification 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 --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
6

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:) dans votre application
  3. L’application se réveille même lorsqu’elle est terminée ou en arrière-plan

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 d’Android. Ressources utiles :
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.

FAQ

Les livraisons confirmées fonctionnent-elles avec VoIP ?

Non. Les Livraisons Confirmées 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 :
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 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 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

API Create message

Envoyez des notifications push par programme en utilisant l’API REST.

Livraisons confirmées

Suivez la confirmation de livraison des notifications push sur les plateformes prises en charge.

Extensions de service

Personnalisez la gestion des notifications avec les Extensions de Service de Notification.

API Create User

Enregistrez des utilisateurs et des abonnements avec l’API OneSignal.