如何动态发送FCM推送通知



作为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目标任务的更多信息。

总结流程:

  1. 用户创建和事件
  2. 然后,一个云功能创建一个具有适当持续时间的谷歌任务
  3. 云任务触发您的sendNotifications功能,然后使用FCM触发通知

您可以使用firebase云消息中的调度功能来调度FCM推送通知

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

您可以使用时间表功能:

functions.pubsub.schedule().onRun()

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

但问题是,燃烧基地只允许你在现收现付计划(Blaze计划(中使用

就我而言,我做了以下操作:

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

最新更新