創建和處理自定義事件觸發器

使用 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) => { ... });