Я пытаюсь реализовать 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);