我有5000个用户注册了一个应用程序。
我想做的是在创建新的管理员帖子时使用Firebase Functions,只需获取所有用户对象并检查它们是否具有变量,然后向除选择那些对象之外的所有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;
}
});
在测试时,某些代码已被注释掉,但是当我执行此代码时会出现错误:
函数执行耗时20000 ms,状态为:“连接错误”
我猜这是因为users
对象太大。但是我真的只需要知道该用户对象上是否存在unsub_qotd
...
有什么想法吗?谢谢!