android - 如何使 GCM / FCM 通知类型的消息不可折叠
问题描述
Google Cloud Messaging (GCM) 支持两种类型的推送消息:“通知”消息和“数据”消息。根据文档,默认情况下通知消息是可折叠的,而默认情况下数据消息是不可折叠的。
为了使数据消息可折叠,您需要指定一个collapseKey
. 我的问题是:如何使通知消息不可折叠?
注意:该问题也适用于 Firebase Cloud Messaging (FCM)。
解决方案
消息概念和选项文档指出:
消息默认是不可折叠的,通知消息除外,通知消息总是可折叠的
但后来在同一页面上,它继续说:
除通知消息外,所有消息默认不可折叠
这有点模棱两可。但是,在有效负载部分中,它指出:
[通知消息] 可能有可选的数据负载。始终可折叠
因此,似乎不可能使通知消息不可折叠。
我建议这是设计使然,因为在 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 创建新通知并且不会替换任何现有通知 - 因此,使消息不可折叠。
推荐阅读
- html - 徽标未出现在引导程序的导航栏中
- c# - Hangfire 中的“工作”字段具有空值或空值
- ssh-keys - VS Code Remote 总是要求输入密码
- arrays - Perl,`map`函数的未知结果
- r - devtools::install_github("Bioconductor/BiocManager", ref="ghost-binary-repo") 中的错误
- r - 不要在 Shiny 中的电子邮件正文中的反应对象中显示任何文本或错误
- docusignapi - 使用 DocuSign API 时是否有任何与锁定/阻止 DocuSign 帐户访问相关的内容?
- neural-network - NLP ELMo model pruning input
- javascript - How do we know that var declarations are hoisted?
- python - Highlighting element with Selenium in Python