每950次并在循环结束时在循环中运行sendToDevice

时间:2019-01-28 19:58:26

标签: javascript firebase firebase-cloud-messaging google-cloud-functions

我正在使用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个注册令牌。

我在做什么错?有什么想法吗?

0 个答案:

没有答案