首页 > 解决方案 > 如何使 GCM / FCM 通知类型的消息不可折叠

问题描述

Google Cloud Messaging (GCM) 支持两种类型的推送消息:“通知”消息和“数据”消息。根据文档,默认情况下通知消息是可折叠的,而默认情况下数据消息是不可折叠的。

为了使数据消息可折叠,您需要指定一个collapseKey. 我的问题是:如何使通知消息不可折叠?

注意:该问题也适用于 Firebase Cloud Messaging (FCM)。

标签: androidfirebasepush-notificationgoogle-cloud-messagingfirebase-cloud-messaging

解决方案


消息概念和选项文档指出:

消息默认是不可折叠的,通知消息除外,通知消息总是可折叠的

但后来在同一页面上,它继续说:

除通知消息外,所有消息默认不可折叠

这有点模棱两可。但是,在有效负载部分中,它指出:

[通知消息] 可能有可选的数据负载。始终可折叠

因此,似乎不可能使通知消息不可折叠。

我建议这是设计使然,因为在 Android 中创建通知时,会在发布另一个具有相同 ID 的通知时自动替换它们(类似于折叠消息的工作方式)。如果我没记错的话,FCM/GCM 对所有通知消息使用相同的 ID。

可能的解决方案

如果您确实需要不可折叠的通知消息,我建议发送仅数据有效负载(没有通知或collapseKey),然后覆盖onMessageReceived()fromFirebaseMessagingService以创建您自己的通知。

Android 快速入门示例中提供了一个示例:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // ...

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());

        // ...
    }

    // ...

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}

那里的最后一条评论将您指向示例sendNotification()方法

对于您的方案,您需要将唯一 ID 传递给notificationManager.notify()调用,以便 Android 创建新通知并且不会替换任何现有通知 - 因此,使消息不可折叠。


推荐阅读