Saltar al contenido principal
Las notificaciones push VoIP permiten que tu aplicación reciba alertas de llamadas entrantes incluso cuando la app está en segundo plano o finalizada. Apple maneja los pushes VoIP de manera diferente a las notificaciones push estándar: usan un tipo de certificado separado, un token separado (a través de PushKit) y reglas de entrega distintas. OneSignal admite el envío de pushes VoIP, pero el SDK de OneSignal no gestiona el registro de tokens VoIP. Tú eres responsable de:
  • Registrar tokens VoIP en tu app usando Apple PushKit
  • Crear una app de OneSignal dedicada con un Certificado de Servicios VoIP
  • Registrar tokens y enviar pushes a través de la API REST de OneSignal

Diferencias de plataforma

Plataforma¿Push VoIP admitido?Cómo funciona
iOSYesUsa Apple PushKit y un certificado APNs VoIP
AndroidNoUsa pushes de solo datos para simular comportamiento de llamada
Si estás desarrollando una app de llamadas multiplataforma, usarás enfoques diferentes por plataforma.

iOS: enviar notificaciones push VoIP

En iOS, las notificaciones VoIP usan Apple PushKit y siguen reglas de entrega especiales que difieren de las notificaciones push estándar. Dado que Apple trata los pushes VoIP de manera diferente, OneSignal requiere una configuración de app separada para VoIP.
Antes de comenzar — estos son los errores más comunes al configurar VoIP:
  1. No crear una app de OneSignal separada para VoIP. Apple requiere un tipo de certificado diferente para VoIP, por lo que OneSignal necesita una app dedicada para enviar pushes VoIP. Tu app de push existente no puede usarse para ambos.
  2. Subir el certificado incorrecto. Necesitas un Certificado de Servicios VoIP (.p12), no tu certificado push APNs estándar. Usar el incorrecto provoca fallos de entrega silenciosos.
  3. Olvidar test_type en sandbox. Al probar con una compilación de desarrollo, debes incluir "test_type": 1 al registrar el token. Sin él, la llamada a la API tiene éxito pero los pushes nunca llegan.
1

Registrar un token VoIP usando PushKit

Usa el framework PushKit de Apple para registrarte en notificaciones VoIP y recibir un token VoIP.
  • Implementa PushKit en tu app
  • Almacena y actualiza el token VoIP a medida que Apple lo rota
  • Sigue de cerca las políticas VoIP de 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()
        // Pass this token to OneSignal — see Step 4
    }
}
Este es código estándar de Apple PushKit. OneSignal no proporciona un SDK de PushKit — tú registras el token por tu cuenta y lo pasas a OneSignal en el Paso 4.
Recursos de Apple:
2

Crear una app de OneSignal separada para VoIP

Los pushes VoIP de Apple requieren un tipo de certificado diferente al de las notificaciones push estándar. Una sola app de OneSignal solo puede usar un tipo de certificado, por lo que debes crear dos apps de OneSignal separadas:
  • App Push Principal: Usa tu certificado APNs para notificaciones push estándar
  • App Push VoIP: Usa un Certificado de Servicios VoIP exclusivamente para notificaciones VoIP
Ambas apps deben usar el mismo bundle ID de iOS y estar asociadas con la misma app iOS nativa. No necesitas inicializar el SDK de OneSignal dos veces — la app VoIP solo se usa del lado del servidor para enviar pushes VoIP a través de la API.
El bundle ID (por ejemplo, com.yourcompany.appname) se encuentra en Xcode, en la pestaña General de tu target.
3

Subir un Certificado de Servicios VoIP

En tu app VoIP de OneSignal, sube un Certificado de Servicios VoIP (.p12). Este es un tipo de certificado diferente al certificado push APNs estándar que usas para las notificaciones regulares.Para crearlo:
  1. Ve al Portal de Desarrolladores de Apple
  2. Selecciona VoIP Services Certificate
  3. Sigue los pasos para generar y descargar el certificado
  4. Ábrelo en Acceso a Llaveros y expórtalo como archivo .p12
  5. Sube el archivo .p12 a la configuración de iOS de tu app VoIP en OneSignal
No subas tu certificado push APNs estándar a la app VoIP. Si usas el tipo de certificado incorrecto, la API aceptará tu solicitud de push pero Apple la rechazará y la notificación nunca llegará.
Certificado de Servicios VoIP mostrado en Acceso a Llaveros de macOS
Certificado de Servicios VoIP subido en el panel de OneSignal
4

Registrar el token VoIP con OneSignal

Usa la API Create User para registrar el token VoIP con tu app VoIP de OneSignal.
Las compilaciones sandbox/desarrollo requieren "test_type": 1. Si omites este campo, la llamada a la API tiene éxito y no devuelve ningún error, pero Apple trata el token como producción y rechaza silenciosamente cada push enviado a él.
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 token VoIP válido es una cadena hexadecimal en minúsculas de 64 caracteres (por ejemplo, a1b2c3d4e5f6...). PushKit no funciona en el Simulador de iOS — debes usar un dispositivo real para obtener un token válido.
Para actualizar el token más tarde, usa la API Update Subscription.
5

Enviar notificaciones VoIP

Usa la API Create Notification con los siguientes parámetros:
  • "apns_push_type_override": "voip" — indica a Apple que este es un push VoIP
  • app_id — el ID de tu app VoIP
  • include_subscription_ids — el ID de suscripción VoIP que registraste
  • Se requiere contents o content_available
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

Verificar tu configuración VoIP

Tu integración VoIP de iOS funciona correctamente si:
  1. El token VoIP aparece como una suscripción push de iOS en tu app VoIP
  2. Un push VoIP activa pushRegistry(_:didReceiveIncomingPushWith:for:completion:) en tu app
  3. La app se activa incluso cuando está finalizada o en segundo plano

Android: simular comportamiento tipo VoIP

Android no admite notificaciones push VoIP. No existe un equivalente a Apple PushKit. En su lugar, las apps de llamadas en Android simulan el comportamiento VoIP usando:
  • Notificaciones push de solo datos
  • Servicios en primer plano
  • Interfaz de usuario de llamada personalizada
Puedes usar el soporte push normal de Android de OneSignal combinado con las APIs nativas de Android para lograrlo. Enfoque recomendado:
  • Enviar notificaciones de solo datos
  • Manejarlas en tu app para:
    • Iniciar un servicio en primer plano
    • Lanzar una actividad de interfaz de llamada
    • Mostrar una notificación de llamada entrante personalizada
Si deseas interceptar y controlar completamente el renderizado de notificaciones, usa la Extensión de Servicio de Notificación de Android. Recursos útiles:
La configuración de Android no es específica de OneSignal. OneSignal solo entrega la carga útil del push; tu app gestiona el comportamiento de llamada.

Preguntas frecuentes

¿Las entregas confirmadas funcionan con VoIP?

No. Las Entregas Confirmadas no se rastrean para pushes VoIP. Las Entregas Confirmadas dependen de la Extensión de Servicio de Notificación, que no se activa para las notificaciones VoIP. En su lugar, rastrea la recepción a través del evento nativo PushKit de iOS:
pushRegistry(_:didReceiveIncomingPushWith:for:completion:)
Este evento es parte del target de tu app principal y no requiere una extensión separada. Consulta la documentación VoIP de Apple para más detalles.

¿Puedo enviar notificaciones VoIP desde el panel de OneSignal?

No. Las notificaciones VoIP deben enviarse a través de la API Create Notification con "apns_push_type_override": "voip". El panel no admite este parámetro.

¿Por qué mi push VoIP falla silenciosamente?

Los pushes VoIP pueden fallar sin ningún error por parte de la API de OneSignal. Revisa esta lista de verificación:
  1. ¿Estás usando una compilación sandbox/desarrollo? Debes incluir "test_type": 1 al registrar el token a través de la API Create User. Sin él, el token se registra como producción, Apple rechaza el push y falla silenciosamente.
  2. ¿Subiste el certificado correcto? La app VoIP de OneSignal debe usar un Certificado de Servicios VoIP (.p12), no un certificado push APNs estándar. Ambos se ven similares en Acceso a Llaveros — verifica que el nombre del certificado comience con “VoIP Services”.
  3. ¿Estás enviando a la app de OneSignal correcta? El app_id en tu solicitud de envío debe ser el de tu app VoIP, no el de tu app push principal. La REST API Key también debe provenir de la app VoIP.
  4. ¿El token VoIP es válido? Los tokens expiran cuando la app se reinstala o el dispositivo se restaura. Verifica que el token sea una cadena hexadecimal en minúsculas de 64 caracteres y que haya sido registrado recientemente.
  5. ¿Tu app llama a reportNewIncomingVoIPPushPayload? A partir de iOS 13, Apple finaliza las apps que reciben un push VoIP pero no reportan una llamada a CallKit. Este es un requisito de Apple, no una limitación de OneSignal.

Páginas relacionadas

API de creación de mensajes

Envía notificaciones push mediante programación usando la API REST.

Entregas confirmadas

Rastrea la confirmación de entrega de notificaciones push en plataformas compatibles.

Extensiones de servicio

Personaliza el manejo de notificaciones con Extensiones de Servicio de Notificación.

API de creación de usuarios

Registra usuarios y suscripciones con la API de OneSignal.