DEV Community

Lacerda
Lacerda

Posted on

Como Interceptar Notificações no Android com OneSignal

Neste tutorial, vou mostrar passo a passo como interceptar as notificações do seu aplicativo que está integrado ao OneSignal.

Isso permitirá que você tenha total controle sobre o fluxo da notificação antes que ela seja exibida ao usuário.

Todo o passo a passo será realizado no Android, utilizando Expo Bare Workflow e OneSignal.

Este tutorial assume que o OneSignal já esteja configurado e aborda exclusivamente a interceptação de notificações.

Vamos iniciar o tutorial.

No seu projeto, procure pela pasta Android, pois é nela que vamos trabalhar, ou seja, iremos mexer com código nativo e não com JS/TS.

Dentro da pasta Android, procure por app -> src -> main -> java e vamos criar um novo arquivo. Olhe o exemplo abaixo na imagem.

Eu dei o nome de NotificationServiceExtension com a extensão java

Dentro desse arquivo, é onde nós iremos trabalhar para poder interceptar as notificações.

Vamos criar uma classe, implementar uma interface e sobrescrever um método.

package com.lacerda.mobile.notification; // mude para o seu pacote

import androidx.annotation.Keep;
import com.onesignal.notifications.IActionButton;
import com.onesignal.notifications.IDisplayableMutableNotification;
import com.onesignal.notifications.INotificationReceivedEvent;
import com.onesignal.notifications.INotificationServiceExtension;

@Keep
public class NotificationServiceExtension implements INotificationServiceExtension {

     @Override
     public void onNotificationReceived(INotificationReceivedEvent event) {
        IDisplayableMutableNotification notification = event.getNotification();

        Log.d("NotificationService", "Recebendo notificação");
        Log.d("NotificationService", "Corpo: " + notification.getAdditionalData());
     }
}
Enter fullscreen mode Exit fullscreen mode

Com esse código, se você receber uma notificação, será possível ver o conteúdo dela no console. Mas ainda falta um passo importante para essa classe realmente funcionar, que é dizer para o SDK do OneSignal que ele precisar chamar a nossa classe, e isso é feito no AndroidManifest.xml

Será necessário colocar a seguinte linha:

  <meta-data 
    android:name="com.onesignal.NotificationServiceExtension"
    android:value="com.lacerda.mobile.notification.NotificationServiceExtension" />
Enter fullscreen mode Exit fullscreen mode

Preste atenção que o value deve apontar exatamente para a classe que acabamos de criar. O com.lacerda.mobile.notification é o meu pacote, coloque exatamente o seu.

Agora veja como fica no AndroidManifest:

Com tudo configurado, sempre que uma notificação for recebida, a classe responsável irá interceptá-la e exibir seu conteúdo no console. A partir desse ponto, é possível executar outras ações, como acordar o aplicativo ou exibir uma tela de chamada.

É possível consultar a própria documentação do OneSignal:

https://documentation.onesignal.com/docs/en/service-extensions#prevent-notification-from-displaying

Top comments (0)