У меня есть 5000 пользователей, зарегистрированных для приложения.
Что я хотел бы сделать, так это использовать функции Firebase при создании нового сообщения администратора, просто получить все объекты пользователя и проверить, есть ли у них переменные, а затем отправить уведомление всем 5000 пользователям, кроме этих.которые отказались.
Я также предпочел бы не использовать firebase topics
..
Код моей функции:
exports.qotd = functions.database
.ref('users/XxN0gROzNCdIH3cCt16S5d7UT632/send_notification/{notificationId}')
.onCreate(async (snapshot, context) => {
const data = snapshot.val();
const uid = context.auth.uid;
let recipients = 0;
let parent;
console.log(uid)
if (uid === "XxN0gROzNCdIH3cCt16S5d7UT632") {
await adb.ref('users/').once('value').then(allUsers => {
parent = allUsers.val();
// console.log(allUsers.numChildren())
return true;
}).catch(error => console.log(error))
// Notification content
const payload = {
notification: {
title: 'QOTD',
body: data.message
}
}
const tokens = [];
const db = admin.firestore()
for (const key in parent) {
if (parent[key].unsub_qotd !== true) {
// const devicesRef = db.collection('devices').where('userId', '==', key)
//
// const devices = await devicesRef.get();
// devices.forEach(result => {
// const token = result.data().token;
//
// tokens.push(token)
// })
recipients++;
}
}
console.log(recipients);
await snapshot.ref.update({ 'recipients': recipients }).then(() => {
console.log("Number of recipients: " + recipients)
}).catch(error => console.log(error))
await snapshot.ref.update({ 'sent': true }).then(() => {
//do nothing
}).catch(error => console.log(error))
return true;
// return admin.messaging().sendToDevice(tokens, payload)
} else {
return false;
}
});
Часть кодазакомментировал, когда я тестировал, но когда я выполняю этот код, я получаю ошибку:
Выполнение функции заняло 20150 мс, завершается со статусом: «ошибка соединения»
Я предполагаю, что это потому, что объект users
слишком велик.Но мне действительно нужно знать, существует ли unsub_qotd
на этом объекте пользователя ...
Есть идеи?Спасибо!