如何在 Android 8 上的后台应用中处理通知消息



我发现关于这个主题的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身体,让我可以更好地控制我的通知。

相关内容

  • 没有找到相关文章