如果您正在寻找可以在特定时间执行给定代码的东西,例如调度作业,这里是调度程序库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 函数发布/订阅
Firebase 支持 Pub/Sub 的作业调度,但它不是 Free 或 Flame 计划的一部分。要使用它,您应该在 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来安排推送通知。