安卓上的 FCM 通知可以覆盖之前的通知吗?

10
我正在使用 FCM 向 Android 设备发送通知。当应用处于后台时,如果我发送 10 条通知,则设备将在通知栏上显示 10 个条目。
我希望 FCM 只在通知栏上创建一个条目,即新的条目将覆盖旧的条目。 我没有找到在 https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream 上设置此功能的关键字。
有方法可以实现吗,还是不可能呢?谢谢。

你尝试过使用 tag 吗?https://firebase.google.com/docs/cloud-messaging/http-server-ref - Jimit Patel
3个回答

12

为了实现这一点,在您的通知有效载荷中使用tag关键字。

{
    "notification" : {
        "title" : "Notification Title",
        "body" : "Notification Body",
        "tag" : "your_unique_tag"
    }
}

干杯。


4

可以。有两种方法。

第一种方法是利用collapse_key参数将消息设置为可折叠消息。参考FCM文档

可折叠消息是指,如果尚未发送到设备,则可以用包含相同折叠键的新消息替换其消息。

实际上,这已经包含在您提供的链接中了(在选项下的第一个参数):

collapse_key - 此参数用于标识一组消息(例如,使用collapse_key:“可用更新”),这些消息可以折叠,因此当可以恢复传输时,只发送最后一条消息。这旨在避免在设备重新上线或变为活动状态时发送太多相同的消息。
请注意,无法保证消息发送的顺序。
注:每个给定时间最多允许4个不同的折叠键。这意味着FCM连接服务器可以同时为每个客户端应用程序存储4个不同的发送到同步消息。如果超过此数字,则无法保证FCM连接服务器将保留哪4个折叠键。

第二种方法是通知捆绑/堆叠/分组。根据我的回答这里

通过将通知进行分组,我认为您意味着堆叠捆绑通知

这更多地涉及您在客户端应用程序中处理通知的方式。您只需利用setGroup()将所有通知添加到单个组中,然后调用notify()以让NotificationManager了解更改。

这个将每个通知添加到一个组文档总结了所有内容。


更新:

链接的帖子之一中得知,使用tag参数也是一个选项:

用于替换通知抽屉中现有通知的标识符。

如果未指定,则每个请求都会创建一个新通知。

如果指定并且已经显示了具有相同标签的通知,则新通知将替换通知抽屉中的现有通知。


我最初认为这是为了避免设备“离线”时出现许多通知。如果设备在线,通知将不会分组。我会尝试第二个方法。 - Romulus Urakagi Ts'ai
2
第二种方法似乎只能在应用程序前台使用。当应用程序在后台时,我可以这样做吗? - Romulus Urakagi Ts'ai
@RomulusUrakagiTs'ai 当应用程序在后台运行时,根据您的有效负载结构,通知将以不同的方式进行处理,有时,默认情况下,当通知和数据都在有效负载中时,通知将始终由Android的系统托盘处理。您可以做的一件事是确保仅使用数据有效负载,以便在onMessageReceived()中处理它。 - AL.
由于iOS需要通知字段,因此无法使通知紧凑或在接收通知时获得任何广播,对吗? - Romulus Urakagi Ts'ai
请问 @AL 能帮我解决 这个 吗? - Joan P.
显示剩余3条评论

0

使用相同的ID用于通知,这将覆盖/更新先前的通知。

notification:{
...
id:125,
..
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接