Die FirebaseMessagingService
hat die Methode onMessageReceived()
, die wir sollten override
notifications
zu handhaben, aber dies funktioniert nur, wenn die App ist in Foreground
.FirebaseMessagingService 11.6.0 HandleIntent
Um notifications
zu behandeln, auch wenn die App im Hintergrund ist, habe ich die handleIntent
überschrieben, um nur die onMessageReceived()
zu rufen.
In FirebaseMessagingService
11.6.0, wurde die Methode handleIntent
endgültig, mit dem gesagt, ich kann es nicht überschreiben, wie ich es tat.
Wie soll ich mit Benachrichtigungen umgehen, wenn meine App im 11.6.0 im Hintergrund ist?
public class NotificationsListenerService extends FirebaseMessagingService {
private static final String TAG = "NotificationsListenerService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
String notifyData = remoteMessage.getData().get("notifData");
if(notifyData.contains("|")){
String[] itens = notifyData.split("\\|");
notifyData = itens[0];
}
String notifyType = remoteMessage.getData().get("notifType");
String title = remoteMessage.getData().get("title");
String message = remoteMessage.getData().get("body");
if(!isAppInForeground(App.getContext())){
sendNotification(title, message, notifyData, notifyType);
}
}
@Override
public final void handleIntent(Intent intent) {
...
this.onMessageReceived(builder.build());
...
}
private void sendNotification(String messageTitle, String messageBody, String notifyData, String notifyType) {
...
}
//Detect if app is in foreground
private boolean isAppInForeground(Context context) {
...
}
}
Ich habe diese Artikel gelesen, aber wenn meine App im Hintergrund ist, erhält sie nur die Benachrichtigung, aber wenn der Benutzer darauf klickt, wird die Benachrichtigung abgewiesen. Ich habe bereits die Klicklogik in der Benachrichtigung entwickelt, um den Benutzer auf bestimmte Aktivitäten hinzuweisen. Wenn ich die handleIntent überschreiben, funktionierte es perfekt. –
Richtig, das ist eine Nachricht vom Typ "Benachrichtigung", die von der Konsole gesendet wird. Stattdessen sollten Sie eine Nachricht vom Typ "Daten" aus einem Back-End senden, das Sie steuern, um es mit demselben Code entweder im Hintergrund oder im Vordergrund empfangen zu können. –
Danke, Doug! Ich werde mit dem Backend-Entwickler sprechen, um mir eine Datennachricht zu senden. –