Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Twórz i obsługuj niestandardowe wyzwalacze zdarzeń

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Dzięki Cloud Functions (2. generacji) 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. Za pomocą niestandardowych wyzwalaczy zdarzeń Twoja aplikacja może reagować na zdarzenia dostarczane przez rozszerzenia Firebase lub publikować własne niestandardowe zdarzenia i uruchamiać funkcje w odpowiedzi na nie.

Wszystkie niestandardowe zdarzenia są zgodne z formatem zdarzenia CloudEvents JSON i są publikowane w Eventarc . Obowiązują opłaty za użytkowanie Eventarc.

Wyzwalaj funkcje z niestandardowymi zdarzeniami

Możesz publikować niestandardowe zdarzenia (lub uzyskiwać zdarzenia z rozszerzeń Firebase) i uruchamiać funkcje w odpowiedzi na te zdarzenia, implementując ten podstawowy przepływ:

  1. Opublikuj żądane wydarzenia na kanale Eventarc lub zidentyfikuj dostępne wydarzenia dostarczane przez zainstalowane rozszerzenie.
  2. W swoim kodzie funkcji zasubskrybuj zdarzenia na kanale Eventarc za pomocą modułu obsługi onCustomEventPublished .
  3. W tej funkcji przeanalizuj ładunek zwrócony w obiekcie CloudEvent i wykonaj dowolną niestandardową logikę wymaganą przez aplikację.

Na przykład aplikacja do gry może chcieć wysyłać użytkownikom powiadomienia, gdy wchodzą lub opuszczają tabelę liderów dziesięciu najlepszych konkurentów. Ta aplikacja może publikować zdarzenia z tablicy wyników w kanale domyślnym, a następnie obsługiwać zdarzenie w funkcji, która wysyła ukierunkowane powiadomienia push do użytkowników.

W innym przykładzie rozszerzenie, które pomaga aplikacjom przetwarzać duże obrazy, może emitować zdarzenie po zakończeniu zmiany rozmiaru obrazu. Aplikacje z zainstalowanym tym rozszerzeniem mogą obsłużyć zdarzenie zakończenia, aktualizując łącza w aplikacji tak, aby wskazywały na wersje obrazu o zmienionym rozmiarze.

Opublikuj wydarzenie na kanale

Zdarzenia Eventarc są publikowane w kanałach . Kanały to sposób na grupowanie powiązanych wydarzeń i zarządzanie uprawnieniami dostępu. Gdy instalujesz rozszerzenie lub wdrażasz funkcję korzystającą ze zdarzeń niestandardowych, Firebase automatycznie tworzy domyślny kanał o nazwie firebase w regionie us-central1 . Pakiet SDK Firebase Admin zawiera pakiet podrzędny eventarc do publikowania w kanałach.

Aby opublikować zdarzenie z zaufanego serwera (lub innej funkcji) przy użyciu kanału domyślnego:

import {getEventarc} from 'firebase-admin/eventarc';

getEventarc().channel().publish({
    type: 'achieved-leaderboard',
    subject: 'Welcome to the top 10',
    data: {
      message: 'You have achieved the nth position in our leaderboard!  To see . . .'
    }
});

Oprócz automatycznego tworzenia domyślnego kanału, Firebase ustawia zmienną środowiskową EVENTARC_CLOUD_EVENT_SOURCE , która określa źródło zdarzenia. Jeśli publikujesz wydarzenia poza Cloud Functions for Firebase, musisz jawnie dodać pole source do ładunku zdarzenia.

Obsługuj zdarzenia za pomocą onCustomEventPublished

Możesz obsłużyć wszystkie zdarzenia niestandardowe, w tym zdarzenia rozszerzeń, za pomocą procedury obsługi onCustomEventPublished . Najpierw zaimportuj ten moduł obsługi z pakietu Eventarc SDK wraz z pakietem Firebase Admin SDK dla Node.js na potrzeby niestandardowej logiki i pakietem SDK logger 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 swoim kodzie funkcji przekaż nazwę zdarzenia, jak pokazano dla 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 tym przypadku funkcja używa pakietu Admin SDK do kopiowania metadanych 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.

Publikuj i obsługuj zdarzenia na kanałach innych niż domyślne

Kanały niestandardowe mogą być przydatne w przypadkach, gdy masz specjalne wymagania dotyczące uprawnień lub inne wymagania i nie chcesz tego samego poziomu widoczności i dostępu do wszystkich wydarzeń. Możesz tworzyć własne kanały za pomocą konsoli Google Cloud . Publikowanie i subskrybowanie wydarzeń musi odbywać się na tym samym kanale.

W przypadkach, gdy 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 kanale innym niż domyślny dla lokalizacji us-west1 , musisz określić kanał w następujący sposób:

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