Firebase FCM仅向其用户对象中具有变量的用户发送通知

时间:2019-01-21 22:11:24

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

我有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 ...

有什么想法吗?谢谢!

0 个答案:

没有答案