Отправка уведомлений Expo pu sh из облачных функций Firebase - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь написать облачную функцию, которая будет отправлять уведомление 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 когда создается новый message, тогда нужно запустить функцию для использования сервера подверженности 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)
        })
});

...