Значение моментального снимка Firebase, возвращающее ноль из облачной функции - PullRequest
0 голосов
/ 25 октября 2018

* Удаление изображения

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

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

Итак, ключевое значение, показанное здесь: [FCMtoken: true]

Я путаюсь с тем, как работать с Javascript, вот моя функция, которая возвращает нулевые значения, хотя я ожидаю, что она будет возвращать устройстваFCMtoken.

exports.notificationForCommunicationAdded = functions.database.ref('/{pharmacyId}/orders/{orderId}/communications')
.onWrite(event => {

    const payload = {
        notification: {
            title: 'New communication added',
            body: 'Check it out!'
        }
    };

    const getDeviceTokensPromise = admin.database().ref('/{pharmacyId}/userDevices/{deviceToken}').once('value');

    let tokensSnapshot;

    let tokens;

    return getDeviceTokensPromise.then(results => {
        tokensSnapshot = results;

        if (!tokensSnapshot.hasChildren()) {
            return console.log('There are no notification tokens to send to');
        }

        console.log('There are', tokensSnapshot.numChildren(), 'tokens to send to');

        tokens = Object.keys(tokensSnapshot.val());

        console.log('These are the tokens', tokens)

        return null;
    });
});

Старайтесь, как я мог, продолжать получать значение "null" в качестве возвращаемого значения.

Помощь будет высоко ценится, спасибо, ребята и девочки.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Наконец-то он работает со следующим синтаксисом:

... const pharmacyId = context.params.pharmacyId;

admin.database (). Ref (/ + pharmacyId+ /userDevices). Once ('значение'). Then ((снимок) => {...

По какой-то причине предоставленный Дагом Стивенсоном синтаксис у меня не сработал.

0 голосов
/ 25 октября 2018

Когда вы обращаетесь к базе данных, вы не можете выполнять подстановку переменных следующим образом:

admin.database().ref('/{pharmacyId}/userDevices/{deviceToken}')

Эти фигурные скобки воспринимаются буквально.Они не работают как символы подстановки в вашем определении функции.Вам нужно будет создать строку, используя значения подстановочных знаков, используя параметр context, который вы не объявляете.Во-первых, вам нужно объявить вашу функцию следующим образом:

exports.notificationForCommunicationAdded =
  functions.database.ref('/{pharmacyId}/orders/{orderId}/communications')
  .onWrite((change, context) => {

Обратите внимание, что первый объект - это объект Change, а второй - контекст.

Затем вам нужно использовать контекстчтобы получить значения подстановочных знаков:

const pharmacyId = context.params.pharmacyId
const orderId = context.params.orderId

Затем вам нужно использовать их для построения пути к базе данных:

admin.database().ref(`/${pharmacyId}/userDevices/${deviceToken}`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...