作为firebase,FCM将立即向Android/IOS设备发送推送通知。是否可以像谷歌日历提醒一样,根据用户设置事件提醒时间来安排推送通知?
例如,用户A将事件A设置为在10分钟之前提醒。用户B将事件B设置为在1分钟之前提醒。
我的一个解决方案是每分钟运行一次Cron Job并触发推送通知,但我认为如果有更多的用户,这是无效的。有没有办法在Firebase中安排推送通知?
您可以创建一个触发FCM通知的函数,然后使用Google Cloud Tasks来触发具有相关有效负载的函数。用简单的步骤打破它:
1.当用户设置事件时添加云任务:
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
});
您可以通过云任务应该触发的持续时间。如果您的活动在10小时内,那么只需将36000秒作为参数。10小时后,Cloud任务将触发您发送FCM通知的功能。
2.处理提醒和发送通知:
exports.sendNotifications = functions.https.onRequest((req, res) => {
// read payload from req.body
// process and send FCM notification
});
您应该在谷歌云任务中添加sendNotifications
函数的URL。您可以在文档中阅读有关创建HTTP目标任务的更多信息。
总结流程:
- 用户创建和事件
- 然后,一个云功能创建一个具有适当持续时间的谷歌任务
- 云任务触发您的sendNotifications功能,然后使用FCM触发通知
您可以使用firebase云消息中的调度功能来调度FCM推送通知
参考:https://firebase.google.com/docs/functions/schedule-functions?hl=en
您可以使用时间表功能:
functions.pubsub.schedule().onRun()
这将在cloudscheduler中添加主题,您可以定义它的运行频率。
但问题是,燃烧基地只允许你在现收现付计划(Blaze计划(中使用
就我而言,我做了以下操作:
- 通过插入device_token以及何时在mysqldb表中发送来管理排队
- 编写了一个守护进程,用于查找mysql条目,并在所需的持续时间内运行FCM Push通知调用