Firebase Cloud Messaging не может прочитать свойство Receiver_id из undefined

У меня проблема с уведомлениями Firebase Cloud Messaging. Когда я хочу отправить запрос на добавление в друзья в своем приложении для Android, другой клиент не получает уведомления об этом. И журнал функций Firebase говорит:

TypeError: Cannot read property 'receiver_id' of undefined
    at exports.sendNotification.functions.database.ref.onWrite.event (/user_code/index.js:9:35)
    at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:109:23)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:139:20)
    at /var/tmp/worker/worker.js:730:24
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

Вот код JavaScript:

'use strict'

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

exports.sendNotification = functions.database.ref('/Notifications/{receiver_id}/{notification_id}')
.onWrite(event => {
  const receiver_id = event.params.receiver_id;

  const notification_id = event.params.notification_id;

  console.info('We have a notification to send to: ', receiver_id);

  if (!event.data.val) {
    return console.info('A notification has been deleted from database: ', notification_id);
  }

  const deviceToken = admin.database().ref(`/Users/${receiver_id}/device_token`).once('value');

  return deviceToken.then(result => {
    const token_id = result.val();

    const payload = {
      notification:
      {
        title: "Friend Request",
        body: "you have received a new friend request",
        icon: "default"
      }
    };

    return admin.messaging().sendToDevice(token_id, payload).then(response => {
      console.info('This was the notification feature.');
    });
  });

});
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
868
1

Ответы 1

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

exports.sendNotification = functions.database.ref('/Notifications/{receiver_id}/{notification_id}').onWrite((change, context) => {

const user_id = context.params.user_id;
const notification_id = context.params.notification_id;

console.info('We have a notification : ', user_id);

const afterData = change.after.val();

if (!afterData){
    return null;
}

const fromUser = admin.database().ref(`/Notifications/${user_id}/${notification_id}`).once('value');
return fromUser.then(fromUserResult => {

    const from_user_id = fromUserResult.val().from;


    console.info('You have a new notification from: ', from_user_id);

    const deviceToken = admin.database().ref(`/Users/${user_id}/device_token`).once('value');

    return deviceToken.then(result => {

        const token_id = result.val();

        const payload = {
            notification: {
                title: "New Friend Request",
                body: "You've received a new Friend Request",
                icon: "default"
            }
        };

        return admin.messaging().sendToDevice(token_id, payload).then(response => {
            console.info('This was the notification feature');
        });

    });

});

});

Попробуйте этот код. Он взят из здесь, загруженного @xxxQDAxxx.

Другие вопросы по теме