我发现关于这个主题的Firebase文档太难以捉摸了:https://firebase.google.com/docs/cloud-messaging/android/receive#backgrounded
我遵循了这个答案:https://stackoverflow.com/a/47392189/2068732and并且我能够捕获应用程序在后台时收到的通知。
但是,这并不令人满意,因为 WakefulBroadcastReceiver 类已被弃用。
将通知转发到 MyFirebaseMessagingService 的 onMessageReceived(( 方法的正确方法是什么?
这是我的MyFirebaseMessagingService类:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(getClass().getName(), "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(getClass().getName(), "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(getClass().getName(), "Message Notification Body: " + remoteMessage.getNotification().getBody());
displayNotification(remoteMessage);
}
}
}
和清单:
<service
android:name=".firebase.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
仅当有效负载中有通知数据时,remoteMessage.getNotification() != null
才会为真。如果您有数据有效负载,则displayNotification()
应该在 if 块之外
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(getClass().getName(), "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(getClass().getName(), "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(getClass().getName(), "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
displayNotification(remoteMessage);
}
}
请添加以下权限。 <uses-permission android:name="android.permission.WAKE_LOCK" />
了解更多信息,您可以查看此内容
请检查这个和这个。
简而言之,您应该通过从 fcm 主体中删除notification
体来修改您的 fcm 有效负载,仅省略data
有效负载。
真的不太确定哪一个更好,但是就我而言,通过禁用notification
身体,让我可以更好地控制我的通知。