Typescript 使用firebase云功能在特定时间发送FCM通知

Typescript 使用firebase云功能在特定时间发送FCM通知,typescript,google-cloud-firestore,google-cloud-functions,Typescript,Google Cloud Firestore,Google Cloud Functions,我正在寻找一种在特定时间使用云功能发送firebase云消息通知的方法 目前,在Firestore数据库中创建新文档后,会立即发送通知,并且发送通知的时间来自该文档中的时间戳 我已经考虑过创建cron作业,但是我找不到只发送一次通知的方法,而不是每天/每周发送一次。我还研究了使用setTimeout函数,但在这个场景中这似乎是个坏主意,因为每个调用都有时间限制 我对typescript和firebase云函数都没有什么经验,所以如果有人对如何做到这一点有想法,我会很高兴 如果您正在寻找能够在特定

我正在寻找一种在特定时间使用云功能发送firebase云消息通知的方法

目前,在Firestore数据库中创建新文档后,会立即发送通知,并且发送通知的时间来自该文档中的时间戳

我已经考虑过创建cron作业,但是我找不到只发送一次通知的方法,而不是每天/每周发送一次。我还研究了使用setTimeout函数,但在这个场景中这似乎是个坏主意,因为每个调用都有时间限制


我对typescript和firebase云函数都没有什么经验,所以如果有人对如何做到这一点有想法,我会很高兴

如果您正在寻找能够在特定时间执行给定代码的东西,例如调度作业,那么下面是调度程序库。通过使用此功能,您可以轻松地在
firebase cloud function
中创建计划作业。它增加了依赖性,但仍然有助于轻松完成任务。但是,如果您想使firebase函数成为无状态,则必须执行第二个选项。下面是这个库和云函数的最小示例

一,。使用节点调度

const functions=require('firebase-functions');
var计划=要求(“节点计划”);
exports.scheduleSampleJob=functions.https.onRequest((req,res)=>{
/*
假设您特别希望在12月15日上午5:30执行一个函数
记住——在JavaScript中——0——1月11日——12月。
*/
var日期=新日期(2012、11、21、5、30、0);
var j=schedule.scheduleJob(日期,函数(){
log(“任务已执行”);
});
返回res.status(200).send(`Task has scheduled`);
});
请记住,您只需调用此函数一次,多个调用将创建多个作业

二,。使用Firebase函数发布/订阅

Firebase支持作业调度,但它不是Free或Flame计划的一部分。要使用它,您应该按照Blaze计划运行。以下是官方文件中发布的内容

如果要计划函数在指定时间运行,请使用
functions.pubsub.schedule().onRun()
此方便的方法创建一个Google Cloud发布/订阅主题,并使用Google Cloud Scheduler触发该主题上的事件,确保函数按所需计划运行

exports.scheduledFunctionCrontab=functions.pubsub.schedule('5 11***'))
.timeZone('America/New_York')//用户可以选择时区-默认为America/Los_Angeles
.onRun((上下文)=>{
console.log('这将在每天东部时间上午11:05运行!');
返回null;
});
三,。使用OneSignal推送通知


如果您不想手动安排日程,可以使用它作为替代方案。它有很好的推送通知提供程序,用于Web、IOS、Android和更多平台支持,并构建在firebase云消息之上。它还支持支持,您可以使用onesignal内置的传递功能安排推送通知。值得尝试一下这个平台,而不是自行实现。如果您选择使用onesignal,只需创建firebase云函数,该函数将立即调用onesignal REST api来安排推送通知。

我认为这不会可靠地工作,因为云函数服务器实例是短暂的,并且会在各种情况下解除分配。云函数代码应该是无状态的,不应该期望在单个函数执行之外运行。这也是我担心的。如果时间是在不久的将来,这可能会起作用,但如果距离它有几个小时的时间,则不会起作用。纯实现可能在很长一段时间内(即一年后)没有帮助,这是正确的。但我也发布了另一个基于firebase消息的解决方案。它有你所需要的一切。您只需从firebase clude函数调用OneSignal的API并安排推送通知。