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

# Notificações push VoIP

> Envie notificações push VoIP no iOS usando o OneSignal com registro de token PushKit e um certificado VoIP, além de alternativas para Android para comportamento estilo chamada.

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

| Plataforma  | Push VoIP suportado? | Como funciona                                                    |
| ----------- | -------------------- | ---------------------------------------------------------------- |
| **iOS**     | Yes                  | Usa Apple PushKit e um certificado APNs VoIP                     |
| **Android** | No                   | Usa 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.

<Warning>
  **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.
</Warning>

<Steps>
  <Step title="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

    <Accordion title="Exemplo: implementação do delegate 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()
              // Pass this token to OneSignal — see Step 4
          }
      }
      ```

      <Note>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.</Note>
    </Accordion>

    Recursos da Apple:

    * [Documentação do PushKit](https://developer.apple.com/documentation/pushkit)
    * [Respondendo a pushs VoIP](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit)
    * [Melhores práticas de VoIP da Apple](https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html)
  </Step>

  <Step title="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.

    <Note>O bundle ID (ex.: `com.suaempresa.nomedoapp`) é encontrado no Xcode na aba **General** do seu target.</Note>
  </Step>

  <Step title="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](https://developer.apple.com/account/resources/certificates/add)
    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

    <Warning>
      **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á.
    </Warning>

    <Frame caption="Certificado VoIP no Keychain Access">
      <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="Certificado VoIP Services exibido no Keychain Access do macOS" width="1868" height="1624" data-path="images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png" />
    </Frame>

    <Frame caption="Certificado VoIP carregado no painel do 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="Certificado VoIP Services carregado no painel do 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="Registrar o token VoIP com o OneSignal">
    Use a API [Create User](/reference/create-user) para registrar o token VoIP com seu aplicativo VoIP do OneSignal.

    <Warning>
      **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.
    </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>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.</Note>

    Para atualizar o token posteriormente, use a API [Update Subscription](/reference/update-subscription).
  </Step>

  <Step title="Enviar notificações VoIP">
    Use a API [Create Notification](/reference/create-message) 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 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="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:)`](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit) em seu aplicativo
    3. O aplicativo desperta mesmo quando está encerrado ou em segundo plano
  </Step>
</Steps>

***

## 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](./service-extensions#notification-service-extension) do Android.

**Recursos úteis:**

* [Guia de aplicativo de chamadas do Android](https://developer.android.com/guide/topics/connectivity/telecom/selfManaged)
* [Exemplo de interface de chamada recebida](https://medium.com/@dcostalloyd90/show-incoming-voip-call-notification-and-open-activity-for-android-os-10-5aada2d4c1e4)

<Info>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.</Info>

***

## Perguntas frequentes

### As entregas confirmadas funcionam com VoIP?

Não. As [Entregas Confirmadas](./confirmed-delivery) **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:

```swift theme={null}
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](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit#3377587) 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](/reference/create-message) 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

<Columns cols={2}>
  <Card title="API Create message" icon="code" href="/reference/create-message">
    Envie notificações push programaticamente usando a API REST.
  </Card>

  <Card title="Entregas confirmadas" icon="circle-check" href="./confirmed-delivery">
    Rastreie a confirmação de entrega de notificações push em plataformas compatíveis.
  </Card>

  <Card title="Extensões de serviço" icon="puzzle-piece" href="./service-extensions">
    Personalize o tratamento de notificações com Notification Service Extensions.
  </Card>

  <Card title="API Create User" icon="user-plus" href="/reference/create-user">
    Registre usuários e assinaturas com a API do OneSignal.
  </Card>
</Columns>
