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());
}
}
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" />
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)