Создание автоматических уведомлений с помощью Firebase Cloud Functions, Messaging, Firestore - PullRequest
0 голосов
/ 19 мая 2019

Я пытался отправить уведомления с помощью триггера .onUpdate (), но это не работает.Я не уверен, что не так, поскольку все, что я нахожу в документах, бесполезно, и я впервые работаю с Node.js.

Я хочу уведомить пользователя (с помощью Firebase Messaging), когда какой-либо продукт будет обновлен (в базе данных Firebase Realtime) с использованием облачных функций Firebase, что происходит после отправки заказа, и требование состоит в том, чтобы запас продукта был <= 5. </p>

Структура коллекции выглядит следующим образом: продукты (коллекция) -> {productID} (документ) -> атрибуты: {имя, штрих-код, цена, запас, продано}

    //import firebase
const functions = require('firebase-functions');

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

exports.sendNotification = functions.database.ref('/products/{product}')
.onUpdate((change, context) => {
        const prodName = context.data.child('name');
        const numProd = context.data.child('stock');
        if(numProd<=5){
        const payload = {
          notification: {
          title: 'Low stock!',
          body: `Product ${prodName} is running out.`
        }
      }

      const registrationToken = 'token'; 
     return admin.messaging().sendToDevice(registrationToken,payload)
    .then(function(response){
         console.log('Notification sent successfully:',response);
         return 1;
    })
    .catch(function(error){
         console.log('Notification sent failed:',error);
          });
        }    
});

1 Ответ

1 голос
/ 19 мая 2019

Видимо вы смешиваете две службы базы данных Firebase: Firestore и База данных реального времени .

Фактически, вы указываете, что ваши данные организованы в коллекций («Структура коллекции такая: products (collection) -> {productID} (document)»), что означает что вы используете Firestore (база данных реального времени не имеет коллекций).

Но ваш фоновый триггер соответствует триггеру базы данных в реальном времени, см. https://firebase.google.com/docs/functions/database-events.

Если предположение, что вы смешиваете две службы базы данных, верно, вам нужно использовать фоновый триггер для Firestore, см. https://firebase.google.com/docs/functions/firestore-events,, в частности onUpdate(), как показано ниже:

exports.updateUser = functions.firestore
    .document('/products/{productId}')
    .onUpdate((change, context) => {
      // Get an object representing the document
      const newValue = change.after.data();

      const prodName = newValue.name;
      const numProd = newValue.stock;

      // ...
    });

Обратите внимание, что, похоже, вы неправильно обрабатываете случай, когда numProd > 5. Вы можете выдать ошибку или просто сделать return null;

Также неплохо посмотреть 3 видео о «Обещаниях JavaScript» из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/.

...