使用 Firebase FCM 时为什么无法折叠推送通知?

2023-11-21

const options = {
    priority: 'high',
    collapseKey: user_id
};
const deviceTokensPromise = db.ref('/users-fcm-tokens/' + user_id).once('value');
deviceTokensPromise.then(tokensSnapshot => {
    if (!tokensSnapshot.hasChildren()) {
        return console.log('There are no device tokens to send to.');
    }
    const tokens = Object.keys(tokensSnapshot.val());
    console.log(tokens);
    console.log(payload);
     return admin.messaging().sendToDevice(tokens, payload, options).then(response => {
         console.log(response);
         return removeInvalidFCMTokens(tokensSnapshot, response);
     });
});

我的选项中有一个折叠键字段。

运行此代码时,iPhone 会收到多个通知,所有通知都相互叠加。我希望用最新的通知取代之前的通知。


查看“交付选项”部分Firebase 的 FCM 消息文档.

Android 通过 FCM 支持“可折叠”消息行为collapse_key,在 iOS 上通过apns-collapse-id,并在 JavaScript/Web 上通过Topic.

直觉上你可能会期望apns-collapse-id设置可能会进入options参数传入sendToMessage您正在使用的方法。然而,这种情况并非如此。相反,尝试将其修补到payload对象,像这样:

const patchedPayload = Object.assign({}, payload, {
    apns: {
        headers: {
            'apns-collapse-id': user_id
        }
    }
});

这遵循payload上面链接的文档中提供的格式。

一旦你构建了这个修补过的有效负载,不要忘记更新sendToDevice(tokens, payload, options) to sendToDevice(tokens, patchedPayload, options).

希望这对你有用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Firebase FCM 时为什么无法折叠推送通知? 的相关文章

随机推荐

  • 使用用户帐户凭据访问私有 Cloud Run/Cloud Functions

    这是我的用例 我已经以私有模式部署了 Cloud Run 服务 与云功能相同的问题 我正在开发一项使用此 Cloud Run 的新服务 我使用应用程序中的默认凭据进行身份验证 它适用于 Compute Engine 和 Cloud Run
  • android挂起意图通知问题

    我的应用程序中有一个警报 它会启动一个通知 然后在按下时启动一个活动 问题是 当我创建多个警报时 从通知启动的活动将获得与第一个警报相同的额外内容 我认为问题要么在于我放入待决意图中的意图 要么在于待决意图本身 我想我可能需要在其中一个上挂
  • 如何在 OS X Yosemite 上的 Apache 2.4 中安装 mod_perl 2.0.9?

    随着 OS X 10 10 Yosemite 的发布 Apple 将其 Apache 服务器升级到了 2 4 版本 发布时 mod perl 2 0 8 与 Apache 2 4 不兼容 mod perl 2 0 9 尚未正式发布 更多信息
  • 模拟本地主机上的慢速互联网连接

    我使用 c asp net 和 iis 我想在我的电脑上模拟慢速互联网连接来测试我的应用程序 我可以控制iis的带宽吗 请不要建议 System Threading Thread Sleep someDuration 在 c 文件中 您可以
  • Android 图像捕捉时内存不足

    我有一个拍摄照片的活动 具有全部可能的分辨率 因此相当大 应用程序有机会分析它们 一次仅处理一张照片 问题是我在拍了 4 5 张照片后遇到了 内存不足 的情况 我懂了 dalvikvm heap 5070745 字节分配内存不足 字节大小不
  • 如何使用 Float(在打印样式表中)修复此打印布局?

    我有一个页面 其中包含网格格式的多个图表 如下所示 每个图表都显示在一个包装中float left图表所在的 div 有overflow auto 这给出了将图表包裹到屏幕宽度的所需布局 我遇到的问题是 在打印模式下 这只打印一页并丢失其余
  • TableView 就像 iPhone 中的通讯录应用程序

    嘿 我正在开发一个联系人应用程序 我想要具有相同类型的 Tableview 和添加按钮 因此 当用户添加新联系人时 它将打开一个新视图 其中包含标准按钮和文本字段等 如何使应用程序向每个新视图添加相同的功能 我希望这是有道理的 先感谢您 这
  • 包括 javascript 到 google 网站

    我试图在 Google 协作平台中包含一个简单的 javascript 但按下按钮时我什么也没得到 我将代码放入 HTML 框中 该代码在本地测试时完美运行 这是我的代码
  • 如何使用 ArrayList 正确实现 Parcelable?

    我在上课时遇到困难Parcelable 问题是 我正在尝试向包裹中的一个成员写信 该成员是ArrayList
  • 与R语言匹配以获得位置

    我使用 match 来获取元素是否在列表中 例如我的清单是 c a b h e and so on 如果我想查看元素 h 是否在列表中 我可以这样使用 match if h in v do something 如何获取列表中找到元素的位置
  • Firestore 安全规则:仅当新文档 ID 与用户 ID 相同时才允许用户创建文档

    当用户第一次登录时 我还需要调用一个函数 在我的 firestore 用户集合中创建一个文档来存储他们的个人资料数据 使用Web SDK 我之前使用带有 firebase 函数的新用户触发事件 但等待冷函数启动的速度太慢 安全规则要求 需要
  • Haskell:模块导入带来不必要的二进制增长

    当我通过以下方式之一将 大 模块导入主模块时 import Mymodule import qualified Mymodule as M import Mymodule MyDatatype 与我不导入该模块时相比 编译后的二进制文件增长
  • 如何限制android中edittext的输入时间

    我必须允许用户在动态编辑文本中仅输入 格式的时间 有什么方法可以实现吗 我使用了下面的代码 但它不起作用 我可以输入超过 24 个值的数字 例如 45623 5689 edit setInputType InputType TYPE DAT
  • 如何使用 Edge 浏览器在 VSCode 中调试 Angular 应用程序?

    我在用边缘延伸 下面是配置launch json configurations name ng serve type edge request launch url http localhost 4200 webRoot workspace
  • 自定义图例/图像作为传单地图中的图例

    我用自定义图标作为标记构建了一个地图 您可以在我的 jsfiddle 中查看代码和结果 https jsfiddle net marielouisejournocode x24stb0m 我尝试更改 正常 图例代码以将图片放在那里 但我对
  • 由于(据称)未跟踪的文件而导致文件覆盖的 Git 警告

    尝试从 git repo 中拉取 但得到以下输出 我认为这些文件被跟踪 它们应该被跟踪 但它表明它们没有被跟踪 它们不在 gitignore 中 我在分支后面进行了大约 5 10 次提交 git pull rebase origin mas
  • 观察 Vuejs 中 window.scrollY 的变化

    我有一个非常简单的应用程序 有 2 个组件 App vue和另一个组件 Home vue我在其中保存应用程序的其余结构 粘性标题和一些带有可滚动到的锚点的部分 我想对粘性标题应用一个类 以在页面滚动时最小化徽标 所以我想我会留意任何变化wi
  • 按值传递(StringBuilder 与 String)[重复]

    这个问题在这里已经有答案了 我不懂为什么System out println 名称 输出Sam不受方法的 concat 函数的影响 而System out println 名称 输出Sam4作为该方法的追加方法的结果 为什么 StringB
  • 使用新模型和防护的 Laravel 身份验证失败:未定义索引:模型

    我正在尝试使用额外的模型和防护来验证我的 Laravel 应用程序 5 8 问题是 我在以下登录方法中收到 未定义索引 模型 错误 有什么想法我做错了吗 我已经在 Laravel 5 7 版本中使用了这个集成 并且它在那里工作没有任何问题
  • 使用 Firebase FCM 时为什么无法折叠推送通知?

    const options priority high collapseKey user id const deviceTokensPromise db ref users fcm tokens user id once value dev