当存储在消防仓库数据库中的日期是今天的日期时,如何触发函数



我正在创建一个应用程序,当今天的日期与数据库中存储的日期匹配时,我需要在该应用程序中发送推送通知,以便发送推送消息。如何做到这一点?

更新:

您可以使用计划的云函数,而不是编写通过在线CRON作业服务调用的HTTPS云函数。Cloud Function代码保持完全相同,只是触发器发生了变化。

在编写初始anwser时,Scheduled Cloud Functions不可用。


在不了解数据模型的情况下,很难给出准确的答案,但为了简化,让我们想象一下,您在每个文档中存储一个名为notifDate的字段,格式为DDMMYYY,并且这些文档存储在一个名称为notificationTriggers的集合中。

您可以编写如下HTTPS云函数:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const cors = require('cors')({ origin: true });
const moment = require('moment');
admin.initializeApp();
exports.sendDailyNotifications = functions.https.onRequest((request, response) => {
cors(request, response, () => {

const now = moment();
const dateFormatted = now.format('DDMMYYYY');
admin.firestore()
.collection("notificationTriggers").where("notifDate", "==", dateFormatted)
.get()
.then(function(querySnapshot) {
const promises = []; 
querySnapshot.forEach(doc => {

const tokenId = doc.data().tokenId;  //Assumption: the tokenId is in the doc
const notificationContent = {
notification: {
title: "...",
body: "...",  //maybe use some data from the doc, e.g  doc.data().notificationContent
icon: "default",
sound : "default"
}
};
promises
.push(admin.messaging().sendToDevice(tokenId, notificationContent));      

});
return Promise.all(promises);
})
.then(results => {
response.send(data)
})
.catch(error => {
console.log(error)
response.status(500).send(error)
});
});
});

然后,你可以每天通过在线CRON招聘服务呼叫这个云功能,比如https://cron-job.org/en/.

有关如何在云功能中发送通知的更多示例,请查看这些SO答案当firebase实时数据库中添加新节点时,使用云功能发送推送通知?,node.js firebase部署错误或firebase:Cloud Firestore触发器不适用于FCM。

如果你不熟悉Promises在云功能中的使用,我建议你观看关于";JavaScript承诺";来自Firebase系列视频:https://firebase.google.com/docs/functions/video-series/

您将注意到在上面的代码中使用了Promise.all(),因为您正在并行执行几个异步任务(sendToDevice()方法)。这在上面提到的第三个视频中有详细说明。

使用谷歌云功能计划触发器https://cloud.google.com/scheduler/docs/tut-pub-sub

使用定时触发器,您可以通过使用unix cron格式指定频率来指定调用函数的次数。然后在该功能中,您可以进行日期检查和其他所需的逻辑

相关内容

  • 没有找到相关文章

最新更新