我正在开发一个函数,该函数每分钟运行一次,检查一些东西,如果是真的,它会向特定用户的设备发送通知。问题是我不知道如何只发送给那个用户:
export const remindEvents = functions.pubsub
.schedule("* * * * *").onRun(() => {
const querySnapshot = await db
.collectionGroup('leases')
.where(
'frequency',
isEqualTo: 'testing',
)
.get()
.then((querySnapshot) {
for (var doc in querySnapshot.docs) {
// HERE I TAKE THE DOCS I NEED OK
// send notification
const token = querySnapshot.data()!.token;
const payload: admin.messaging.MessagingPayload = {
notification: {
title: "New notification!",
body: `you just got a notification`,
icon: "your-icon-url",
click_action: "FLUTTER_NOTIFICATION_CLICK",
},
};
// THIS IS WHAT I'M NOT SURE ABOUT
// return fcm.sendToDevice(token, payload);
}
});
});
这里我有另一个工作示例,但在本例中,当在集合中创建文档时:
export const sendToDevice = functions.firestore
.document("orders/{orderId}")
.onCreate(async (snapshot) => {
const order = snapshot.data();
const querySnapshot = await db
.collection("users")
.doc(order.seller)
.get();
const token = querySnapshot.data()!.token;
const payload: admin.messaging.MessagingPayload = {
notification: {
title: "New Order!",
body: `you sold a ${order.product} for ${order.total}`,
icon: "your-icon-url",
click_action: "FLUTTER_NOTIFICATION_CLICK",
},
};
return fcm.sendToDevice(token, payload);
});
我将如何提取第一个sendToDevice
以直接指向我需要的具有云功能的用户?
为应用程序使用Flutter。
在您的第一个代码片段中,您需要了解要向其发送消息的设备的令牌。由于您谈论的是特定用户,因此您需要以某种方式查找该用户的设备令牌。
常见的方法是在数据库中为每个用户保留设备令牌的映射。当您监视客户端上的令牌生成时,您可以将令牌添加到此数据库中。当FCM告诉令牌不再使用时,您将从数据库中删除令牌,如执行令牌清理的示例项目所示。