如何在 Flutter Firebase Messaging 中订阅子集合?

How to subscribe to subcollection in Flutter Firebase Messaging?

我正在为我的 Flutter 应用程序处理通知。我已阅读文档,但找不到解决我的问题的方法。我想订阅子集合并使用 Firebase Functions 在子集合发生变化时发送通知。

让我更清楚地说明情况。我的应用程序中有几个用户,我已经设法设置用于消息传递的子集合。因此,对于每个用户,都有 /users 集合和 messages 子集合。我想订阅 /messages 子集合以获取 Firebase 函数的更改。

Firebase Functions in Typescript 的代码是这样的:

functions.firestore.
    document("users/{userId}/messages/{messageId}")
    .onCreate((snapshot, context) => {
      console.log(snapshot.data());
      console.log(snapshot.data());

      return admin.messaging().sendToTopic("users", {
        notification: {
          title: snapshot.data()["username"],
          body: snapshot.data()["text"],
          clickAction: "FLUTTER_NOTIFICATION_CLICK",
        },
      });
    });

但是,我不知道Flutter端如何订阅子集合(订阅集合我们使用FirebaseMessaging.instance.subscribeToTopic('users');)。

有什么办法可以实现吗?我想检测每个用户的子集合是否有变化。

Firebase Cloud Messaging 中没有集合或子集合的概念,它只有一个简单的主题列表。

因此,您必须自己将子集合映射到唯一的主题名称,例如,将两个文档 ID 都放在其中:users_<userId>_messages_<messageId>。使用这样的结构,您的用户可以订阅该特定主题,并且您的服务器端代码可以发送到相同的主题,例如:

functions.firestore.
    document("users/{userId}/messages/{messageId}")
    .onCreate((snapshot, context) => {
      console.log(snapshot.data());
      console.log(snapshot.data());

      return admin.messaging().sendToTopic(
        `users_${context.params.userId}_messages_${context.params.messageId}`, {
        notification: {
          title: snapshot.data()["username"],
          body: snapshot.data()["text"],
          clickAction: "FLUTTER_NOTIFICATION_CLICK",
        },
      });
    });