【问题标题】:Send FCM notification on specific time using firebase cloud function [duplicate]使用firebase云功能在特定时间发送FCM通知[重复]
【发布时间】:2020-02-02 10:44:39
【问题描述】:

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

目前,一旦在 Firestore 数据库中创建了新文档,就会发送通知,并且应该发送通知的时间来自该文档中的时间戳。

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

我对 typescript 和 firebase 云功能的经验都很少,所以如果有人知道如何做到这一点,我会很高兴!

【问题讨论】:

    标签: typescript google-cloud-firestore google-cloud-functions


    【解决方案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 的作业调度,但它不是 FreeFlame 计划的一部分。要使用它,您应该在 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 并安排推送通知。
    猜你喜欢
    • 2021-03-03
    • 2021-10-20
    • 2019-02-23
    • 2021-04-12
    • 2018-06-01
    • 1970-01-01
    • 2021-04-04
    • 2019-10-12
    • 2019-12-18
    相关资源
    最近更新 更多