创建和处理自定义事件触发器

使用 Cloud Functions v2,您可以触发函数以响应自定义事件。这些事件由特殊或附加事件提供程序提供,与 Firebase SDK for Cloud Functions 原生支持的 Firebase 事件不同。

在公开预览期间,Firebase Extensions 提供了可用的自定义事件。您可以在您的应用程序中安装扩展程序,然后在此基本流程中响应自定义事件:

  1. 安装提供一个或多个自定义事件的扩展。
  2. 通过部署onCustomEventPublished处理程序来处理事件类型。在此函数中,解析CloudEvent对象中返回的有效负载,并执行您的应用程序需要的任何自定义逻辑。

例如,旨在帮助应用程序处理大图像的扩展程序可能会在完成图像大小调整时发出一个事件。安装了此扩展程序的应用程序可以通过更新应用程序中的链接以指向调整大小的图像版本来处理完成事件。

所有自定义事件都符合CloudEvents JSON 事件格式。有关可用事件列表和事件有效负载的详细信息等关键信息,请参阅特定扩展的文档。

处理自定义事件

一旦您发现可从已安装的扩展中获得的自定义事件,您可以使用
onCustomEventPublished处理程序。首先,从 Eventarc SDK 中导入此处理程序以及用于 Node.js 的 Firebase Admin SDK 以用于您的自定义逻辑和logger SDK 用于处理错误:

const {onCustomEventPublished} = require("firebase-functions/v2/eventarc");
const logger = require("firebase-functions/logger");
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

在您的函数代码中,传递事件名称,如示例函数onimageresized所示:

exports.onimageresized = onCustomEventPublished(
    "firebase.extensions.storage-resize-images.v1.complete",
    (event) => {
      logger.info("Received image resize completed event", event);
      // For example, write resized image details into Firestore.
      return getFirestore()
          .collection("images")
          .doc(event.subject.replace("/", "_")) // original file path
          .set(event.data); // resized images paths and sizes
    });

对于每个特定的扩展,事件对象中返回的有效负载提供了可用于为应用程序流执行自定义逻辑的数据。在这种情况下,该函数使用 Admin SDK 将有关调整大小的图像的元数据复制到 Cloud Firestore 中的集合,从事件提供的subject中获取文件名,并从事件提供的data中保存元数据。

处理非默认频道上的事件

上面的示例假设图像完成事件在默认通道上发布,在扩展中指定的默认位置us-central1中。如果自定义事件在非默认通道上发布,您需要在函数代码中指定通道。例如,如果要处理在us-west1位置的非默认通道中发布的事件,则需要指定通道,如下所示:

import { onCustomEventPublished } from "firebase-functions/v2/eventarc";

export const func = onCustomEventPublished(
    {
      eventType: "firebase.extensions.storage-resize-images.v1.complete",
      channel: "locations/us-west1/channels/firebase",
      region: "us-west1",
    },
    (event) => { ... });