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

# Entrega confirmada

> A Entrega confirmada rastreia quando um dispositivo recebe uma notificação push enviada através do OneSignal. Cobre requisitos, limitações de plataforma e solução de problemas para iOS, Android, Huawei e Web.

## Visão geral

A Entrega confirmada rastreia quando um dispositivo realmente **recebe** uma notificação push enviada através do OneSignal. Quando o SDK do OneSignal no dispositivo recebe um push, ele envia um evento de confirmação de volta ao OneSignal contendo o ID da notificação e o [ID de assinatura](./subscriptions) do dispositivo. Isso permite que você veja exatamente quais assinaturas receberam quais notificações.

No seu painel do OneSignal, a Entrega confirmada aparece no [Relatório de mensagens](./push-notification-message-reports) como **Confirmado** (ou **Recebido**). Para todas as métricas de entrega e engajamento, consulte o [Glossário de métricas](./analytics-metrics-glossary).

<Frame caption="Fluxo de entregas confirmadas">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=17ce8f50b8e92e0d368abe42865709c3" alt="Fluxo de entregas confirmadas" width="800" height="667" data-path="images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png" />
</Frame>

<Note>
  A Entrega confirmada é diferente de "Entregue." Os serviços push de plataforma (APNs, FCM, ADM, HMS) informam se uma notificação foi aceita pelo serviço — não se o dispositivo realmente a recebeu. A Entrega confirmada é a confirmação do lado do dispositivo.
</Note>

***

## Requisitos

* Disponível apenas em **planos pagos**. [Comparar planos](https://onesignal.com/pricing).
* Complete a [Configuração do SDK web](./web-sdk-setup) e/ou a [Configuração do SDK móvel](./mobile-sdk-setup).
  * A Entrega confirmada só funciona se o dispositivo tiver o SDK do OneSignal instalado.
  * **Não suportado** para assinaturas criadas apenas via API.

### Limitações específicas de plataforma

**iOS**

* Requer tanto a configuração da **Notification Service Extension** quanto do **App Group**.
* O APNs mantém apenas **uma mensagem por aplicativo** quando offline. Se múltiplos pushes forem enviados enquanto offline, apenas o mais recente é entregue.

**Huawei**

* Suportado apenas para o `data` [tipo de mensagem Huawei](/reference/push-notification#body-huawei-msg-type).
* Para o tipo `message`, a Huawei fornece dados de recibo apenas em seu próprio painel.

**Web**

* O Safari **não** suporta Entrega confirmada.

***

## Solução de problemas de Entrega confirmada

Se você não está recebendo notificações push de forma alguma, consulte primeiro [Notificações não exibidas](./notifications-show-successful-but-are-not-being-shown).

### iOS

A Entrega confirmada no iOS requer duas coisas funcionando juntas:

1. Uma **Notification Service Extension** (NSE) que executa o código do OneSignal quando um push chega
2. Um **App Group** compartilhado entre o target do seu aplicativo principal e o target da NSE para que eles possam trocar dados

Se qualquer um estiver ausente ou mal configurado, o dispositivo recebe o push mas nunca o reporta de volta ao OneSignal.

**Verifique sua configuração iOS**

<Steps>
  <Step title="Confirme que o target da NSE existe e tem o código correto">
    No Xcode, verifique se você tem um target **OneSignalNotificationServiceExtension** listado nos targets do seu projeto. Se não existir, siga o [Passo 2 da Configuração do SDK iOS](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse).

    Abra o arquivo `NotificationService.swift` (ou `.m`) da NSE. Ele deve chamar `OneSignalExtension.didReceiveNotificationExtensionRequest` dentro de `didReceive(_:withContentHandler:)`. Se o arquivo ainda contém o código de template padrão da Apple, substitua-o pelo [código NSE do OneSignal](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse).
  </Step>

  <Step title="Confirme que a NSE tem o pacote OneSignalExtension">
    Selecione seu **target da NSE > General > Frameworks and Libraries** (ou **Build Phases > Link Binary With Libraries**). Verifique se `OneSignalExtension` está listado. O target do aplicativo principal usa `OneSignalFramework`, mas o target da NSE deve usar `OneSignalExtension` — estes são pacotes diferentes.
  </Step>

  <Step title="Verifique que o App Group está configurado corretamente em ambos os targets">
    O SDK do OneSignal usa um App Group para compartilhar dados entre seu aplicativo principal e a NSE. Há duas formas de configurar isso — escolha a que corresponde à sua configuração.

    1. Selecione seu **target do aplicativo principal > Signing & Capabilities > App Groups**.
    2. Confirme o App Group.

    Se o seu App Group for `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal` — onde `YOUR_MAIN_APP_BUNDLE_ID` é o identificador de bundle do target do seu aplicativo principal (disponível em **General > Identity**), siga a aba App Group padrão. Caso contrário, siga a aba App Group personalizado.

    <Tabs>
      <Tab title="App Group padrão - group.YOUR_MAIN_APP_BUNDLE_ID.onesignal">
        1. Selecione seu **target da NSE > Signing & Capabilities > App Groups**.
        2. Confirme se o **mesmo** App Group está listado. Se ausente, adicione-o via **+ Capability > App Groups** e selecione o mesmo grupo.

        Um erro comum é usar o identificador de bundle da NSE em vez do do aplicativo principal:

        * **Correto:** `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal`
        * **Incorreto:** `group.YOUR_MAIN_APP_BUNDLE_ID.OneSignalNotificationServiceExtension.onesignal`

        O target do seu aplicativo principal e o target da NSE devem ter o mesmo identificador de App Group.
      </Tab>

      <Tab title="App Group personalizado">
        Use esta opção se o identificador do seu App Group não seguir o formato `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal`.

        1. Selecione seu **target do aplicativo principal > Signing & Capabilities > App Groups**.
        2. Confirme se o seu App Group personalizado está listado.
        3. Selecione o `Info.plist` do target do seu aplicativo principal e adicione a seguinte chave:

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        Substitua `group.your-custom-group-name` pelo nome real do seu App Group.

        4. Selecione seu **target da NSE > Signing & Capabilities > App Groups**.
        5. Confirme se o **mesmo** App Group personalizado está listado. Se ausente, adicione-o via **+ Capability > App Groups** e selecione o mesmo grupo.
        6. Selecione o `Info.plist` do target da NSE e adicione a seguinte chave:

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        Substitua `group.your-custom-group-name` pelo nome real do seu App Group.

        O target do seu aplicativo principal e o target da NSE devem ter o mesmo identificador de App Group.
      </Tab>
    </Tabs>

    <Warning>
      Se você usa arquivos `.xcconfig` para configurações de build, verifique se o App Group não está sendo substituído ou omitido nesses arquivos.
    </Warning>
  </Step>

  <Step title="Confirme que os targets de implantação mínima correspondem">
    Selecione seu **target da NSE > General > Minimum Deployments**. Este valor deve corresponder à implantação mínima do target do seu aplicativo principal. Uma incompatibilidade pode impedir que a NSE seja executada em certas versões do sistema operacional.
  </Step>

  <Step title="Desmarque &#x22;Copy only when installing&#x22;">
    Selecione seu **target do aplicativo principal > Build Phases > Embed App Extensions**. Certifique-se de que **"Copy only when installing" está desmarcado**. Se marcado, a NSE não é incluída durante builds de desenvolvimento, portanto nunca é executada durante os testes.
  </Step>

  <Step title="Verifique os valores NSExtension no Info.plist">
    Selecione seu **target da NSE > aba Info** e expanda a chave `NSExtension`. Confirme se ela contém:

    ```xml theme={null}
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.service</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).NotificationService</string>
    ```

    Se a sua NSE for escrita em Objective-C, use `NotificationService` em vez de `$(PRODUCT_MODULE_NAME).NotificationService`.
  </Step>

  <Step title="Verifique se mutable-content está configurado">
    O OneSignal define automaticamente `mutable-content: 1` no payload do push, o que instrui o iOS a invocar a NSE. Se você enviar pushes via [API REST](/reference/push-notification), verifique se não está definindo explicitamente `mutable_content: false`. Sem `mutable-content`, o iOS não executa a NSE e a Entrega confirmada não pode ser acionada.
  </Step>

  <Step title="Teste se a NSE está sendo executada">
    Adicione esta linha temporariamente dentro de `didReceive` antes da chamada do OneSignal:

    ```swift theme={null}
    bestAttemptContent.body = "[Modified] " + bestAttemptContent.body
    ```

    Envie um push de teste para você mesmo. Se o corpo da notificação começar com `[Modified]`, a NSE está sendo executada corretamente. Se não, revise as etapas acima — a NSE não está sendo invocada. Remova esta linha após os testes.

    Para depuração avançada da NSE com logs do Xcode Console, consulte [Depurando a iOS Notification Service Extension](./service-extensions#debugging-the-ios-notification-service-extension).
  </Step>
</Steps>

### Android

* Se as notificações não estão sendo exibidas: consulte [Solução de problemas de push móvel](./notifications-show-successful-but-are-not-being-shown).
* Se as notificações aparecem mas a Entrega confirmada está faltando: uma Android Service Extension personalizada pode estar bloqueando. Verifique o [guia de Android Service Extension](./service-extensions#android-service-extension).

### Web

* Safari não é suportado.
* Para outros navegadores, certifique-se de que a migração para o **SDK v16** esteja completa:
  * Inicialização correta do SDK:
    ```html theme={null}
    <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
    ```
  * Referência correta do Service Worker:
    ```html theme={null}
    importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
    ```

***

## Perguntas frequentes

### Por que meus números de Entrega confirmada estão baixos ou ausentes?

As causas mais comuns são problemas de configuração (especialmente no iOS), dispositivos inativos e limitações de plataforma.

1. **Configuração incorreta do iOS:** A Notification Service Extension ou o App Group está ausente ou incorreto. Consulte [Solução de problemas de Entrega confirmada no iOS](#ios) acima.
2. **Dispositivos inativos ou abandonados:** Dispositivos que estão offline ou que não são mais utilizados não recebem pushes nem enviam eventos de Entrega confirmada. Consulte [Como lidar com dispositivos inativos?](#como-lidar-com-dispositivos-inativos) abaixo.
3. **Limitações de plataforma:** O tipo `message` da Huawei e o Safari não suportam Entrega confirmada.
4. **Fechamento forçado no Android:** Alguns fabricantes de dispositivos tratam deslizar o aplicativo como fechamento forçado, o que para os eventos do SDK. Consulte o [Guia de push móvel não exibido](./notifications-show-successful-but-are-not-being-shown).

### Como lidar com dispositivos inativos?

Dispositivos que estão offline ou abandonados não recebem notificações push nem enviam eventos de Entrega confirmada. Isso é comum quando os usuários substituem ou abandonam dispositivos.

Para reengajar usuários inativos:

* Use a **Atividade de Audiência** para reenviar para usuários que não confirmaram a entrega.
* Crie [Segmentos](./segmentation) baseados em **Última Sessão** (por exemplo, inativos por 90+ dias).
  * Combine com uma [Jornada de reengajamento](./journeys-examples#re-engagement-campaign) para reconquistá-los.
  * Periodicamente segmente usuários inativos para remover dispositivos inalcançáveis.

Consulte [Quando os status de assinatura push são atualizados?](./subscriptions#when-do-push-subscription-statuses-update) para mais detalhes sobre como o OneSignal atualiza o status de assinatura.

### Por que mostra Confirmado mas não aparece no meu dispositivo?

Um evento de Entrega confirmada significa que o dispositivo recebeu o payload do push. Em casos raros, a notificação pode não ser exibida.

Possíveis causas:

* **Notificação perdida:** Envie um push de teste para você mesmo via [Encontrar e definir Assinaturas de Teste](./test-users) para descartar isso.
* **Modo Foco do iOS:** "Não Perturbe", "Dormir" ou outros [modos Foco](./ios-focus-modes-and-interruption-levels) atrasam ou agrupam notificações. Você pode ter descartado uma notificação agrupada sem vê-la.
* **Código do aplicativo suprimindo a exibição:**
  * `event.preventDefault()` no [listener do ciclo de vida em primeiro plano](./mobile-sdk-reference#addforegroundlifecyclelistener-push) ou [Notification Service Extension](./service-extensions) impede a exibição da notificação.
  * Chamadas para [`removeDeliveredNotifications(withIdentifiers:)`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removedeliverednotifications\(withidentifiers:\)) ou [`removeAllDeliveredNotifications()`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removealldeliverednotifications\(\)) removem notificações após chegarem.
* **Configurações de payload do push:**
  * Certifique-se de que `priority` esteja definido como alto. Consulte [Prioridade de push](./push#priority).
  * [`collapse_id`](./push#collapse_id) substitui pushes mais antigos por novos usando o mesmo ID.

***

<Info>
  Precisa de ajuda?

  Converse com nossa equipe de Suporte ou envie email para `support@onesignal.com`

  Por favor inclua:

  * Detalhes do problema que você está enfrentando e passos para reproduzir se disponível
  * Seu OneSignal App ID
  * O External ID ou Subscription ID se aplicável
  * A URL para a mensagem que você testou no Dashboard OneSignal se aplicável
  * Quaisquer [logs ou mensagens de erro](/docs/pt-BR/capturing-a-debug-log) relevantes

  Estamos felizes em ajudar!
</Info>
