我正在寻找一种使用云功能在特定时间发送Firebase云消息通知的方法。
目前,在Firestore数据库中创建新文档后,便会立即发送通知,而通知发送的时间则来自该文档中的时间戳。
我已经考虑过创建cron作业,但是我找不到一种只发送一次通知,而不是每天/每周发送一次通知的方法。我还研究了使用setTimeout函数,但是在这种情况下,这似乎是个坏主意,因为每次调用都有时间限制。
我对打字稿和Firebase云功能都缺乏经验,所以如果有人对如何执行此操作有想法,我将感到非常高兴!
答案 0 :(得分:1)
如果您正在寻找可以在特定时间执行给定代码的东西,例如安排工作,这就是计划程序库node-schedule。使用此功能,您可以轻松地在firebase cloud function
中创建计划的作业。它增加了依赖性,但是仍然很容易完成任务。还有,如果要使Firebase函数变为无状态,则必须通过第二个选项。这是该库和云功能的最小示例。
1。使用节点计划
const functions = require('firebase-functions');
var schedule = require('node-schedule');
exports.scheduleSampleJob = functions.https.onRequest((req , res) => {
/*
Say you very specifically want a function to execute at 5:30am on December
21, 2012. Remember - in JavaScript - 0 - January, 11 - December.
*/
var date = new Date(2012, 11, 21, 5, 30, 0);
var j = schedule.scheduleJob(date, function(){
console.log('The Task is executed');
});
return res.status(200).send(`Task has been scheduled`);
});
记住,您只需调用一次此函数,一次调用即可创建多个作业。
2。使用Firebase函数Pub / Sub
Firebase支持Pub/Sub作为作业计划,但它不是免费或火焰计划的一部分。要使用它,您应该在 Blaze 计划上运行。 Pub/Sub
的作用来自官方文档。
如果您希望安排函数在指定时间运行,请使用
functions.pubsub.schedule().onRun()
这种便捷的方法可以创建Google Cloud Pub / Sub主题并使用Google Cloud Scheduler 触发有关该主题的事件,以确保您的功能按预期的时间表运行。
exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
.timeZone('America/New_York') // Users can choose timezone - default is America/Los_Angeles
.onRun((context) => {
console.log('This will be run every day at 11:05 AM Eastern!');
return null;
});
3。使用OneSignal推送通知
如果您不想手动进行计划,则可以使用OneSignal作为替代。它具有适用于Web,IOS,Android和许多其他平台支持的不错的推送通知提供程序,并基于Firebase云消息传递构建。它还支持REST-api支持,您可以使用onesignal内置传递功能安排推送通知。值得尝试这个平台,而不是自己实现。如果您选择通过onesignal,只需创建firebase云功能,即可立即调用OneSignal REST api来安排推送通知。