2

Die FirebaseMessagingService hat die Methode onMessageReceived(), die wir sollten overridenotifications 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) { 
     ... 
    } 
} 

Antwort

0

Es ist nicht für irgendjemanden gedacht, zu überschreiben. Deshalb wurde es endgültig gemacht. Außerdem werden Sie bemerken, dass es komplett aus javadocs fehlt - das ist beabsichtigt.

Wenn Sie eine Nachricht unter allen Umständen (Vorder- und Hintergrund) verarbeiten möchten, verwenden Sie onMessageReceived(). Die javadoc für diese Methode sagt:

Wird aufgerufen, wenn eine Nachricht empfangen wird.

Dies ist auch aufgerufen, wenn eine Benachrichtigung empfangen wird, während die App im Vordergrund ist. Die Benachrichtigungsparameter können mit getNotification() abgerufen werden.

Dies sollte für Datennachrichten funktionieren, aber nicht für Benachrichtigungen, die von der Konsole gesendet werden. Benachrichtigungsnachrichten haben ein unterschiedliches Zustellungsverhalten. Siehe Dokumentation über message types und how to handle them.

+0

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

+0

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

+0

Danke, Doug! Ich werde mit dem Backend-Entwickler sprechen, um mir eine Datennachricht zu senden. –

1

Ich habe das gleiche Problem nach der Aktualisierung Firebase-Bibliothek-Version.

Ich denke, der einfachste Weg ist Downgrade Firebase-Bibliothek wieder (ich 11.4.2) und funktioniert immer noch!

Verwandte Themen