Отправка сообщений на определенные устройства с использованием функций Firebase - PullRequest
0 голосов
/ 03 июля 2018

Я попытался отправить определенное сообщение на клиентское устройство, используя функции узла js и firebase. Но когда я попытался выполнить функцию, она вернулась с ошибкой:

Error. Регистрационные токены, предоставляемые sendToDevice (), должны быть непустой строкой или непустым массивом.

Изображение показано ниже.

Database Snapshot

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

exports.sendNotification8 = functions.database.ref('/Users/{user_id}/Notifications/')
    .onWrite(( change,context) =>{

    var user_id = context.params.user_id;

    // Grab the current value of what was written to the Realtime Database.
    var eventSnapshot = change.after.val();

    var device_token = admin.database().ref('/Users/{user_id}/device_token').once('value');

    return device_token.then(result => {

    var token_id = result.val();

    var str = eventSnapshot.from + " : " + eventSnapshot.message;
    console.log(eventSnapshot.from);

    var payload = {
        data: {
            name: str,
            title: eventSnapshot.from,
            click_action: "Chats"

        }
    };

    // Send a message to devices subscribed to the provided topic.
    return admin.messaging().sendToDevice(token_id, payload).then(function (response) {
            // See the MessagingTopicResponse reference documentation for the
            // contents of response.
            console.log("Successfully sent message:", response);
            return;
        })
        .catch(function (error) {
            console.log("Error sending message:", error);
        });

    });

    });

А ниже скриншоты моей базы данных ... Database Snapshot

Так вот, как я получаю device_token узел. От пользователя, который получил самые новые данные, записанные в его / ее узел уведомлений. Пожалуйста помоги. Что я делаю не так?

1 Ответ

0 голосов
/ 03 июля 2018

Ничего себе. Это была пытка. Но это наконец-то сработало. Я получил что-то вроде этого.

exports.sendNotification8 = functions.database.ref('/Users/{user_id}/Notifications/{notifications_id}')
    .onWrite((change,context) =>{

    var user_id = context.params.user_id;
    console.log(user_id);

    // Grab the current value of what was written to the Realtime Database.
    var eventSnapshot = change.after.val();

    var device_token = admin.database().ref('/Users/'+user_id+'/device_token').once('value');

    return device_token.then(result => {

    var token_id = result.val();

    console.log(token_id);

    var str = eventSnapshot.message;
    console.log(eventSnapshot.from);

    var payload = {
        data: {
            name: str,
            title: eventSnapshot.from,
            click_action: "Chats"

        }
    };

    // Send a message to devices subscribed to the provided topic.
    return admin.messaging().sendToDevice(token_id, payload).then(function (response) {
            // See the MessagingTopicResponse reference documentation for the
            // contents of response.
            console.log("Successfully sent message:", response);
            return;
        })
        .catch(function (error) {
            console.log("Error sending message:", error);
        });

    });

    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...