Как вызвать функцию, когда дата, хранящаяся в базе данных пожарного магазина, является сегодняшней датой? - PullRequest
0 голосов
/ 23 января 2019

Я создаю приложение, в котором мне нужно отправить push-уведомление, когда сегодняшняя дата совпадает с датой, сохраненной в базе данных, чтобы отправить push-уведомление.Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Не зная вашей модели данных, трудно дать точный ответ, но давайте представим, для упрощения, что вы храните в каждом документе поле с именем notifDate в формате DDMMYYY и что эти документы хранятся в коллекции с именем notificationTriggers.

Вы можете написать облачную функцию HTTPS следующим образом:

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("notificationTriggers").where("notifDate", "==", dateFormatted)
       .get()
       .then(function(querySnapshot) {

           const promises = []; 

           querySnapshot.forEach(doc => {

               const tokenId = doc.data().tokenId;  //Assumption: the tokenId is in the doc
               const notificationContent = {
                 notification: {
                    title: "...",
                    body: "...",  //maybe use some data from the doc, e.g  doc.data().notificationContent
                    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)
       });

    });

});

Затем вы будете вызывать эту облачную функцию каждый день с онлайн-службой CRON, например https://cron-job.org/en/.

Дополнительные примеры отправки уведомлений в облачных функциях приведены в этих SO-ответах Отправка push-уведомлений с использованием облачной функции, когда новый узелдобавлено в базу данных реального времени firebase? , node.js Ошибка развертывания firebase или Firebase: триггер облачного пожарного хранилища не работает для FCM .

Если вы не знакомыс использованием обещаний в облачных функциях я бы посоветовал вам посмотреть 3 видео о «обещаниях JavaScript» из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/

Вы не будетет. е. использование Promise.all() в приведенном выше коде, поскольку вы выполняете несколько асинхронных задач (метод sendToDevice()) параллельно.Это подробно описано в третьем видео, упомянутом выше.

0 голосов
/ 23 января 2019

Использование Google Cloud Functions по расписанию https://cloud.google.com/scheduler/docs/tut-pub-sub

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

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