Android 应用程序位于前台时收到的推送通知与应用程序位于后台时收到的推送通知不同

Android 应用程序位于前台时收到的推送通知与应用程序位于后台时收到的推送通知不同,android,firebase,firebase-cloud-messaging,android-notifications,Android,Firebase,Firebase Cloud Messaging,Android Notifications,我已经在android应用程序中实现了FCM推送通知 当我登录到应用程序时。我收到的通知的形式,我期待如下 当应用程序在后台时,我会收到json响应,如下所示 以下是我在onMessageRecieved()中添加的代码 在这两种情况下,我如何以相同的方式获得通知 感谢您的帮助,因为推送通知以不同的方式在前台和后台处理 从 应用程序处于后台时发送的通知消息。在里面 在这种情况下,通知将发送到设备的系统托盘。 默认情况下,用户点击通知会打开应用程序启动器 具有通知和数据有效负载(包括后台和后台

我已经在android应用程序中实现了FCM推送通知

当我登录到应用程序时。我收到的通知的形式,我期待如下

当应用程序在后台时,我会收到json响应,如下所示

以下是我在onMessageRecieved()中添加的代码

在这两种情况下,我如何以相同的方式获得通知


感谢您的帮助,因为推送通知以不同的方式在前台和后台处理

应用程序处于后台时发送的通知消息。在里面 在这种情况下,通知将发送到设备的系统托盘。 默认情况下,用户点击通知会打开应用程序启动器

具有通知和数据有效负载(包括后台和后台)的消息 前景。在这种情况下,通知将传递给 设备的系统托盘,数据有效负载在extras中交付 您的启动器活动的意图

您还必须记住-通知消息数据消息

看起来您正在使用
通知
消息,因此它们可以正常工作


只需使用
数据
类型的消息,您就可以随时根据需要处理它们。

这是因为推送通知以不同的方式处理前台和后台

应用程序处于后台时发送的通知消息。在里面 在这种情况下,通知将发送到设备的系统托盘。 默认情况下,用户点击通知会打开应用程序启动器

具有通知和数据有效负载(包括后台和后台)的消息 前景。在这种情况下,通知将传递给 设备的系统托盘,数据有效负载在extras中交付 您的启动器活动的意图

您还必须记住-通知消息数据消息

看起来您正在使用
通知
消息,因此它们可以正常工作


只需使用
数据
类型的消息,您就可以随时根据需要处理它们。

在Android应用程序中设置FCM后,您可以使用Firebase控制台发送通知。当前景化应用程序收到通知时,将调用onMessageReceived方法。您应该重写此方法以处理通知,但问题是当应用程序位于后台并接收到通知时,通知会传递到设备的系统托盘,并且您无法使用onMessageReceived方法处理通知。当用户点击通知时,默认情况下会打开应用程序启动器。例如,考虑到当用户收到通知或在后台执行某项任务而不需要用户实现或不想向用户显示通知对话框时,执行特定任务,应用程序后退时不能执行这些操作。 消息类型 使用FCM,您可以向客户端发送两种类型的消息:

1-通知消息,有时被认为是“显示消息”

2-数据消息,由客户端应用程序处理

根据谷歌文档,通知消息有2KB的限制和预定义的用户可见密钥。数据消息允许开发人员发送多达4KB的自定义键值对

解决方案: 如果希望在应用程序处于后台时处理通知,则应发送数据消息并使用onMessageReceived方法


在Android应用程序中设置FCM后,您可以使用Firebase控制台发送通知。当前景化应用程序收到通知时,将调用onMessageReceived方法。您应该重写此方法以处理通知,但问题是当应用程序位于后台并接收到通知时,通知会传递到设备的系统托盘,并且您无法使用onMessageReceived方法处理通知。当用户点击通知时,默认情况下会打开应用程序启动器。例如,考虑到当用户收到通知或在后台执行某项任务而不需要用户实现或不想向用户显示通知对话框时,执行特定任务,应用程序后退时不能执行这些操作。 消息类型 使用FCM,您可以向客户端发送两种类型的消息:

1-通知消息,有时被认为是“显示消息”

2-数据消息,由客户端应用程序处理

根据谷歌文档,通知消息有2KB的限制和预定义的用户可见密钥。数据消息允许开发人员发送多达4KB的自定义键值对

解决方案: 如果希望在应用程序处于后台时处理通知,则应发送数据消息并使用onMessageReceived方法


一定要将
的完整代码发布到messagereceived()
。很可能您正在处理有效负载,并将错误的详细信息传递给了notification builder。请发布
onMessageReceived()
的完整代码。很可能您正在处理有效负载,并将错误的详细信息传递给错误的通知生成器。
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setContentTitle("App")
            .setContentText(messageBody)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentIntent(pendingIntent)
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(bitmap))/*Notification with Image*/;