我正在使用Firebase消息传递功能来发送通知,我所有已选择接收通知的用户也是如此。
问题在于sendToDevice()
仅允许1000
令牌,否则返回错误。因此,我必须遍历所有令牌,并且当tokens
数组具有950
个项目时,我想发送该批次,然后重新开始。
这是我的代码:
const db = admin.firestore()
const devicesRef = db.collection('devices')
const devices = await devicesRef.get();
devices.forEach(async (result) => {
const token = result.data().token;
const userId = result.data().userId;
total_recipients++;
if(!result.data().unsub) { //if user has opted in
if(tokens.length < 950) {
let temp = tokens;
admin.messaging().sendToDevice(temp, payload).then(() => {
console.log("Sent to " + total_tokens)
}).catch(error => console.log(error))
tokens.push(token);
recipients++;
total_tokens += tokens.length
} else {
tokens.push(token);
recipients++;
let temp = tokens;
admin.messaging().sendToDevice(temp, payload).then(() => {
console.log("Sent to " + total_tokens)
}).catch(error => console.log(error))
total_tokens += tokens.length
tokens = [];
}
}
})
尽管此代码不能很好地工作,似乎admin.messaging...
可能需要await
吗?上面的代码无法正常工作,因为出现错误:
错误:在对sendToDevice()的单个请求中提供了太多的注册令牌。批量处理您的请求,每个请求最多包含1,000个注册令牌。
我在做什么错?有什么想法吗?