我正在使用谷歌云功能通过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?
答案 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
}