我正在开发一个应用程序,我正在获取FCM通知,因为当应用程序打开onMessageRecieved()
方法触发时,我正在根据标签和ID通知消息,并根据ID和ID和ID和删除通知标签。但是,当该应用在后台时,onMesasageRecived()
未调用。当我从背景中获取通知时,如何附加ID和标记通知或如何根据某些ID删除单个通知。
请参阅OnMessageCeived
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
............
notificationManager.notify("tag", notificationId, notification);
.......
}
用于删除消息
private void clearNotifications() {
NotificationManager nMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancel("tag",notificationId);
}
这正在起作用 但是,当应用程序关闭时,代码不起作用。 我们可以从Serveride有效载荷通知或附加标签和ID
如果您查看文档,在这里您会看到,如果您有notification
有效负载,您的通知将在应用程序在后台时直接传递到系统托盘,没有拦截这一点的方法。如果您有带有选项数据有效载荷的通知有效载荷,也会发生同样的情况,该通知将直接转到托盘,并且数据有效负载将交付给启动器活动的意图。
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}
当您在onMessageReceive
方法中检查ID/标签时,您可以采取的措施确保它始终调用onMessageReceived
方法是从您的通知中删除通知有效负载,并仅添加数据有效负载。所有data
有效载荷均交付到onMessageReceived
方法。
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
具有在后台时使用的onMessageReceived()
方法,您必须删除"通知"键及其有效载荷从您的消息中删除,并且仅包括"数据"键及其有效载荷。
之前:(带有通知和数据有效载荷的消息(
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
}
之后:(仅数据消息(
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
}
因为只有包括"数据"密钥在内的数据消息可以获取onMessageReceive()
方法,如本文档中所述的后台时。
还有一件事:如果您将应用程序定位为具有Android 8.0及更高设备的设备,则必须按照本文档指定的应用程序注册您的应用程序的通知频道,否则不会出现消息通知。