NodeJS 从firebase实时数据库中的一个节点内的所有用户获取所有令牌的循环?

xjreopfe  于 2022-12-12  发布在  Node.js
关注(0)|答案(1)|浏览(95)

所以我是新的javascript和云函数,我有这个代码发送通知的设备上,当一个数据被创建在一个特定的节点上。这个代码的工作,它能够发送通知,每当数据被添加,但它只发送在一个特定的设备上,因为我只使用了一个令牌进行测试。我想知道的是,我如何从每个位于特定节点的用户那里得到所有的令牌。我知道我必须使用一个循环,并把令牌放在一个数组中,但我应该怎么做呢?有没有我可以使用的示例代码。谢谢你的帮助,将不胜感激。
这是我的数据库结构:

Database name
{
"Registered Admins": {
"0zPSXiHR05PG2MogS0l4xzWuMUc2": {
  "User Details",
  "User Details",
  "Token": "etms39B4TzCYBujRNhcAQE.........",
  "User Details"
},
"bwjOH8ndKeeMfwy5UvhChVtyNov1": {
  "User Details"
  "Token": "etms39B4TzCYBujRNhcAQE........."
  "User Details"
     }
}
}

这是我的javascript代码:

"use strict";

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

exports.sendNotificationtoDevice = 
functions.database.ref("/Emergencies/{pushId}")
.onCreate(async (snapshot) => {
// Load all the users from Registered Admins
  const adminsSnapshot = await admin.database().ref("/Registered 
Admins").once("value");
let tokens = [];
// Loop over adminsSnapshot
adminsSnapshot.forEach((adminSnapshot) => {
tokens.push(adminSnapshot.child("Token").val());
});
console.log(tokens);
const payload = {
  notification: {
    title: "New Emergency!",
    body: "Someone needs help check application now!",
  },
};
console.log("Hello User");
await admin.messaging().sendToDevice(tokens, payload);
});

这是我用Firebase模拟器套件尝试过的:我尝试通过导入json文件重新创建相同的结构,并检查数据库触发器。

我还尝试重新创建了相同的场景,在其中我在“Emergencies”节点上添加了数据。
我应该如何调试使用模拟器套件?我似乎找不到任何文件,可以帮助我在这方面

v9tzhpje

v9tzhpje1#

要从/Registered Admins加载所有令牌,可以执行以下操作:

const adminsSnapshot = await admin.database().ref("/Registered Admins").once("value");
let tokens = [];
adminsSnapshot.forEach((adminSnapshot) => {
  tokens.push(adminSnapshot.child("Token").val());
});
console.log(tokens);

您可以使用这些标记来调用FCM API,以便向所有这些标记发送消息。

相关问题