Я собираюсь отправлять уведомления на устройства в триггере.Триггер срабатывает при создании объекта в «/ chats / {chatId}».Объект чата имеет такую структуру, как:
{
members: {
0: "userId1",
1: "userId2"
},
...
}
Логика, стоящая за моим кодом, состоит в чтении userToken (права каждого пользователя) для членов каждого элемента;отправлять уведомления (полезную нагрузку) на каждый токен.
Код ниже работает.
exports.onChatCreate = functions.database
.ref("/chats/{chatId}")
.onCreate((chatSnap, context) => {
// const members = chatSnap.val().members; // works?!
let database = admin.database();
let messaging = admin.messaging();
const chatId = context.params.chatId;
let tokens = [];
let notifications = [];
const payload = {
notification: {
title: "MyTitle",
body: "Notification description"
}
};
chatSnap.val().members.forEach(function(m) {
database
.ref("users")
.child(m)
.once("value")
.then(function(snapshot) {
let fcmToken = snapshot.val().FCMToken;
if (fcmToken) {
tokens.push(fcmToken);
messaging.sendToDevice(fcmToken, payload);
}
});
});
return Promise.all(notifications);
});
Теперь я хочу отправлять уведомления с атомарным обновлением после отправки каждого токена в массив токенов.Я готовлю этот код, , но он не работает .
return loadUsers().then(users => {
let tokens = [];
for (let user of users) {
tokens.push(user.pushToken);
}
let payload = {
notification: {
title: 'Title',
body: 'Notification description'
}
};
return admin.messaging().sendToDevice(tokens, payload);
});
Где я ошибаюсь?!