Android Studio 我有这个node.js云功能,但它不工作?

czfnxgou  于 2022-12-13  发布在  Android
关注(0)|答案(1)|浏览(123)

我有一个使用node.js的云函数,每次在一个特定节点上添加一个子节点时,它都会监听,然后向用户发送一个通知。但是,当我在数据库上添加了一些东西时,它不会发送任何东西。我正在开发android studio java。如果它只监听数据库,然后在设备令牌上发送FCM消息,我是否应该将该函数连接到android studio。
还有如何在这上面调试,我用的是VS代码。
这是我的代码:

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

exports.listen = functions.database.ref("/Emergencies/{pushId}")
.onCreate(async (change, context) => {
 change.after.val();
 context.params.pushId;

// Get the list of device notification tokens. Note: There are more than 1 users in here
const getDeviceTokensPromise = admin.database()
  .ref("/Registered Admins/{uid}/Token").once("value");

// The snapshot to the user's tokens.
let tokensSnapshot;

// The array containing all the user's tokens.
let tokens;

const results = await Promise.all([getDeviceTokensPromise]);
tokensSnapshot = results[0];

// Check if there are any device tokens.
if (!tokensSnapshot.hasChildren()) {
return functions.logger.log(
  'There are no notification tokens to send to.'
);
}
functions.logger.log(
  'There are',
  tokensSnapshot.numChildren(),
  'tokens to send notifications to.'
);

// Notification details.
const payload = {
notification: {
    title: "New Emergency Request!",
    body: "Someone needs help check Emergenie App now!",
  }
}; 

// Listing all tokens as an array.
tokens = Object.keys(tokensSnapshot.val());
// Send notifications to all tokens.
const response = await admin.messaging().sendToDevice(tokens, payload);
// For each message check if there was an error.
const tokensToRemove = [];
response.results.forEach((result, index) => {
  const error = result.error;
    if (error) {
      functions.logger.error(
        'Failure sending notification to',
        tokens[index],
       error
      );
      // Cleanup the tokens who are not registered anymore.
      if (error.code === 'messaging/invalid-registration-token' ||
          error.code === 'messaging/registration-token-not-registered') {
        tokensToRemove.push(tokensSnapshot.ref.child(tokens[index]).remove());
      }
    }
 });
  return Promise.all(tokensToRemove);
});
cdmah0mi

cdmah0mi1#

这似乎是在拧:

const getDeviceTokensPromise = admin.database()
  .ref("/Registered Admins/{uid}/Token").once("value");

这个字符串中的{uid}没有在任何地方定义,并且也将被视为一个字符串,而不是用户的ID-我希望这是你想要的。
更可能的情况是,您需要:
1.加载所有/Registered Admins
1.循环遍历从该函数得到的结果
1.获取其中每个的Token
如果你是JavaScript新手,Firebase的Cloud Functions并不是学习它的最简单的方法。我建议你首先在本地Node.js进程中使用Admin SDK,或者使用模拟器套件,它可以用本地调试器进行调试。之后,你将更好地准备将代码移植到你的Cloud Functions中。

相关问题