Как передавать данные между облачными функциями Firebase - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь получить текущий идентификатор пользователя из приложения, отправляя запросы https для вызова функций из клиентского приложения. Это работает, и я получаю UID. Проблема заключается в том, что всякий раз, когда запускается функция onWrite (), мне нужно отправлять уведомления конкретному пользователю под конкретным идентификатором пользователя. Как я могу передать uid, полученный из моих функций https, в функции триггера?

Я только что получил идентификатор пользователя текущего пользователя из клиентского приложения, используя https.onCall (). Затем в функции триггера я пытаюсь отправить уведомления определенному пользователю, классифицированному uid, с помощью API push-уведомлений expo.

функция / index.js

const functions = require('firebase-functions');
var fetch = require('node-fetch')

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


exports.getUid = functions.https.onCall((data, context) => {
    uid = data.text
    console.log(data.text)
})

exports.makerOrders = functions.database.ref('orders')
    .onWrite((snapShot, context) => {
        console.log('functions is triggered :)')

    return admin.database().ref('Notifications').child(uid)
        .once('value')
        .then((shot) => {
            var message = []

            var tokens = shot.val().expoTokens;

            if (tokens) {
                message.push({
                    "to": tokens,
                    "body": "Notifications are working fine :)"
                })
            }
            return Promise.all(message)
        }).then(message => {
            fetch('http://exp.host/--/api/v2/push/send', {
                method: "POST",
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json"
                },
                body: JSON.stringify(message)
            })
            return Promise.all(message)
        })
})

App.js

var uid = firebase.auth().currentUser.uid
var getUid = firebase.functions().httpsCallable('getUid')
getUid({text: uid}).then(result => {
  var msg = result.data
  console.log(msg)
  console.log('Called successfully :)')
}).catch(error => {
  console.log('Error :( in sending the requests')
});

Я ожидаю получить значение uid текущего пользователя из приложения, чтобы я мог отправлять push-уведомления этому конкретному пользователю.

Я не могу получить uid для текущего авторизованного пользователя.

1 Ответ

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

Для передачи данных между функциями есть два способа сделать это. Вы можете использовать функцию, которая вызывается HTTP-запросом , или функцию, которая запускается Pub / Sub topic .

HTTP:

  1. Создание облачной функции с HTTP-триггером
  2. Откройте сведения о созданной функции, и на вкладке Trigger вы найдете URL, который вызывает функцию. Используйте это URL для анализа данных из другой функции.
  3. В другой функции запустите запрос, используя этот URL и добавьте в конце '? Data = DATA_T0_SEND'
  4. Поймать данные из второй функции, используя return request.args.get('data')

Pub / Sub:

  1. Создайте облачную функцию, которая запускается темой Pub / Sub.
  2. В другой функции используйте библиотеку Pub / Sub для отправки данных в тему
  3. Когда функции будут вызваны событием Pub / Sub, получите данные
  4. Теперь обработайте данные из этого события
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...