FirebaseMessagingService有我们应该onMessageReceived()处理override的方法,但这仅在应用程序位于notifications时有效。
要处理Foreground甚至当应用程序在后台时,我曾经覆盖notifications,只调用handleIntent
onMessageReceived()11.6.0中,FirebaseMessagingService方法成为最终方法,也就是说,我不能像以前那样覆盖它。
当我的应用程序位于11.6.0的后台时,我应该如何处理通知?

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) {
        ...
    }
}

最佳答案

它不适合任何人覆盖handleIntent()。这就是为什么它被定为决赛。而且,你会注意到它在javadocs中完全丢失了-这是故意的。
如果您想在任何情况下(前台和后台)处理消息,请使用onMessageReceived()。该方法的javadoc表示:
在收到消息时调用。
当在
应用程序在前台。可以检索通知参数
与getNotification()一起使用。
这应该适用于数据消息,但不适用于从控制台发送的通知消息。通知消息具有不同的传递行为。请参阅有关message typeshow to handle them的文档。

07-24 09:38