Теперь я работаю над своим последним проектом. Я пытаюсь отправить уведомление с помощью облачной функции firebase, когда она запускает onUpdate, но у меня возникает ошибка. Я следил за учебником на YouTube и на веб-сайте, но не понимаю. Кстати, я новичок в firebase. ниже Вот мой код index.js: -
const functions = require('firebase-functions');
//Firebase function and handling notification logic
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.pushNotification = functions.database.ref('/Sensor').onWrite(( change,context) => {
const sensor = change.after.val();
const payload = {
notification: {
Title: "Alert",
Body: "Open pipe detect !",
icon: "default"
}
};
return admin.messaging().sendToDevice(sensor.token, payload)
.then((response)=> {
return console.info("Successfully sent message:", response);
});
});
структура проекта такая:
**water-system**
+--Sensor
+---Pipe
+---pipeName
+---solenoid
+---status // trigger on this update
+---User
+---Id1
+---email
+---name
+---token // token store by this user
+---Id2
+---Id3
+---token // also store token
Поэтому, когда дочерний узел Sensor был обновлен, он отправит уведомление пользователю, у которого хранится токен (пользователь id1 и id3). Рад, если кто-нибудь помог мне решить эту проблему
Я получаю эту ошибку @JayLane Ошибка: токены регистрации, предоставленные для sendToDevice (), должны быть непустой строкой или непустым массивом.
@JayLane: Здесь используется устаревший API sendToDevice ().
@BobSnyder только что заметил
В вашей БД Sensor не имеет дочернего значения для token



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте сохранить токены в таком формате:
"tokens" : {
"cXyVF6oUGuo:APA91bHTSUPy31JjMVTYK" : true,
"deL50wnXUZ0:APA91bGAF-kWMNxyP6LGH" : true,
"dknxCjdSQ1M:APA91bGFkKeQxB8KPHz4o" : true,
"eZunoQspodk:APA91bGzG4J302zS7sfUW" : true
}
Всякий раз, когда вы хотите написать новый токен, просто выполните набор:
firebase.app().database().ref(`/user/${uid}/tokens/${token}`).set(true);
И чтобы создать массив для sendToDevice:
const tokensList = Object.keys(tokens.val());
return admin.messaging().sendToDevice(tokensList, payload);
какая у тебя ошибка?