我在Android应用程序中实现了Firebase通知。当我的应用程序运行时,将显示包含我的自定义布局的通知,但是当应用程序未运行时,通知将以默认布局显示。如何在应用程序未运行时将通知布局更改为我的布局。此外,我存储共享首选项以允许用户切换通知。但是当应用程序未运行时,无论如何都会显示通知。怎么能实现呢?
Me.Filter = "UCase([GuestName]) LIKE """ & "*" & UCase(TempVars!tvGuestName) & "*""""
答案 0 :(得分:25)
您的问题是您在通知托盘中使用它。
请参阅此link
包含通知和数据有效负载的消息,包括后台和前台。在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递。
如果您在应用程序处于后台时将{data:"something"}(data-message)
与{notification:"something"}(display-message)
一起使用,则数据有效负载将传递给intent的额外内容,而不是onMessageReceived()
方法。我假设您实现了代码用于显示通知,因此当您的应用程序处于前台onMessageReceived()
时触发它并显示您想要的所需通知但是当它不是onMessageReceived()
时没有获取触发器而是android系统将使用您的通知有效负载处理它。您只需从服务器端代码中删除{notification:"something"}(display-message/notification tray)
即可始终确保onMessageReceived()
。
对于任何人,一直提及onMessageReceived()
将始终触发,无论它不是前景或背景,请访问此link
答案 1 :(得分:11)
有两种类型的FCM消息
从Firebase控制台发送的邮件是通知邮件。要在onMessageReceived()中获取消息,请使用数据消息。使用服务器端的以下代码发送数据通知消息
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data" : {
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
}
参考https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages
答案 2 :(得分:0)
当您的应用关闭或在后台运行时,您的代码永远不会被触发。请参阅:Firebase Notification
您需要做的是检查应用的启动方式,点按通知或点按启动器图标。为此,应将一些数据添加到通知中,然后在应用程序的第一个启动活动中检索它们。如果您可以成功检索它们,则表示您的应用是通过点按通知启动的,然后您可以执行您想要执行的操作。