Twórz i obsługuj niestandardowe wyzwalacze zdarzeń

Dzięki Cloud Functions v2 możesz uruchamiać funkcje w odpowiedzi na zdarzenia niestandardowe . Są to zdarzenia dostarczane przez specjalnych lub dodatkowych dostawców zdarzeń, w przeciwieństwie do zdarzeń Firebase natywnie obsługiwanych przez pakiet Firebase SDK for Cloud Functions.

W publicznej wersji zapoznawczej dostępne zdarzenia niestandardowe są udostępniane przez rozszerzenia Firebase. Możesz zainstalować rozszerzenie w swojej aplikacji, a następnie odpowiadać na zdarzenia niestandardowe w tym podstawowym przepływie:

  1. Zainstaluj rozszerzenie, które udostępnia co najmniej jedno zdarzenie niestandardowe.
  2. Obsługuj typ zdarzenia, wdrażając procedurę obsługi onCustomEventPublished . W tej funkcji przeanalizuj ładunek zwrócony w obiekcie CloudEvent i wykonaj dowolną niestandardową logikę wymaganą przez aplikację.

Na przykład rozszerzenie zaprojektowane w celu ułatwienia aplikacjom przetwarzania dużych obrazów może emitować zdarzenie po zakończeniu zmiany rozmiaru obrazu. Aplikacje z zainstalowanym tym rozszerzeniem mogą obsłużyć zdarzenie ukończenia, aktualizując linki w aplikacji tak, aby wskazywały wersje obrazu o zmienionym rozmiarze.

Wszystkie zdarzenia niestandardowe są zgodne z formatem zdarzenia CloudEvents JSON . Aby uzyskać kluczowe informacje, takie jak lista dostępnych zdarzeń i szczegóły ładunku zdarzenia, zapoznaj się z dokumentacją konkretnego rozszerzenia.

Obsługuj niestandardowe wydarzenie

Po wykryciu zdarzenia niestandardowego dostępnego w zainstalowanym rozszerzeniu możesz obsłużyć to zdarzenie za pomocą
Procedura obsługi onCustomEventPublished . Najpierw zaimportuj ten program obsługi z pakietu Eventarc SDK wraz z pakietem Firebase Admin SDK dla Node.js do niestandardowej logiki i pakietem logger SDK do obsługi błędów:

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");

W kodzie funkcji przekaż nazwę zdarzenia, jak pokazano w przykładowej funkcji 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
    });

Dla każdego konkretnego rozszerzenia ładunek zwrócony w obiekcie zdarzenia zawiera dane, których można użyć do wykonania niestandardowej logiki dla przepływu aplikacji. W takim przypadku funkcja używa pakietu Admin SDK do kopiowania metadanych dotyczących obrazu o zmienionym rozmiarze do kolekcji w Cloud Firestore, uzyskiwania nazwy pliku z subject podanego przez zdarzenie i zapisywania metadanych z data dostarczonych przez zdarzenie.

Obsłuż zdarzenie na kanale innym niż domyślny

W powyższym przykładzie założono, że zdarzenie ukończenia obrazu jest publikowane w kanale domyślnym, w domyślnej lokalizacji us-central1 określonej w rozszerzeniu. Jeśli zdarzenie niestandardowe jest publikowane na kanale innym niż domyślny, musisz określić kanał w kodzie funkcji. Na przykład, jeśli chcesz obsługiwać zdarzenia, które są publikowane w innym niż domyślny kanał dla lokalizacji us-west1 , musisz określić kanał, jak pokazano:

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