【问题标题】:How do I send only one notification to a user in a Database listener in Firebase Functions如何在 Firebase 函数的数据库侦听器中仅向用户发送一个通知
【发布时间】:2021-09-11 05:01:58
【问题描述】:

应用程序的概念很简单,我会跟踪某个商品的价格,并在达到用户想要的价格点时推送通知。

商品的价格(ActualPrice)通过每隔几秒更新一次的 Firebase 实时数据库字段反映出来。

用户及其请求的价格 (RequestedPrice) 保存在 Firestore 文档中,每个文档都有两个字段:

  1. 价格
  2. FCM 令牌

令牌是一个 FCM 令牌,用于向设备推送通知。

在 Firebase Cloud Functions 中,我有一个侦听器,它会在 ActualPrice 每隔几秒通过 .onWrite() 函数发生变化时触发。然后,它交叉比较所有用户的价格,并仅将通知推送给满足 RequestedPrice 的用户。

问题在于,此事件被频繁触发,因此达到价格的用户每隔几秒钟就会收到通知。

我的一个想法是向用户 Firestore 文档添加一个字段,并在用户已经收到通知或尚未收到通知时更新它。唯一的问题是您无法通过 Firebase 函数更改文档字段。

如果您有任何想法,我将不胜感激。


编辑:

const UIDRef = db.collection("/Currency/UserIDs");
const snapshot = await UIDRef.where("Price", ">=", RTDPrice).get();

snapshot.forEach(doc => {
          const Temp = {
            Status: 'Los Angeles',
          };
          doc.set(Temp);

【问题讨论】:

  • "唯一的问题是您无法通过 Firebase 函数更改文档字段。"为什么不?这实际上听起来像我会采用的解决方案,要么将您已经通知的人的信息存储在文档中,要么存储在实时数据库中。
  • @FrankvanPuffelen 据我所知,您只能通过“.add”添加文档,没有向现有文档添加字段的功能。
  • .add() 适用于 COLLECTIONS,您正在寻找适用于 DOCUMENTS 的 docRef.set(data, {mergeoption:true})docRef.update(data) - firebase.google.com/docs/reference/js/…
  • const UIDRef = db.collection("/Currency/UserIDs"); const snapshot = await UIDRef.where("Price", ">=", RTDPrice).get(); snapshot.forEach(doc => { docs.set({Temp: 'Sent'}, {mergeoption:true}); }); 我试过实现这个,虽然我不确定我哪里出错了。 @LeadDreamer
  • 如果您在问题代码中使用doc.update(Temp) 会怎样?

标签: node.js firebase google-cloud-firestore google-cloud-functions firebase-cloud-messaging


【解决方案1】:

您需要在每个用户的 FCM 中保持上次“发送”状态。使用辅助条件,您可以查询日期是否早于当前阈值。 向该用户发送消息后,您只需通过 admin sdk 将当前时间戳更新到数据库

  1. 价格
  2. FCM 令牌
  3. 上次通知

参考资料:

【讨论】:

  • 这就是想法,但弄清楚如何为现有文档添加/更新字段是一项挑战。我已经编辑了问题并添加了一段我不确定为什么不起作用的代码。
  • 是集合/文档路径文字吗?如果是这样,那将是您的问题。
  • 有什么更新吗?为了澄清我之前的评论,您不能从文档路径中查询,它必须从集合路径中解析。
  • 问题最终是我没有使用ref 来更改“doc”数据。所以代替:doc.ref.update 我使用的是doc.update
猜你喜欢
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多