expo pu sh уведомления с использованием облачных функций firebase в react native - PullRequest
0 голосов
/ 29 мая 2020

Просматривая этот учебник на https://www.youtube.com/watch?v=R2D6J10fhA4, я пытаюсь реализовать Send Pu sh Notifications (Expo + Firebase Cloud Functions)

Я пытаюсь написать облачную функцию который отправит уведомление pu sh на все устройства в моей базе данных, если будет добавлена ​​другая запись в базе данных

разбивка будет ...

Моя база данных пользователей структурирована следующим образом - любая помощь или будет очень признателен, так как я все еще изучаю все это.

myFirestoreRealTimeDatabase
|--messages
|------fjdhfsjkf(**Unquiqe Message id**)
|------------message: Test Push Notification
|
|--users
|------EIDdxqEkm6YVRqV3p1x9FDXuX4C2 (**Unquiqe user id**)
|------------email: myemail@email.com
|------------expoToken: "ExponentPushToken[5jxdvMLq123JhBNBCg9gDH0w]"
|
|------JFJdjksfVRqV3p1x9FDXJFJS (**Unquiqe user id**)
|------------email: myemail2@email.com
|------------expoToken: "ExponentPushToken[34jxdfdgkdsjBCg9gDH0w]"

Итак, мне нужно отправить уведомление на все expoToken, когда создается новое сообщение, тогда это необходимо запустите функцию, чтобы использовать сервер ex pu sh, что-то вроде этого.

 .then((messages) => {
        // console.log(messages)
        fetch("https://exp.host/--/api/v2/push/send", {
          method: "POST",
          headers: {
            Accept: "application/json",
            "Content-Type": "application/json",
          },
          body: JSON.stringify(messages),
        });
      })

Это код, который я запустил, но он не работает.

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


    exports.sendPushNotification = functions.database.ref('contacts/').onCreate(event => {
        const root = event.data.ref.root
        var messages = []
        //return the main promise 
        return root.child('/users').once('value').then(function (snapshot) {
            snapshot.forEach(function (childSnapshot) {
                var expoPushToken = childSnapshot.val().expoPushToken;
                    console.log(expoPushToken);
                messages.push({
                    "to": expoPushToken,
                    "sound": "default",
                    "body": "New Note Added"
                });
            });
            //firebase.database then() respved a single promise that resolves
            //once all the messages have been resolved 
            return Promise.all(messages)
        })
            .then(messages => {
                // console.log(messages)
                fetch('https://exp.host/--/api/v2/push/send', {
                    method: 'POST',
                    headers: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify(messages)
                });
            })
            .catch(reason => {
                console.log(reason)
            })
    });

1 Ответ

1 голос
/ 07 июня 2020

Я ошибся при доступе к root

вместо const root = event.data.ref.root

, я должен написать const root = event.ref.root

Поскольку последняя версия Firebase изменилась синтаксис

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