У меня проблемы с получением токена, сохраненного в базе данных реального времени, с помощью облачной функции admin.database (). У ребенка есть только один токен для чтения.
Структура базы данных Firebase
Вот мой код в Index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.sendNotification = functions.database
.ref('/Logs/{LogsID}')
.onWrite( (change, context) => {
const notificationSnapshot = change.after.val();
const status = notificationSnapshot.Status;
const time = notificationSnapshot.Time;
const payload = {
notification: {
title : status,
body : time
}
}
console.info(notificationSnapshot);
const pushToken = admin.database().ref('/Tokens').once('child_added').then( (data) => {
const tokenSnapshot = data.val();
const finaltoken = tokenSnapshot.token;
console.info(finaltoken);
})
// Need help down here.
admin.messaging().sendToDevice(finaltoken, payload)
.then( () => {
console.log('Notification sent');
})
.catch( () =>{
console.log('Notification failed');
})
return null;
});
finalToken показывает правильный токен в журнале, как и ожидалось. Журнал, показывающий токен
Но я получаю ошибку, когда передаю тот же токен admin.messaging (). Консоль регистрирует «Уведомление отправлено», но не получает уведомление.
ReferenceError: finaltoken не определен
at exports.sendNotification.functions.database.ref.onWrite (/user_code/index.js:43:36)
at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:105:23)
в cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:135:20)
по адресу /var/tmp/worker/worker.js:827:24
at process._tickDomainCallback (internal / process / next_tick.js: 135: 7)
Это работает, когда я передаю токен напрямую,
var finalToken = 'ephrj1........kndji'
так что admin.messaging () работает, не работает только передача токена.
Я новичок в облачных функциях и JavaScript, поэтому любая помощь очень ценится.