【问题标题】:Can FCM notification on Android overwrite previous one?Android 上的 FCM 通知可以覆盖之前的通知吗?
【发布时间】:2017-02-08 11:54:02
【问题描述】:

我正在使用 FCM 向 Android 设备发送通知。当应用处于后台时,如果我发送 10 条通知,设备将在通知栏上显示 10 条。

我希望 FCM 在通知栏上只输入一项,即新的会覆盖旧的。我没有找到在https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream 设置它的密钥。

有没有办法,或者不可能?谢谢。

【问题讨论】:

标签: android firebase android-notifications firebase-cloud-messaging firebase-notifications


【解决方案1】:

这是可能的。两种方法。

首先是使用collapse_key 参数将消息设置为可折叠消息。参考FCM docs

可折叠消息是一条消息,如果它尚未传递到设备,则可以被包含相同折叠键的新消息替换。

它实际上包含在您提供的link 中(Options 下的第一个参数):

collapse_key - 此参数标识可以折叠的一组消息(例如,使用 collapse_key:“更新可用”),以便在可以恢复传递时仅发送最后一条消息。这是为了避免在设备重新联机或变为活动状态时发送太多相同的消息。

请注意,无法保证消息发送的顺序。

注意:在任何给定时间最多允许使用 4 个不同的折叠键。这意味着 FCM 连接服务器可以同时为每个客户端应用程序存储 4 条不同的发送同步消息。如果超过此数量,则无法保证 FCM 连接服务器将保留哪 4 个折叠键。


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

通过分组通知,我假设您的意思是堆叠bundling notifications

更多关于如何在客户端应用中处理通知。您只需使用 setGroup() 将所有通知添加到单个组,然后调用 notify() 让 NotificationManager 进行更改。

这个Add Each Notification to a Group 文档几乎总结了这一切。


更新:

linked posts 之一,使用tag 参数也是一种选择:

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

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

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

【讨论】:

  • 第一个我认为是在设备“离线”时避免很多通知。如果设备在线,则不会对通知进行分组。我会尝试第二个。
  • @RomulusUrakagiTs'ai 对于第一个,是的。如果您的目标是合并通知,请使用第二种方法。
  • 第二种方法似乎只有在应用程序处于前台时才可用。应用在后台时可以这样做吗?
  • @RomulusUrakagiTs'ai 当应用程序在后台时,根据您的有效负载结构,通知有时会不同,并且默认情况下,当通知和数据都在有效负载中时,通知将是 handled ,通知将始终由 Android 的系统托盘处理。您可以做的一件事是确保仅使用数据有效负载,以便在您的 onMessageReceived() 中处理它。
  • 由于iOS需要通知字段,所以在接收通知时无法将通知压缩或广播吧?
【解决方案2】:

为了实现这一点, 在您的通知负载中,使用标签键

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

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多