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 types和how to handle them的文档。