我会尝试在应用程序背景下获取数据,如此格式
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data" : {
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
所以数据是通过onMessageReceived(RemoteMessage消息)方法传递的,或者我不知道任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
要让应用在后台时可以点击通知,您需要在通知有效负载中使用click_action
属性。
请查看Firebase文档的section。
此外,当您定义click_action
属性时,您还需要在要启动的活动的<action>
中使用相应的<intent-filter>
属性。
这video以非常详细的方式解释了它。
但请注意,如果您要从Firebase控制台发送通知,则无法设置click__action
属性。只有从自己的管理服务器或使用Firebase云功能发送通知时,才能执行此操作。
最后,在启动的活动中,您可以使用数据属性设置其他Data
(也显示在我上面链接的同一文档中)。当您通过单击通知启动应用程序时,您可以使用getIntent()
获取通知数据。查看this answer了解有关如何执行此操作的详细信息。
例如,如果您的通知有效内容具有以下结构,
payload = {
notification: {
title: `You ordered a new product`,
click_action : 'HANDLE_NOTIFICATION',
},
data : {
product_id : 'ABC98292',
type : `Clothes`,
product_name : 'Cotton spring shirt'
}
};
然后,将过滤器放在单击通知时要打开的活动的标记中。一个例子如下: -
<intent-filter>
<action android:name="HANDLE_NOTIFICATION" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
然后,您可以使用getIntent().getStringsExtra("product_id")
等来从通知中获取product_id。
这样,您就可以打开所需的活动,并可以使用从您的通知中获得的相关详细信息填充该活动。