首页 > 解决方案 > 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'};
});

这是我的日志: 在此处输入图像描述

如您所见,没有显示错误。

帮助将不胜感激。谢谢

标签: firebasefirebase-cloud-messaginggoogle-cloud-functions

解决方案


推荐阅读