带有 Firebase 的通知系统会在每次重新加载时触发回调

Posted

技术标签:

【中文标题】带有 Firebase 的通知系统会在每次重新加载时触发回调【英文标题】:Notification system with Firebase triggers on callback on every reload 【发布时间】:2015-01-29 06:31:58 【问题描述】:

所以我正在尝试制作一个类似于 Facebook 系统的通知系统。我有一个在后台运行的 cron 作业,当它觉得需要向用户发送通知时,它使用 php (REST) SDK 向 Firebase 发送推送。在仪表板上,我有一个“开启”回调,它为用户获取所有传入的通知,并为每个传入的新通知显示一个通知

var push_ref = firebase_ref.on('child_added', function(push) 
    new PNotify(
        title: 'Notification',
        text: push.val().message,
        ...
    );
);

但是,当我重新加载页面时,所有以前发送的通知都会同时弹出,并在屏幕上填满通知框。我不想删除已发送的推送通知,因为稍后我将创建一个系统来获取它们并将它们放入下拉框中(类似于 Facebook 上的通知下拉列表)。

我的问题是;

如何在保留所有已发送通知的同时禁用 Firebase 在客户端再次上线时返回所有通知?

更新: 再次查看他们的文档,发现他们的检索数据类型非常不同。它在“child_Added”下说它"is triggered once for each existing child and then again every time a new child is added to the specified path"。这就是为什么在我重新加载包含所有现有子项的页面时触发它的原因。

你能看到任何其他可能对我有用的类型吗,因为我还没有找到。

【问题讨论】:

目前还不清楚为什么它们会再次被触发——这不是 Firebase 对暂时断开连接的正常行为。您是在使用 goOffline() 还是重新创建侦听器?似乎我们在这里遗漏了一些重要的背景。 我只使用此处提供的代码和行来启动新的 Firebase 连接 (new Firebase())。 @加藤 检查我的更新,它可能会帮助你帮助我。 @加藤 感谢您的澄清。我怀疑您的用例可以大大简化,并且您已经使这比必要的复杂得多。但对于您提出的问题的答案,请参阅 here 和 here。 太好了,解决了我的问题。谢谢@加藤 【参考方案1】:

您可以让客户端更新收到的每条消息,以确认它已显示(设置acknowledged = true 或其他)。然后使用确认字段过滤 UI 处理以仅突出显示未确认的消息。

这假定消息是特定于用户的,或者您的数据结构将需要消息/用户映射来保存确认。

如果用户正在阅读公共消息流,您可以保存用户特定的lastReadDate 或过滤掉旧消息的内容。

【讨论】:

谢谢,在我对这个问题做进一步研究的同时,我会采用这个解决方案。

以上是关于带有 Firebase 的通知系统会在每次重新加载时触发回调的主要内容,如果未能解决你的问题,请参考以下文章

在路线的每次变化中重新加载firebase中的物品

Web firebase.messaging().onMessage 未触发,但后台通知完美触发

firebase 删除值导致 tableview 重新加载元素的两倍

每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用

使用 firebase 动态链接下载应用并删除并重新下载会在链接中返回一个值

Gulp Browsersync会在每次文件更改时导致多次重新加载