【问题标题】:How to send FCM push notification dynamically?如何动态发送 FCM 推送通知?
【发布时间】:2021-09-24 01:12:52
【问题描述】:
由于 firebase FCM 会立即向 Android/IOS 设备发送推送通知。是否可以像谷歌日历提醒一样根据用户设置事件提醒时间的方式来安排推送通知?
例如,用户 A 将事件 A 设置为在 10 分钟之前提醒。
用户 B 设置事件 B 1 分钟前提醒。
我拥有的一个解决方案是每分钟运行一次 Cron Job 并触发推送通知,但我认为如果有更多用户,这不是有效的。
有没有办法在 Firebase 中安排推送通知?
【问题讨论】:
标签:
javascript
firebase
firebase-cloud-messaging
【解决方案1】:
您可以创建一个触发 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 的更多信息。
总结流程:
- 用户创建和事件
- 然后,云函数会创建一个具有适当持续时间的 Google 任务
- 云任务触发您的 sendNotifications 函数,然后使用 FCM 触发通知。
【解决方案2】:
您可以使用 Firebase 云消息传递中的计划功能来安排您的 FCM 推送通知
参考:https://firebase.google.com/docs/functions/schedule-functions?hl=en
你可以使用调度功能:
functions.pubsub.schedule().onRun()
这将在 cloudscheduler 中添加主题,您可以定义它必须运行的频率。
但问题是,Firebase 仅允许您在按需付费计划(Blaze 计划)中使用它
就我而言,我做了以下事情:
- 通过插入 device_token 和何时发送 mysql 数据库表来管理队列
- 编写了一个守护进程,用于查找 mysql 条目并在所需的持续时间内运行 FCM 推送通知调用。