Как выполнить триггерную функцию Firebase Cloud в тот же день и месяц (например, день рождения)? - PullRequest
0 голосов
/ 09 июня 2019

Я хочу отправить уведомление нескольким пользователям через Firebase Cloud Function на его / ее день рождения. У меня есть идентификатор токена устройства пользователя и дата рождения (как дата) в базе данных. Я проверил некоторый скрипт на stackoverflow, но это бесполезно, потому что дата рождения и сегодня имеют только dd / MM похожи. Год всегда разный.

Я пробовал это ( Как вызвать функцию, когда дата, хранящаяся в базе данных firestore, является текущей датой? ), но не работает.

const functions = require('firebase-functions');
const admin = require('firebase-admin');

const cors = require('cors')({ origin: true });
const moment = require('moment');

admin.initializeApp();

exports.sendDailyNotifications = functions.https.onRequest((request, response) => {

    cors(request, response, () => {

       const now = moment();
       const dateFormatted = now.format('DDMMYYYY');

       admin.firestore()
       .collection("userCollection").where("birthDate", "==", dateFormatted)
       .get()
       .then(function(querySnapshot) {

           const promises = []; 

           querySnapshot.forEach(doc => {

               const tokenId = doc.data().tokenId;
               const notificationContent = {
                 notification: {
                    title: "...",
                    body: "...",
                    icon: "default",
                    sound : "default"
                 }
              };

              promises
              .push(admin.messaging().sendToDevice(tokenId, notificationContent));      

          });
          return Promise.all(promises);
       })
       .then(results => {
            response.send(data)
       })
       .catch(error => {
          console.log(error)
          response.status(500).send(error)
       });

    });

});

Я хочу активировать эту функцию в день рождения пользователя. Пожалуйста, помогите мне. Заранее спасибо.

1 Ответ

1 голос
/ 09 июня 2019

Вы написали триггер HTTP. Он будет запускаться при каждом обращении к конечной точке HTTP. Он не может автоматически запускаться в определенный день или время, поэтому без чего-либо другого, вызывающего эту функцию в нужном расписании, ничего не произойдет.

Если вы хотите периодически проверять базу данных на наличие изменений, вы можете написать запланированную функцию , которая запрашивает вашу базу данных о работе каждый день, а затем выполняет ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...