firebase - Firebase 云功能未执行
问题描述
我正在开发我的应用程序的组功能,组成员可以将任务添加到他们当前正在处理的组中。因此,当添加任务时,我想通知所有使用 FCM 的成员已将任务添加到组中。
编辑:
将任务添加到组的代码在客户端上运行并成功运行。云功能的目的只是向群组的所有成员发送云消息,告知特定成员已添加任务。
这是我对云功能的逻辑:1st。由于一个任务可以一次添加到多个组,我使用的是forEach()
. 第二。我正在获取组中成员的 uid 并将它们推送到数组(uids
)中,以便稍后我可以检索它们的 fcmToken。第三。forEach
在上运行uids
以检索 fcmTokens。4th.向设备发送云消息。
但是云功能没有按预期执行。
这是我的云功能:
exports.newTaskAdded = functions.https.onCall(async (data, context) => {
const groups = data.groups; //Can be multiple groups hence an array.
const uid = data.uid;
const author = data.author;
const taskId = data.taskId;
const taskTitle = data.taskTitle;
try {
groups.forEach(async group => {
const groupName = group.groupName;
console.log('groupName: ', groupName);
const groupId = groups.groupId;
const membersPromises = [];
membersPromises.push(
admin
.firestore()
.collection('Groups')
.doc(`${groupId}`)
.collection('Members') //Members collection has document for each user with their uid as the document name.
.get(),
);
console.log('memberPromises: ', membersPromises);//Function stops after this.
const membersSnapshot = await Promise.all(membersPromises);
console.log('membersSnapshots', membersSnapshot);
const uids = [];
membersSnapshot.forEach(doc => {
doc.forEach(snap => {
console.log(snap.id);
uids.push(snap.id);
});
});
console.log(uids);
const uidPromises = [];
uids.forEach(uid => {
uidPromises.push(
admin
.firestore()
.collection('Users')
.doc(`${uid}`)
.get(),
);
});
console.log('uidPromises: ', uidPromises);
const tokensSnapshots = await Promise.all(uidPromises);
const notifPromises = [];
tokensSnapshots.forEach(snap => {
console.log(snap.data());
const token = Object.keys(snap.data().fcmTokens);
const payload = {
notification: {
title: `${author} has added a new task to ${groupName}`,
body: `Task Added: ${taskTitle}`,
sound: 'default',
},
};
notifPromises.push(admin.messaging().sendToDevice(token, payload));
});
await Promise.all(notifPromises);
});
} catch (err) {
console.log(err);
}
return {result: 'OK'};
});
如您所见,没有显示错误。
帮助将不胜感激。谢谢
解决方案
推荐阅读
- python - 如何使用 Folium 将簇标记添加到 Choropleth
- google-cloud-platform - 监控多个 GCP 环境的性能指标
- javascript - Angular *ngFor 事件处理程序的变量范围
- nuxt.js - Nuxt.js 本地站点页面仅在登陆时从 Strapi 加载数据,而不是通过导航
- .net-core - Npgsql:Database.Migrate 和 Database.EnsureCreated 之间的指导差异
- javascript - 在 Dynamics 快速创建表单上使用 JavaScript 强制“电子邮件”字段?
- gremlin-server - 增加 gremlin 控制台 AWS Neptune 的空闲超时
- python - 静态文件未在生产中加载
- firebase - Vue 在使用前等待来自 props 的数据
- sql - Create table with fields of one column as columns