如何使 GCM / FCM 通知类型的消息不可折叠

Gro*_*uez 7 android push-notification firebase google-cloud-messaging firebase-cloud-messaging

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

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

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

Gri*_*orr 2

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

默认情况下,消息是不可折叠的,但通知消息除外,通知消息始终是可折叠的

但后来在同一页上,它接着说:

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

这有点模棱两可。然而,在有效负载部分,它指出:

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

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

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

可能的解决方案

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

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.
}
Run Code Online (Sandbox Code Playgroud)

最后一条注释将您指向示例sendNotification()方法

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