每日Firebase HTTP请求以触发FCM通知

时间:2017-08-06 16:29:34

标签: firebase firebase-cloud-messaging google-cloud-functions

我已在我的应用中启动并运行FCM,我可以根据存储在用户个人资料中的fcmToken通过Firebase控制台向所有用户或特定用户发送通知。

我的应用程序允许用户提交每日更新,回答一系列有关其健康状况的问题。每当用户执行此操作时,我将子路径/ userId / lastDailyUpdate更新为yyyyMMdd(即20170805)形式的日期作为整数。我执行此操作,以便在用户已在特定日期提交输入时隐藏问题并提交视图。

我现在要做的是在晚上8点将Firebase云功能与每日cron作业结合使用,以检查用户是否已提交答案。简而言之,如果当前日期(yyyyMMdd为Int)大于/ userId / lastDailyUpdate中存储的日期Int发送通知。

我可以使用云功能发送通知,但找不到循环浏览数据库中所有用户并检查其lastDailyUpdate值的方法。到目前为止我的代码:

    let functions = require('firebase-functions');
    let admin = require('firebase-admin');
    admin.initializeApp(functions.config().firebase);

    exports.sendDailyReminder = functions.https.onRequest((request, response) => {
    response.send("Daily Reminder Function");

    let userId = "P3fPW62PaxX45Ccvo4OiyOk6fJC2"

    // See the "Defining the message payload" section below for details
    // on how to define a message payload.
    var payload = {
        notification: {
            title: 'Had a healthy day?',
            body: 'Submit you stats before you go to sleep.',
            badge: '1',
            sound: 'default'
        }
    };
    return admin.database().ref('/users/P3fPW62PaxX45Ccvo4OiyOk6fJC2/fcmToken').once('value').then(allToken => {
        if (allToken.val()) {
            const token = Object.keys(allToken.val());
            return admin.messaging().sendToDevice(token, payload).then(response => {
            });
        }
    });
    });

以上代码有效,但您可以想象我想发送给多个用户:)

lastDailyUpdate值的路径(对于用户' P3fPW62PaxX45Ccvo4OiyOk6fJC2'在本例中)是:

    '/users/P3fPW62PaxX45Ccvo4OiyOk6fJC2/lastDailyUpdate'

我只是编程了一会儿,我知道很多JS,但这些功能让我感到困惑。有没有人可以帮助我朝着正确的方向前进?

我正在考虑触发for循环的HTTP请求,该循环检查lastDailyInput值,如果小于当前日期触发器,则发送通知。

任何有关代码或提示的帮助(可能在Express / Node.js的速成课程中)都将非常感激。

0 个答案:

没有答案