Имя пользователя пустое при отправке уведомления с помощью firebase

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

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

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



exports.pushNotification = functions.database.ref('/messages/{user_id}/{message_id}').onWrite( (change, context) => {

const user_id = context.params.user_id;
const message_id = context.params.message_id;

console.log('We Have A Notification for :', user_id);

if (!change.after.val()){
    return console.log("A Notification Has Been Deleted From The Database: ", message_id)
}

const fromUser = admin.database().ref(`/messages/${user_id}/${message_id}`).once('value');

return fromUser.then(fromUserResult => {

    const from_user_id = fromUserResult.val().from;
    console.log("You have new notification from : ", from_user_id)

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

    return Promise.all([userQuery, deviceToken]).then(result => {

        const userName = result[0].val();
        const token_id = result[1].val();

        const payload = {
            notification: {
                title: "Chat+",
                body: `You have a new notification from ${userName}`,
                icon: "default",
                click_action: "com.mani.eric.quickch_TARGET_NOTIFICATION"
            },

        };

        return admin.messaging().sendToDevice(token_id, payload ).then(Response =>{ 
            console.log('this is the notification')
        });


    });

});

}); 

уведомление фактически доставляется, но на обоих устройствах (отправитель и получатель получают одно и то же уведомление) с именем пользователя отправителя как null.

Теперь мой вопрос: как я могу получить имя пользователя отправителя и отобразить уведомление только на устройстве получателя?


person Eric    schedule 13.02.2019    source источник


Ответы (1)


У вас есть тип на пути, который запускает функцию:

functions.database.ref('/messages/{user_id/{message_id}')

Должно быть:

functions.database.ref('/messages/{user_id}/{message_id}')

Итак, с закрывающей круглой скобкой после user_id.

Прочтите как создать минимальный, полный, проверяемый пример, так как код, которым вы поделились, немного сложнее, чем необходимо для воспроизведения. эта проблема. Например, ваш console.log('We Have A Notification for :', user_id); уже должен показывать, что user_id имеет значение null, поэтому код после этого не может работать и не имеет отношения к проблеме. Уменьшение масштабов проблемы таким образом увеличивает шансы на то, что вы сами найдете причину. Или, в худшем случае, это сокращает объем кода, который нам нужно изучить, что увеличивает вероятность того, что кто-то обнаружит проблему и ответит.

person Frank van Puffelen    schedule 13.02.2019
comment
на самом деле это была опечатка, которая произошла, когда я набирал этот код. исходный код, который у меня есть, это functions.database.ref('/messages/{user_id}/{message_id}') - person Eric; 13.02.2019