Firebase 云函数嵌套侦听器
Firebase cloud functions nested listeners
有没有可能实现这样的目标? P.s 不工作,我不知道为什么。
exports.Myfunc = functions.firestore.document('collection/{id}').onCreate(async (snapshot, context) => {
const Id =snapshot.data().id;
const Token=snapshot.data().deviceToken;
functions.firestore.document('collection2/Id').onUpdate(async (snapshot, context) => {
const data1=snapshot.data().data;
const data2=snapshot.data().data2;
var payload = {
notification: {
priority : "high",
title: 'Notification',
body: '<body>',
},
data: {
"click_action": "FLUTTER_NOTIFICATION_CLICK",
'data1':data1,
'data2':data2,
},
};
try {
const response = await admin.messaging().sendToDevice(Token, payload);
console.log('Notification sent successfully');
} catch (err) {
console.log(err);
}
});
});
我想做的是,监听集合中的文档创建,创建时,然后监听特定文档中的更新(其 id 由前一个监听器给出),以及何时,这个文档更新,然后将通知发送到前一个侦听器提供的设备令牌。
我怎样才能做到这一点?还有其他可能的方法吗,或者我需要记住的事情?
请帮忙。
您不能在 Cloud Function 中定义 Cloud Function。
如果我正确理解你想要达到的目的,你可以按如下方式进行:
为 Firestore 创建一个由 onUpdate()
触发的 Cloud Function,以监听对 collection2
文档的更改。与您在代码中所做的类似:
exports.Myfunc = functions.firestore.document('collection2/Id')
.onUpdate(async (change, context) => {
// ...
const docId = context.params.Id;
// ...
});
在此 Cloud Function 中,验证文档 ID (context.params.Id
) 是否在您保存在 Firestore 数据库某处的 ID 列表中。例如。作为特定文档中的数组(注意文档的最大 1 MiB 大小)或特定集合中的专用文档。
如果 ID 在列表中,则发送消息。
您可以在创建文档 collection/{id}
时从您的 Flutter 应用填充此 ID 列表,或者在必要时(例如,您想要限制 read/write 对列表的访问IDs),通过另一个云功能。
PS:请注意,在使用 onUpdate()
触发的 Cloud Functions 中,您不应执行
exports.Myfunc = functions.firestore.document('collection2/Id').onUpdate(async (snapshot, context) => {
//...
const data1 = snapshot.data(); // <= this will not work
//...
});
有关详细信息,请参阅 doc。
有没有可能实现这样的目标? P.s 不工作,我不知道为什么。
exports.Myfunc = functions.firestore.document('collection/{id}').onCreate(async (snapshot, context) => {
const Id =snapshot.data().id;
const Token=snapshot.data().deviceToken;
functions.firestore.document('collection2/Id').onUpdate(async (snapshot, context) => {
const data1=snapshot.data().data;
const data2=snapshot.data().data2;
var payload = {
notification: {
priority : "high",
title: 'Notification',
body: '<body>',
},
data: {
"click_action": "FLUTTER_NOTIFICATION_CLICK",
'data1':data1,
'data2':data2,
},
};
try {
const response = await admin.messaging().sendToDevice(Token, payload);
console.log('Notification sent successfully');
} catch (err) {
console.log(err);
}
});
});
我想做的是,监听集合中的文档创建,创建时,然后监听特定文档中的更新(其 id 由前一个监听器给出),以及何时,这个文档更新,然后将通知发送到前一个侦听器提供的设备令牌。
我怎样才能做到这一点?还有其他可能的方法吗,或者我需要记住的事情?
请帮忙。
您不能在 Cloud Function 中定义 Cloud Function。
如果我正确理解你想要达到的目的,你可以按如下方式进行:
为 Firestore 创建一个由 onUpdate()
触发的 Cloud Function,以监听对 collection2
文档的更改。与您在代码中所做的类似:
exports.Myfunc = functions.firestore.document('collection2/Id')
.onUpdate(async (change, context) => {
// ...
const docId = context.params.Id;
// ...
});
在此 Cloud Function 中,验证文档 ID (context.params.Id
) 是否在您保存在 Firestore 数据库某处的 ID 列表中。例如。作为特定文档中的数组(注意文档的最大 1 MiB 大小)或特定集合中的专用文档。
如果 ID 在列表中,则发送消息。
您可以在创建文档 collection/{id}
时从您的 Flutter 应用填充此 ID 列表,或者在必要时(例如,您想要限制 read/write 对列表的访问IDs),通过另一个云功能。
PS:请注意,在使用 onUpdate()
触发的 Cloud Functions 中,您不应执行
exports.Myfunc = functions.firestore.document('collection2/Id').onUpdate(async (snapshot, context) => {
//...
const data1 = snapshot.data(); // <= this will not work
//...
});
有关详细信息,请参阅 doc。