Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase数据库-云函数查询_Javascript_Firebase Realtime Database_Firebase Cloud Messaging_Firebase Admin - Fatal编程技术网

Javascript Firebase数据库-云函数查询

Javascript Firebase数据库-云函数查询,javascript,firebase-realtime-database,firebase-cloud-messaging,firebase-admin,Javascript,Firebase Realtime Database,Firebase Cloud Messaging,Firebase Admin,我正在fcmTokens中为firebase云消息保存令牌。每个用户最多有三个令牌 { "uid1" : { "-Kt8Skx5sa-IeXhKBs4G" : { "uid1" : "token1" } }, "uid2" : { "-Kt8Xt1lT7OeyKJBs1ps" : { "uid2" : "token1" }, "-Kt8Xt1lT7OeyKJz892k" : { "uid2" : "token

我正在
fcmTokens
中为firebase云消息保存令牌。每个用户最多有三个令牌

{
  "uid1" : {
    "-Kt8Skx5sa-IeXhKBs4G" : {
      "uid1" : "token1"
    }
  },
  "uid2" : {
    "-Kt8Xt1lT7OeyKJBs1ps" : {
      "uid2" : "token1"
    },
    "-Kt8Xt1lT7OeyKJz892k" : {
      "uid2" : "token2"
    }
  }
}
ids
是一个数组,其中包含需要接收消息的用户id。我不能 似乎可以为每个用户获取令牌

错误:

Error: Registration token(s) provided to sendToDevice() must be a non-empty string or a non-empty array.
以下是我现在的情况:

function sendFcm(ids) {

  const payload = {
    notification: {
      title: 'You have been invited to an event!',
      body: 'Event body',
      icon: "https://placeimg.com/250/250/people"
    }
  };

  for (const key in ids) {
    if (ids.hasOwnProperty(key)) {

      admin.database()
        .ref(`/fcmTokens/${ids[key]}/{pushId}/${ids[key]}`)
        .once('value')
        .then(token => token.val())
        .then(userFcmToken => {
          return admin.messaging().sendToDevice(userFcmToken, payload)
        })
        .then(res => {
          console.log("Sent Successfully"), res
        })
        .catch(err => {
          console.log(err);
        })
    }
  }
}

您的数据结构对于您使用它所做的事情来说似乎效率低下。如果您每个用户都有一组令牌,请准确地保留:每个用户都有一组令牌

{
  "uid1" : {
    "token1": true
  },
  "uid2" : {
    "token1": true,
    "token2": true,
    "token3": true
  }
}
然后:

for (const key in ids) {
  if (ids.hasOwnProperty(key)) {
    admin.database()
      .ref(`/fcmTokens/${ids[key]}`)
      .once('value')
      .then(snapshot => {
        snapshot.forEach((tokenSnapshot) => {
          let userFcmToken = tokenSnapshot.key;
          admin.messaging().sendToDevice(userFcmToken, payload);
        })
      })
    }

有道理。对Firebase来说还是很新的。谢谢您!