获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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

使用 Cloud Functions(第 2 代),您可以触发函数以响应自定义事件。这些是由特殊或额外的事件提供者提供的事件,而不是 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) => { ... });