Как реализовать push-уведомления с использованием облачных функций Firebase - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь реализовать push-уведомления в чате, используя облачные функции Firebase.

Моя база данных выглядит примерно так:

  • сообщения
    • MESSAGEID
      • fromId: ""
      • toId: ""
      • messageText: ""
  • Пользователи
    • идентификатор пользователя
      • имя пользователя: "Frank"
      • fcmToken: "odnue38dh93hjd903jdn3obd3jfb393f"

Код моих функций:

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

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


exports.observeChat = functions.database.ref('/messages/{messageId}').onCreate((snaphot, context) => {

  var messageId = context.params.messageId;

  return admin.database().ref('/messages/' + messageId).once('value', snapshot => {
    var newMessage = snapshot.val();
    var toUid = newMessage.toId;

    console.log('LOGGER -> toid  ' + toUid);

      return admin.database().ref('/users/' + toUid).once('value', snaphsot => {
        var userTextedTo = snapshot.val();

        console.log('LOGGER -> fcmtoken   ' + userTextedTo.fcmToken);
        console.log('LOGGER -> name ' + userTextedTo.username);

        var payload = {
            notification: {
              title: 'New Message',
              body: userTextedTo.username + 'did message you'
            }
        };

        admin.messaging().sendToDevice(userTextedTo.fcmToken, payload)
          .then(function(response) {
            console.log('Successfully sent message:', response);
          })
          .catch(function(error) {
            console.log('Error sending message:', error);
          });
    })
  })
})

Журнал функций Firebase


Function execution started


LOGGER -> toid YyUZ3ESFA2UHTlTFurqEvpRaspu2


Function execution took 708 ms, finished with status: 'ok'


LOGGER -> fcmtoken undefined


LOGGER -> name undefined 

@firebase/database: FIREBASE WARNING: Exception was thrown by user callback. Error: Registration token(s) provided to sendToDevice() must be a non-empty string or a non-empty array.

Uncaught exception 

Error: Registration token(s) provided to sendToDevice() must be a non-empty string or a non-empty array.

Так что я думаю, что-то не так с моим кодом. Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Журнал: LOGGER -> Usertexted [object Object] with code console.log('LOGGER -> Usertexted ' + userTextedTo);

...