如何动态发送 FCM 推送通知?

时间:2021-07-15 05:45:50

标签: javascript firebase firebase-cloud-messaging

由于 firebase FCM 会立即向 Android/IOS 设备发送推送通知。是否可以根据用户在 Google 日历提醒中设置事件提醒时间的方式来安排推送通知?

例如,用户 A 将事件 A 设置为在 10 分钟前提醒。 用户 B 设置事件 B 以在 1 分钟前提醒。

我拥有的一个解决方案是每分钟运行一次 Cron Job 并触发推送通知,但如果有更多用户,我认为这不会有效。 有没有办法在 Firebase 中安排推送通知?

2 个答案:

答案 0 :(得分:0)

您可以创建一个触发 FCM 通知的函数,然后使用 Google Cloud Tasks 使用相关负载触发该函数。用简单的步骤打破它:

1.当用户设置事件时添加 Cloud Task:

exports.addEvent = functions.https.onCall((data, context) => {
  // add data in database
  // add a Google Cloud Task
  return

  // Alternatively, you can add the event directly to database
  // and then use Firebase/Realtime DB triggers for Cloud Functions
});

您可以传递应触发 Cloud Tasks 的持续时间。如果您的事件发生在 10 小时内,则只需传递 36000 秒作为参数。 10 小时后,Cloud 任务将触发您发送 FCM 通知的函数。

2.处理提醒并发送通知:

exports.sendNotifications = functions.https.onRequest((req, res) => {
  // read payload from req.body
  // process and send FCM notification
});

您应该在 Google Cloud Task 中添加 sendNotifications 函数的 URL。您可以在文档中阅读有关 creating HTTP target tasks 的更多信息。

总结流程:

  1. 用户创建和事件
  2. 然后,云函数会创建一个具有适当持续时间的 Google 任务
  3. 云任务触发您的 sendNotifications 函数,然后该函数使用 FCM 触发通知。

答案 1 :(得分:0)

您可以使用 firebase 云消息传递中的日程安排功能来安排您的 FCM 推送通知

参考:https://firebase.google.com/docs/functions/schedule-functions?hl=en

您可以使用日程功能:

functions.pubsub.schedule().onRun()

这将在 cloudcheduler 中添加主题,您可以定义它必须运行的频率。

但问题是,firebase 允许您仅将其用于现收现付计划(Blaze 计划)

就我而言,我执行了以下操作:

  1. 通过插入 device_token 以及何时发送到 mysql 数据库表来管理队列
  2. 编写了一个守护进程,用于查找 mysql 条目并在所需的持续时间内运行 FCM 推送通知调用。