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

时间:2018-06-14 09:48:50

标签: android firebase firebase-cloud-messaging android-notifications

我在Android应用中实现了FCM推送通知。

当我登录应用程序时。我收到的通知形式正如我所期望的那样。

enter image description here

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

enter image description here

以下是我在onMessageRecieved()

中添加的代码
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*/;

在这两种情况下,如何以相同的方式收到通知。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

在Android应用程序中设置FCM后,您可以使用Firebase控制台发送通知。当foregrounded应用程序收到通知时,将调用onMessageReceived方法。您应该覆盖此方法来处理通知,但问题是当应用程序在后台并收到通知时,通知会传递到设备的系统托盘,您无法使用onMessageReceived方法处理通知。当用户点按通知时,默认情况下会打开应用启动器。例如,考虑到您希望在收到用户通知时执行特定任务,或者在后台执行某些操作而无需用户实现或不希望向用户显示通知对话框,则在应用程序运行时无法执行这些操作背景执行。

消息类型

使用FCM,您可以向客户端发送两种类型的消息:

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

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

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

解决方案:

如果要在应用程序后台处理时处理通知,则应发送数据消息并使用onMessageReceived方法。

Here is the complete article.

答案 1 :(得分:2)

之所以如此,是因为推送通知以不同方式处理前景后台

来自documentation

  

当您的应用在后台时传递通知消息。在   在这种情况下,通知将传递到设备的系统托盘。   用户点按通知会默认打开应用启动器。

     

包含通知和数据有效负载的消息,包括背景和   前景。在这种情况下,通知将传递给   设备的系统托盘,数据有效负载在附加功能中提供   您的启动器活动的意图。

此外,您必须记住there are 2 types of firebase pushes - 通知消息数据消息

看起来您正在使用Notification消息,因此它们正在按预期工作。

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

相关问题