如何删除应用为背景时出现的单个FCM通知



我正在开发一个应用程序,我正在获取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及更高设备的设备,则必须按照本文档指定的应用程序注册您的应用程序的通知频道,否则不会出现消息通知。

相关内容

  • 没有找到相关文章

最新更新