Você pode acessar os dados em suas notificações push enviadas do OneSignal através da classe OSNotification
Extensão de Serviço de Notificação do Android
Permite que você processe a notificação antes de ser mostrada ao usuário. Casos de uso comuns incluem:- Receber dados em segundo plano com ou sem exibir uma notificação.
- Substituir configurações específicas de notificação dependendo da lógica do aplicativo do lado do cliente, como cor de destaque personalizada, padrão de vibração ou qualquer outra opção
NotificationCompatdisponível.
Passo 1: Criar uma classe para a extensão de serviço
Crie uma classe que implementaINotificationServiceExtension e implemente o método onNotificationReceived.
O parâmetro do método onNotificationReceived é event do tipo INotificationReceivedEvent.
A anotação
@Keep é necessária para evitar que o ProGuard ou o R8 renomeie ou remova sua classe durante a minificação.Passo 2: Personalizar a notificação
Os exemplos a seguir mostram personalizações comuns que você pode implementar na classe de Extensão de Serviço de Notificação.- Impedir que a notificação seja exibida
- Adicionar um campo personalizado
- Alterar a cor e o ícone da notificação
Use
event.preventDefault() para suprimir a exibição da notificação. Em seguida, você pode chamar event.getNotification().display() para exibi-la mais tarde, ou nunca chamá-la para descartá-la silenciosamente.Passo 3: Adicionar a extensão de serviço ao seu AndroidManifest.xml
Adicione o nome da classe e o valor como meta-data dentro do arquivo AndroidManifest.xml na tag do aplicativo. Ignore quaisquer avisos de “não utilizado”.
XML
com.onesignal.example.NotificationServiceExtension pelo nome totalmente qualificado da sua classe.
Extensão de Serviço de Notificação do iOS
A UNNotificationServiceExtension permite que você modifique o conteúdo das notificações push antes de serem exibidas ao usuário e é necessária para outros recursos importantes como:- Imagens e Rich Media.
- Entrega Confirmada
- Badges
- Botões de Ação
- Aberturas Influenciadas com Firebase Analytics
Obtendo o payload de push do iOS
O overridedidReceive(_:withContentHandler:) chama OneSignalExtension.didReceiveNotificationExtensionRequest, que passa o bestAttemptContent para o OneSignal antes de ser exibido ao usuário. Você pode ler ou modificar bestAttemptContent antes que esse método seja chamado.
Neste exemplo, enviamos uma notificação com os seguintes dados:
JSON
data adicionais dentro da OneSignalNotificationServiceExtension através da chave a dentro do dicionário custom de userInfo:
Solução de problemas da Extensão de Serviço de Notificação do iOS
Este guia é para depurar problemas com Imagens, Botões de Ação ou Entregas Confirmadas que não aparecem em aplicativos móveis iOS.Verifique suas Configurações do Xcode
Em General > Targets, certifique-se de que seu main app target e o target OneSignalNotificationServiceExtension tenham os mesmos e corretos:- Supported Destinations
- Minimum Deployment (iOS 14.5 ou superior)

Exemplo de Main App Target no Xcode

Exemplo de Target OneSignalNotificationServiceExtension no Xcode
NSExtension. Certifique-se de ver:
XML

Exemplo da chave NSExtension na aba Info
Desative “Copy only when installing”
Selecione seu main app target > Build Phases > Embed App Extensions. Certifique-se de que “Copy only when installing” NÃO esteja marcado. Desmarque-o se estiver:
Configurações de build phase do main app target
Depurando a Extensão de Serviço de Notificação do iOS
Siga estas etapas para verificar se a Extensão de Serviço de Notificação está configurada corretamente.1. Atualizar o código OneSignalNotificationServiceExtension
AbraNotificationService.m ou NotificationService.swift e substitua todo o conteúdo do arquivo pelo código abaixo. Isso adiciona logs para ajudar a verificar se a extensão está sendo executada.
Substitua YOUR_BUNDLE_ID pelo seu Bundle ID real.
Os tipos de log de depuração precisam ser habilitados no Console via Action > Include Debug Messages.
2. Alterar seu Active Scheme
Defina seu Active Scheme paraOneSignalNotificationServiceExtension.

Seleção de active scheme no Xcode
3. Compilar e executar o projeto
Compile e execute o projeto no Xcode em um dispositivo real.4. Abrir o Console
No Xcode, selecione Window > Devices and Simulators.
Janela Devices and Simulators do Xcode

Botão de acesso ao console do dispositivo
5. Verificar o Console
No Console:- Selecione Action > Include Debug Messages
- Procure por
OneSignalNotificationServiceExtensioncomo a CATEGORY - Selecione Start

Configuração de depuração do console
contents se estiver enviando pela API Criar notificação). Neste exemplo, o payload é:
cURL

Exemplo de saída de depuração do console
FAQ
Por que minha extensão de serviço de notificação não está sendo executada no iOS? A extensão só é executada quandomutable-content está definido no payload da notificação. O OneSignal define isso automaticamente para notificações com anexos ou botões de ação. Verifique se as configurações do Xcode correspondem ao guia de solução de problemas.
Posso impedir que uma notificação seja exibida no Android?
Sim. Chame event.preventDefault() para suprimir a exibição. Em seguida, chame event.getNotification().display() para exibi-la mais tarde, ou nunca chame para descartá-la silenciosamente. Consulte Notificações duplicadas para mais informações.
Preciso da anotação @Keep no Android?
Sim. Ela evita que o ProGuard ou o R8 renomeie ou remova sua classe que implementa INotificationServiceExtension durante a minificação.
Páginas relacionadas
Configuração do SDK Móvel
Instale e configure o SDK do OneSignal para iOS e Android.
Imagens e rich media
Anexe imagens, GIFs e vídeos a notificações push.
Entrega confirmada
Rastreie a entrega confirmada de notificações para dispositivos.
Notificações duplicadas
Solucione notificações push duplicadas em todas as plataformas.