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:
- Zainstaluj rozszerzenie, które udostępnia co najmniej jedno zdarzenie niestandardowe.
- Obsługuj typ zdarzenia, wdrażając procedurę obsługi
onCustomEventPublished
. W tej funkcji przeanalizuj ładunek zwrócony w obiekcieCloudEvent
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) => { ... });