使用firebase云功能在特定时间发送FCM通知[重复]
Posted
技术标签:
【中文标题】使用firebase云功能在特定时间发送FCM通知[重复]【英文标题】:Send FCM notification on specific time using firebase cloud function [duplicate] 【发布时间】:2020-02-02 10:44:39 【问题描述】:我正在寻找一种使用云功能在特定时间发送 Firebase 云消息通知的方法。
目前,一旦在 Firestore 数据库中创建了新文档,就会发送通知,并且应该发送通知的时间来自该文档中的时间戳。
我已经研究过创建一个 cron 作业,但我找不到只发送一次通知的方法,而不是每天/每周一次。我还研究了使用 setTimeout 函数,但在这种情况下这似乎是个坏主意,因为每次调用都有时间限制。
我对 typescript 和 firebase 云功能的经验都很少,所以如果有人知道如何做到这一点,我会很高兴!
【问题讨论】:
【参考方案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 函数发布/订阅
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来安排推送通知。
【讨论】:
我希望这个 not 能够可靠地工作,因为 Cloud Functions 服务器实例是短暂的,并且会在各种情况下被释放。 Cloud Functions 代码应该是无状态的,并且不应期望在单个函数执行之外运行。 这也是我担心的。如果时间是在不久的将来,这可能有效,但如果距离几个小时,则无效。 纯粹的实施可能在很长一段时间内(即一年后)没有帮助,这是正确的。但我还发布了另一个基于 firebase-messaging 的解决方案。它有你需要的一切。您需要做的只是从 firebase 包含函数中调用 OneSignal 的 API 并安排推送通知。以上是关于使用firebase云功能在特定时间发送FCM通知[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中使用 Google Firebase 向特定用户发送推送通知?