Flutter Firebase云函数打字稿
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter Firebase云函数打字稿相关的知识,希望对你有一定的参考价值。
我正在尝试为用户编写云功能以获取通知。我有一个任务模型,其中用户指定一个任务,并写入他向其分配任务的另一个用户的电子邮件ID。
添加上述任务后,它应将通知发送给在'Taskgivento'字段中指定的用户
我的用户模型如下我有一个用户模型,其中包含用户和子集合的数据,将fcm保存在令牌子集合中。该子集合的id是fcm令牌。
我的云功能
export const sendToDevice = functions.firestore
.document('Task/TaskId')
.onCreate(async snapshot =>
const Taskdata=snapshot.data()
const querySnapshot = await db
.collection('users')
.doc('HMPibf2dkdUPyPiDvOE80IpOsgf1')
.collection('tokens')
.get();
const tokens = querySnapshot.docs.map(snap => snap.id);
const payload: admin.messaging.MessagingPayload =
notification:
title: 'New Order!',
body: 'new notification',
icon: 'your-icon-url',
click_action: 'FLUTTER_NOTIFICATION_CLICK'
;
return fcm.sendToDevice(tokens, payload);
);
在const queryshot中,我试图过滤用户模型以获取fcm令牌,以便它将通知Taskgiven的uid传递给emailid。
以上功能有效。我已经在上述模型中手动编写了uid。我需要它来搜索数据库并填充taskgivento电子邮件的uid。我应该如何进行我尝试像在飞镖中一样编写where('email','=','Taskdata.Taskgivento'),但是没有用。它给出了一个错误。
答案
export const sendToDevice = functions.firestore
.document('Task/TaskId')
.onCreate(async snapshot =>
const Taskdata = snapshot.data()
const email = Taskdata.Taskgivento;
const userQuerySnapshot = await db
.collection('users')
.where('email', '==', email)
.get();
const userDocSnapshot = userQuerySnapshot.docs[0]; // Assumption: there is only ONE user with this email
const userDocRef = userDocSnapshot.ref;
const tokensQuerySnapshot = await userDocRef.collection('tokens').get();
const tokens = tokensQuerySnapshot.docs.map(snap => snap.id);
const payload: admin.messaging.MessagingPayload =
notification:
title: 'New Order!',
body: 'new notification',
icon: 'your-icon-url',
click_action: 'FLUTTER_NOTIFICATION_CLICK'
;
await fcm.sendToDevice(tokens, payload);
return null;
);
您需要:获取用户文档。请注意
where('email', '==', email)
和==
的语法。获取此文档的
DocumentReference
,并基于此参考,查询DocumentReference
子集合。
以上是关于Flutter Firebase云函数打字稿的主要内容,如果未能解决你的问题,请参考以下文章
Firebase + Flutter - 云函数 onCall 导致 Android 应用出现“未经身份验证”错误
Firebase 云函数在 Flutter 中返回 null,因为它仍在运行