从 Cloud Functions 和 Firebase 获取当前用户的 ID

use*_*652 5 javascript firebase google-cloud-functions firebase-cloud-messaging

我正在使用谷歌云功能通过 firebase 注册推送通知。在我的应用程序中,我有一个通知参考,每当他们获得新的关注者或喜欢等时,该参考都会改变当前用户。截至目前,只要整个参考孩子发生变化,我就可以将通知发送到手机

例如,如果喜欢任何单个帖子,那么它会发送通知。我需要做的是观察当前用户只发送通知那个人。

这是我的 JavaScript 文件

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendPushNotification = functions.database.ref('/notification/{id}').onWrite(event => {
const payload = {
notification: {
    title: 'New message arrived',
    body: 'come check it',
    badge: '1',
    sound: 'default',
}
  };

  return admin.database().ref('fcmToken').once('value').then(allToken => {
    if (allToken.val()) {
        const token = Object.keys(allToken.val());
        return admin.messaging().sendToDevice(token, payload).then(response => {

        });
    }
  });

});
Run Code Online (Sandbox Code Playgroud)

我想替换这一行:

functions.database.ref('/notification/{id}').onWrite(event => {
Run Code Online (Sandbox Code Playgroud)

有了这个:

functions.database.ref('/notification/{id}').(The current user ID).onWrite(event => {
Run Code Online (Sandbox Code Playgroud)

如何获取当前用户 ID?

Fra*_*len 5

您对 JavaScript 似乎很陌生(称其为 JSON 是一种赠品)。Cloud Functions for Firebase 不是学习 JavaScript 的最佳方式。我建议首先阅读面向 Web 开发人员Firebase 文档和/或参加面向 Web 开发人员Firebase 代码实验室。它们涵盖了许多基本的 JavaScript、Web 和 Firebase 交互。在这些之后,您也将更有能力为 Cloud Functions 编写代码。

现在回到您的问题:Cloud Functions 中没有“当前用户”的概念。您的 JavaScript 代码在服务器上运行,所有用户都可以通过写入数据库来触发代码。

可以弄清楚是哪个用户触发了该功能,但这也不是您在这里想要的。触发通知的用户不是需要接收消息的用户。您想要的是读取作为通知目标的用户。

一种方法是从触发函数的数据库路径中读取它。如果您将每个用户的通知保存在数据库中,如下所示:

user_notifications
  $uid
    notification1: ...
    notification2: ...
Run Code Online (Sandbox Code Playgroud)

您可以像这样触发云函数:

exports.sendPushNotification = functions.database.ref('/user_notification/{uid}/{id}').onWrite(event => {
Run Code Online (Sandbox Code Playgroud)

然后在该函数的代码中,使用以下命令获取用户的 UID:

var uid = event.params.uid;
Run Code Online (Sandbox Code Playgroud)

  • @FrankvanPuffelen,在你最初的回答中,你提到“你可以找出是什么用户触发了这个功能”,你能提供一个提示吗? (2认同)