我需要从云函数中的firestore获取用户令牌。
用户令牌存储如下:
void saveToken(String token) async {
await FirebaseFirestore.instance
.collection("User tokens")
.doc(userId)
.set({'token': token});
}
这就是目标。当在集合"聊天消息"上创建消息时,抓住";聊天id"值和发送消息"的用户;用户id";。
查询集合";聊天;使用";聊天id"价值抓住";工作用户数据";value(这是一个包含两个对象的数组,每个对象都包含聊天中涉及的用户(userName,userId((。
从";工作用户数据";,我需要获取应该接收消息的成员的userId。
查询";用户令牌";收集以获取";令牌";价值使用";令牌";值,向发送通知
这是我的云功能:正如你所看到的,我已经对令牌进行了硬编码,看看我是否可以向该设备发送通知。。。。这很完美。现在我需要让这个动态。。。
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { database } = require("firebase-admin");
// eslint-disable-next-line max-len
const tokens = ["JNKDNASNDAUIU324234....."];
admin.initializeApp();
// exports.onCreate = functions.firestore
// .document("chat/{docId}")
// .onCreate((snapshot, context) => {
// console.log(snapshot.data());
// console.log("fake data");
// });
exports.onChatMessageCreate = functions.firestore
.document("chat messages/{docId}")
.onCreate( (snapshot, context) => {
console.log(snapshot.data());
// fetch user to send message to
// admin.database().ref("/")
const payload = {
// eslint-disable-next-line max-len
notification: {title: snapshot.data()["userName"], body: snapshot.data()["Chat message"], sound: "default"},
// eslint-disable-next-line max-len
data: {click_action: "FLUTTER_NOTIFICATION_CLICK", message: "Sample Push Message"},
};
try {
admin.messaging().sendToDevice(tokens, payload);
console.log("NOTIFICATION SEND SUCCESSFULLY");
} catch (e) {
console.log("ERROR SENDING NOTIFICATION");
console.log(e);
}
});
所以我只需要知道如何从云功能查询集合
Node.js中有两种方法可以查询集合:通过then()
或async/await
。
使用promise进行查询:
const collectionRef = admin.firestore().collection("yourCollection");
return collectionRef.get().then((collections) => {
//you can now use your collections here
});
使用async/await:
const collectionRef = admin.firestore().collection("yourCollection");
const collections = await collectionRef.get();