[英]Retrieve notification values from a notification in system tray android firebase FCM
我正在使用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"
}
}
任何人都知道如何检索通知中的值?
这是预期的行为(正如您在文档中看到的那样)。 如果您正在使用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"
}
}
另见这里的答案 。
您所要做的就是更新通知推送格式。
从:
{
"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服务,该服务适用于所有应用,并且如果它包含“通知”标记,则处理所有推送通知。 但如果只包含“data”标签,它只是将任务切换到应用程序创建的服务,您可以在其中执行任何操作。在您的案例中显示用户通知并将其保存到本地数据库。 有关详细信息,请参阅此处文档:处理消息 。
它不是一个简单或干净的解决方案,但您可以使用NotificationListenerService来接收每个通知的回调。 另一个限制是它仅支持API 18及更高版本。
将其添加到清单文件
<intent-filter>
<action android:name=".MainActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.