安卓FCM:当应用在后台时弹出系统通知

5

当应用在后台运行时,是否可能在屏幕顶部显示 Firebase 系统通知的弹出窗口?我使用 setPriority(Notification.PRIORITY_MAX) 显示来自 onMessageReceived 的前台通知。

我同时使用 notificationdata 字段,因此无法在前台访问收到的通知。我尝试过将 priority 设置为 high 并使用仅限通知的推送 - 都没有帮助。


1
请查看文档,您要寻找的行为在此处描述:https://firebase.google.com/docs/cloud-messaging/concept-options - Cedric Franck
1
我猜应该不可行。 - Rissmon Suresh
2个回答

8
只有使用 data 类型的负载时,当您的应用程序在后台运行时,才能在 onMessageReceived 中处理消息。
如果您的负载中同时包括 notificationdata,则无论您的 priority 值是什么,在后台运行时 Android 系统将处理通知。
有关更多详细信息,请参阅官方文档中关于 处理 Android 消息 的说明。

1
谢谢!我在负载中只留下了“data”字段,并使用“Notification.Builder”从“onMessageReceived”中显示了自定义通知。起初,我认为自己显示通知的代码是不必要的,因为FCM可以自行完成,但后来我发现这种方式更加灵活。 - prcu

1
如果您只在通知中发送了“数据”字段,则可以在以下函数内处理通知。
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
    }

    // Check if message contains a notification payload.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " +remoteMessage.getNotification().getBody());
    }

}

请注意,在该请求中不要包含通知字段。

当应用程序处于后台时,它不被调用。根据文档所述:“当应用在后台运行时,它会在通知托盘中接收到通知负载,只有当用户点击通知时才会处理数据负载。” - prcu
仅发送数据字段,不要发送通知字段。如果两者都发送,FCM将自动显示通知。如果您仅发送数据字段,则将在onMessageReceived()中接收到它。 - Sangeet Suresh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接