Pular para o conteúdo principal
As notificações push VoIP permitem que seu aplicativo receba alertas de chamadas recebidas mesmo quando o aplicativo está em segundo plano ou encerrado. A Apple trata os pushs VoIP de forma diferente das notificações push padrão — eles usam um tipo de certificado separado, um token separado (via PushKit) e regras de entrega diferentes. O OneSignal oferece suporte ao envio de pushs VoIP, mas o SDK do OneSignal não gerencia o registro de tokens VoIP. Você é responsável por:
  • Registrar tokens VoIP em seu aplicativo usando o Apple PushKit
  • Criar um aplicativo OneSignal dedicado com um certificado VoIP Services
  • Registrar tokens e enviar pushs pela API REST do OneSignal

Diferenças de plataforma

PlataformaPush VoIP suportado?Como funciona
iOSYesUsa Apple PushKit e um certificado APNs VoIP
AndroidNoUsa pushs somente de dados para simular comportamento de chamada
Se você está criando um aplicativo de chamadas multiplataforma, usará abordagens diferentes por plataforma.

iOS: enviar notificações push VoIP

No iOS, as notificações VoIP usam o Apple PushKit e seguem regras especiais de entrega que diferem das notificações push padrão. Como a Apple trata os pushs VoIP de forma diferente, o OneSignal requer uma configuração de aplicativo separada para VoIP.
Antes de começar — estes são os erros mais comuns na configuração do VoIP:
  1. Não criar um aplicativo OneSignal separado para VoIP. A Apple exige um tipo de certificado diferente para VoIP, portanto o OneSignal precisa de um aplicativo dedicado para enviar pushs VoIP. Seu aplicativo de push existente não pode ser usado para ambos.
  2. Fazer upload do certificado errado. Você precisa de um Certificado VoIP Services (.p12), não do seu certificado APNs push padrão. Usar o errado causa falhas silenciosas de entrega.
  3. Esquecer test_type no sandbox. Ao testar com uma compilação de desenvolvimento, você deve incluir "test_type": 1 ao registrar o token. Sem isso, a chamada da API tem sucesso, mas os pushs nunca chegam.
1

Registrar um token VoIP usando PushKit

Use o framework PushKit da Apple para se registrar para notificações VoIP e receber um token VoIP.
  • Implemente o PushKit em seu aplicativo
  • Armazene e atualize o token VoIP conforme a Apple o alterna
  • Siga atentamente as políticas de VoIP da 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 é o código padrão do Apple PushKit. O OneSignal não fornece um SDK para PushKit — você registra o token você mesmo e o passa para o OneSignal na Etapa 4.
Recursos da Apple:
2

Criar um aplicativo OneSignal separado para VoIP

Os pushs VoIP do iOS requerem um tipo de certificado diferente das notificações push padrão. Um único aplicativo OneSignal pode usar apenas um tipo de certificado, portanto você deve criar dois aplicativos OneSignal separados:
  • Aplicativo Push Principal: Usa seu certificado APNs para notificações push padrão
  • Aplicativo Push VoIP: Usa um certificado VoIP Services para notificações exclusivamente VoIP
Ambos os aplicativos devem usar o mesmo bundle ID do iOS e estar associados ao mesmo aplicativo iOS nativo. Você não precisa inicializar o SDK do OneSignal duas vezes — o aplicativo VoIP é usado apenas no lado do servidor para enviar pushs VoIP via API.
O bundle ID (ex.: com.suaempresa.nomedoapp) é encontrado no Xcode na aba General do seu target.
3

Fazer upload de um certificado VoIP Services

No seu aplicativo VoIP do OneSignal, faça upload de um Certificado VoIP Services (.p12). Este é um tipo de certificado diferente do certificado APNs push padrão usado para notificações regulares.Para criar um:
  1. Acesse o Portal do Desenvolvedor Apple
  2. Selecione VoIP Services Certificate
  3. Siga as instruções para gerar e baixar o certificado
  4. Abra-o no Keychain Access e exporte-o como arquivo .p12
  5. Faça upload do arquivo .p12 nas configurações de iOS do seu aplicativo VoIP do OneSignal
Não faça upload do seu certificado APNs push padrão no aplicativo VoIP. Se você usar o tipo de certificado errado, a API aceitará sua solicitação de push, mas a Apple a rejeitará e a notificação nunca chegará.
Certificado VoIP Services exibido no Keychain Access do macOS
Certificado VoIP Services carregado no painel do OneSignal
4

Registrar o token VoIP com o OneSignal

Use a API Create User para registrar o token VoIP com seu aplicativo VoIP do OneSignal.
Compilações sandbox/desenvolvimento requerem "test_type": 1. Se você omitir este campo, a chamada da API tem sucesso e não retorna erro, mas a Apple trata o token como produção e rejeita silenciosamente todos os pushs enviados para ele.
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
    }
  ]
}
'
Um token VoIP válido é uma string hexadecimal minúscula de 64 caracteres (ex.: a1b2c3d4e5f6...). O PushKit não funciona no Simulador do iOS — você deve usar um dispositivo real para obter um token válido.
Para atualizar o token posteriormente, use a API Update Subscription.
5

Enviar notificações VoIP

Use a API Create Notification com os seguintes parâmetros:
  • "apns_push_type_override": "voip" — informa à Apple que este é um push VoIP
  • app_id — o ID do seu aplicativo VoIP
  • include_subscription_ids — o ID de assinatura VoIP que você registrou
  • contents ou content_available é obrigatório
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 sua configuração VoIP

Sua integração VoIP do iOS está funcionando corretamente se:
  1. O token VoIP aparece como uma assinatura de push do iOS no seu aplicativo VoIP
  2. Um push VoIP aciona pushRegistry(_:didReceiveIncomingPushWith:for:completion:) em seu aplicativo
  3. O aplicativo desperta mesmo quando está encerrado ou em segundo plano

Android: simular comportamento estilo VoIP

O Android não oferece suporte a notificações push VoIP. Não há equivalente ao Apple PushKit. Em vez disso, os aplicativos de chamadas do Android simulam o comportamento VoIP usando:
  • Notificações push somente de dados
  • Serviços em primeiro plano
  • Interface de usuário personalizada estilo chamada
Você pode usar o suporte normal de push Android do OneSignal combinado com APIs nativas do Android para conseguir isso. Abordagem recomendada:
  • Enviar notificações somente de dados
  • Tratá-las em seu aplicativo para:
    • Iniciar um serviço em primeiro plano
    • Iniciar uma atividade de interface de chamada
    • Exibir uma notificação personalizada de chamada recebida
Se você deseja interceptar e controlar totalmente a renderização de notificações, use a Notification Service Extension do Android. Recursos úteis:
A configuração do Android não é específica do OneSignal. O OneSignal apenas entrega a carga do push; seu aplicativo lida com o comportamento da chamada.

Perguntas frequentes

As entregas confirmadas funcionam com VoIP?

Não. As Entregas Confirmadas não são rastreadas para pushs VoIP. As Entregas Confirmadas dependem da Notification Service Extension, que não é acionada para notificações VoIP. Em vez disso, rastreie o recebimento por meio do evento nativo PushKit do iOS:
pushRegistry(_:didReceiveIncomingPushWith:for:completion:)
Este evento faz parte do target do seu aplicativo principal e não requer uma extensão separada. Consulte a documentação VoIP da Apple para mais detalhes.

Posso enviar notificações VoIP pelo painel do OneSignal?

Não. As notificações VoIP devem ser enviadas pela API Create Notification com "apns_push_type_override": "voip". O painel não oferece suporte a este parâmetro.

Por que meu push VoIP está falhando silenciosamente?

Os pushs VoIP podem falhar sem nenhum erro da API do OneSignal. Passe por esta lista de verificação:
  1. Você está usando uma compilação sandbox/desenvolvimento? Você deve incluir "test_type": 1 ao registrar o token pela API Create User. Sem isso, o token é registrado como produção, a Apple rejeita o push e ele falha silenciosamente.
  2. Você fez upload do certificado correto? O aplicativo VoIP do OneSignal deve usar um Certificado VoIP Services (.p12), não um certificado APNs push padrão. Ambos parecem semelhantes no Keychain Access — verifique se o nome do certificado começa com “VoIP Services”.
  3. Você está enviando para o aplicativo OneSignal correto? O app_id na sua solicitação de envio deve ser o seu aplicativo VoIP, não o seu aplicativo de push principal. A REST API Key também deve vir do aplicativo VoIP.
  4. O token VoIP é válido? Os tokens expiram quando o aplicativo é reinstalado ou o dispositivo é restaurado. Verifique se o token é uma string hexadecimal minúscula de 64 caracteres e foi registrado recentemente.
  5. Seu aplicativo chama reportNewIncomingVoIPPushPayload? A partir do iOS 13, a Apple encerra aplicativos que recebem um push VoIP, mas não reportam uma chamada ao CallKit. Este é um requisito da Apple, não uma limitação do OneSignal.

Páginas relacionadas

API Create message

Envie notificações push programaticamente usando a API REST.

Entregas confirmadas

Rastreie a confirmação de entrega de notificações push em plataformas compatíveis.

Extensões de serviço

Personalize o tratamento de notificações com Notification Service Extensions.

API Create User

Registre usuários e assinaturas com a API do OneSignal.