从Cloud Functions和Firebase

时间:2017-08-21 00:25:42

标签: javascript firebase firebase-cloud-messaging google-cloud-functions

我正在使用谷歌云功能通过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 => {

        });
    }
  });

});

我想替换这一行:

functions.database.ref('/notification/{id}').onWrite(event => {

有了这个:

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

如何获取当前用户ID?

2 个答案:

答案 0 :(得分:2)

你似乎对JavaScript很新(称之为JSON就是一种贬低)。 Firebase的云功能不是学习JavaScript的最佳方式。我建议先阅读Firebase documentation for Web developers和/或Firebase codelab for Web developer。它们涵盖了许多基本的JavaScript,Web和Firebase交互。在那些之后,您将更好地为云功能编写代码。

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

可以找出用户触发该功能的内容,但这也不是你想要的。触发通知的用户不是需要接收消息的用户。您想要的是读取通知的目标用户。

执行此操作的一种方法是从触发该功能的数据库路径中读取它。如果您将每个用户的通知保留在数据库中,如下所示:

user_notifications
  $uid
    notification1: ...
    notification2: ...

您可以像这样触发云功能:

exports.sendPushNotification = functions.database.ref('/user_notification/{uid}/{id}').onWrite(event => {

然后在该函数的代码中,获取用户的UID:

var uid = event.params.uid;

答案 1 :(得分:1)

对于Swift 3.0 - 4.0

你可以这样做:

import Firebase
import FirebaseAuth


class YourClass {

let user = Auth.auth().currentUser
let userID = user.uid

// user userID anywhere 

}