作者:周俊瑶zjy_963 | 来源:互联网 | 2023-02-07 17:20
我正在使用firebase向我的应用发送通知.我想将每台设备上收到的通知保存在本地数据库中.问题是,当应用程序在后台并收到通知时,onMessageReceived()
将不会调用该方法,而是根据文档将通知添加到系统托盘中.该文档还提到以下内容,以便在应用程序处于后台时收到通知:
在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递.
因此,当我尝试访问intent中的extras时,找不到通知的键.我的代码在MainActivity.java
:
if (getIntent().getExtras() != null) {
for (String key : getIntent().getExtras().keySet()) {
Object value = getIntent().getExtras().get(key);
Toast.makeText(this, "Key: " + key + " Value: " + value, Toast.LENGTH_LONG).show();
}
}
我们从服务器发送的通知:
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
}
}
任何人都知道如何检索通知中的值?
1> AL...:
这是预期的行为(如您在文档中所看到的)。如果您使用的是notification
- 只有消息有效载荷(你是),onMessageReceived()
如果你的应用是将只能被称为前景,如果不是,系统托盘会接受它。
的data
被引用在(重点煤矿):
在这些情况下,通知将传递到设备的系统托盘,而数据有效载荷将在启动器活动的意图范围内传递。
是data
消息有效负载(请参阅消息类型)。
您必须同时发送带有notification
和的有效负载data
。像这样:
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data": {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
}
}
也可以在这里查看我的答案。
2> 小智..:
您所需要做的就是更新通知推送格式。
从:
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
}
}
至
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
}
}
说明:
系统运行的Firebase服务适用于所有应用程序,并在包含“ notification”标记的情况下处理所有推送通知。但是,如果仅包含“数据”标签,则只需将任务移交给应用程序创建的服务即可在其中执行任何操作。在这种情况下,请显示用户通知并将其保存到本地数据库。有关更多信息,请阅读此处文档:处理消息。