javascript - Firebase-database - 云函数查询

标签 javascript firebase-realtime-database firebase-cloud-messaging firebase-admin

我正在 fcmTokens 中保存 Firebase 云消息的 token 。每个用户最多拥有三个 token 。

{
  "uid1" : {
    "-Kt8Skx5sa-IeXhKBs4G" : {
      "uid1" : "token1"
    }
  },
  "uid2" : {
    "-Kt8Xt1lT7OeyKJBs1ps" : {
      "uid2" : "token1"
    },
    "-Kt8Xt1lT7OeyKJz892k" : {
      "uid2" : "token2"
    }
  }
}

ids 是一个数组,其中包含需要接收消息的用户 ID。我不能 似乎获得了每个用户的 token 。

错误:

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);
        })
    }
  }
}

最佳答案

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

{
  "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);
        })
      })
    }

关于javascript - Firebase-database - 云函数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46035507/

相关文章:

android - 如何从 firebase 中的值中获取键

swift - 条件绑定(bind)的初始化程序必须具有可选类型,而不是 'String' ?

javascript - 在字典 Javascript 中查找多个关键字

javascript - .log 文件的实时更新

javascript - THREE.js 中 y 轴上的对象旋转两侧图形消失

javascript - 可滚动对象在Grails 3中不起作用/JavaScript

swift - Firebase 'setValue' 函数重复且不停止 Swift

android - Firebase ValueEventListener 导致 RecyclerView 中出现重复条目

android - 如何更改菜单图标 onMessageReceived

ios - Cordova 无法从 CLI 构建,但从 XCode xcworkspace 构建可以完美运行