사용자 정의 이벤트 트리거 생성 및 처리

Cloud Functions v2를 사용하면 커스텀 이벤트 에 대한 응답으로 함수를 트리거할 수 있습니다. Cloud Functions용 ​​Firebase SDK에서 기본적으로 지원하는 Firebase 이벤트와 달리 특수 또는 추가 이벤트 제공업체에서 제공하는 이벤트입니다.

공개 미리 보기 중에 Firebase Extensions에서 사용 가능한 맞춤 이벤트를 제공합니다. 앱에 확장 프로그램을 설치한 다음 이 기본 흐름에서 사용자 지정 이벤트에 응답할 수 있습니다.

  1. 하나 이상의 사용자 정의 이벤트를 제공하는 확장을 설치하십시오.
  2. onCustomEventPublished 핸들러를 배포하여 이벤트 유형을 처리합니다. 이 함수에서 CloudEvent 객체에 반환된 페이로드를 구문 분석하고 앱에 필요한 모든 사용자 지정 논리를 수행합니다.

예를 들어 앱이 큰 이미지를 처리하는 데 도움이 되도록 설계된 확장 프로그램은 이미지 크기 조정이 완료되면 이벤트를 내보낼 수 있습니다. 이 확장 프로그램이 설치된 앱은 크기가 조정된 이미지 버전을 가리키도록 앱의 링크를 업데이트하여 완료 이벤트를 처리할 수 있습니다.

모든 사용자 지정 이벤트는 CloudEvents JSON 이벤트 형식 을 따릅니다. 사용 가능한 이벤트 목록 및 이벤트 페이로드 세부 정보와 같은 주요 정보는 특정 확장의 설명서를 참조하십시오.

사용자 지정 이벤트 처리

설치된 확장에서 사용할 수 있는 사용자 지정 이벤트를 발견하면 해당 이벤트를 다음으로 처리할 수 있습니다.
onCustomEventPublished 핸들러. 먼저 맞춤 로직을 위한 Node.js용 Firebase Admin SDK 및 오류 처리를 위한 logger SDK와 함께 Eventarc 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) => { ... });