Firebase 在特定时间发送通知

标签 firebase firebase-cloud-messaging google-cloud-functions

我有一项任务是使用 Firebase 进行云提醒。我的数据库中有一个提醒时间戳。所以我需要在那个时候发送通知。

在 Firebase 测试控制台中有一个在特定时间发送通知的选项,但我在 MessagingOptions 中没有看到这个选项.

那么使用 Firebase 函数实现云提醒的最佳方法是什么?
另外:提醒时间可以更改或删除。

最佳答案

取决于你的项目范围。

  • 例如,如果您的项目仅适用于一种类型的移动客户端,则仅适用于 Android。然后在设备上设置警报,并使用 Firebase 数据库作为数据持久化,让用户在安装和设备之间拥有完美的体验。
  • 如果您的项目还必须用于 Web,并且将电子邮件与通知一起发送,那么您将必须安排一个 cron 作业。这里唯一的问题是警报必须有多准确。这是重要的细节,因为如果警报需要准确,您将不得不每分钟安排一个 cronjob,非常浪费,如此频繁地查询数据库会很快消耗您的使用配额。此外,移动设备的节能模式在此期间并不完全处于事件状态,因此系统可以将推送通知延迟到下一个维护窗口。我的建议是将警报缩小到 30 或 15 分钟的窗口。因此,您可以安排将在该时间段内查询数据库中的对象的 cronjob。
  • 对于安排 cron 作业,我建议您阅读此 Firebase blog post
  • 对于使用 FCM 发送推送通知,我建议检查 Functions samples on Github
  • 最好从函数开始是 this video
  • 对于您的数据库结构,请参见下面的示例


  • {
      "user_alarms": {
        "uid1": {
          "pushkey1": {
            "full_object": "goes here"
          },
          "pushkey2": {
            "full_object": "goes here"
          }
        },
        "uid2": {
          "pushkey3": {
            "full_object": "goes here"
          },
          "pushkey4": {
            "full_object": "goes here"
          }
        }
      },
      "alarms": {
        "pushkey1": {
          "reduced_object": "mainly_the_time"
        },
        "pushkey4": {
          "reduced_object": "mainly_the_time"
        }
      }
    }

    user_alarms节点包含每个用户警报,这样用户可以看到所有设置的警报。节点alarms是原始节点的非规范化,是每个 cron 作业要查询的节点。它包含一个更简单的对象,只需要对即将到来的警报执行查询,主要是触发时间。为了在发送 FCM 推送后提高性能,应删除相应的对象。

    关于Firebase 在特定时间发送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48686423/

    相关文章:

    android - ListItem 缺少没有参数的构造函数

    javascript - 如何为收到的每个推送通知增加应用程序徽章编号

    node.js - 部署 Firebase Cloud Functions 时出现错误

    android - 点击通知未启动应用程序

    android - FCM token 检索失败 RST

    java - 检查 Firebase Cloud Messaging 上的新通知。 (流式细胞术)

    android - 使用 Node.JS 向 Firebase 发出 HTTPS 请求

    node.js - Firebase onRequest 并非显示所有 header

    android - 如何创建包含 = 符号的 firebase 路径(不转换为 %3D)

    firebase - 检查 Firestore 上是否存在文档,无需 get() 完整文档数据