Zapisywanie funkcji w Cloud Functions na potrzeby rozszerzenia

Podczas tworzenia rozszerzenia piszesz jego logikę za pomocą Cloud Functions, w podobny sposób jak w przypadku funkcji, która będzie używana tylko w Twoim projekcie. Funkcje deklarujesz w pliku extension.yaml, a gdy użytkownicy zainstalują rozszerzenie, zostaną one wdrożone w ich projekcie.

Ogólne informacje o korzystaniu z Cloud Functions znajdziesz w dokumentacji Cloud Functions.

1 i 2 generacja Cloud Functions

Firebase obsługuje zarówno 1 generację, jak i 2 generacjęCloud Functions. Rozszerzenia Firebase mają obecnie pewne ograniczenia dotyczące tego, której generacji funkcji chmury możesz używać w przypadku niektórych typów reguł. Z tego powodu wiele rozszerzeń zawiera funkcje 1 i 2 generacji.

Poniżej znajdziesz informacje o obsłudze generowania funkcji w przypadku poszczególnych typów wyzwalaczy.

Specjalne uwagi

  • Niektóre definicje funkcji wymagają podania informacji, które są również określone w pliku extension.yaml. Na przykład Cloud Firestore ma metodę document(), która określa wzorzec dokumentu do obserwowania, a odpowiednia deklaracja w extension.yaml ma pole resource, które określa to samo.

    W takich sytuacjach używana jest konfiguracja określona w pliku extension.yaml, a konfiguracja określona w definicji funkcji jest ignorowana.

    W celu dokumentacji często określa się skonfigurowaną wartość w definicji funkcji. Przykłady na tej stronie są zgodne z tym wzorcem.

  • Pakiet SDK Cloud Functions I generacji ma metodę functions.config() i polecenie interfejsu CLI functions:config:set, których możesz używać do pracy z wartościami sparametryzowanymi w funkcjach I generacji. Ta technika jest wycofana w Cloud Functionsnie będzie działać w rozszerzeniu. Zamiast tego użyj modułu functions.params (zalecane) lub process.env.

Korzystanie z TypeScriptu

Większość dokumentacji dotyczącej tworzenia własnego rozszerzenia opisuje przepływy pracy z użyciem JavaScriptu w przypadku Cloud Functions for Firebase. Możesz jednak pisać funkcje w TypeScript.

Wszystkie oficjalne Firebaserozszerzenia są napisane w języku TypeScript. Możesz przejrzeć te rozszerzenia, aby poznać sprawdzone metody korzystania z TypeScriptu w rozszerzeniu.

Jeśli funkcje rozszerzenia są napisane w TypeScript, przed zainstalowaniem rozszerzenia musisz wykonać te czynności:

  1. Skompiluj kod źródłowy funkcji rozszerzenia do JavaScriptu.

    firebase ext:dev:init Polecenie umożliwia wybór języka TypeScript do pisania funkcji. Polecenie udostępnia kompletną, gotową do zainstalowania wtyczkę oraz skrypt kompilacji, który możesz uruchomić za pomocą npm run build.

  2. W pliku package.json upewnij się, że pole main wskazuje wygenerowany kod JavaScript.

  3. Jeśli instalujesz lub przesyłasz rozszerzenie z lokalnego źródła, najpierw skompiluj pliki TypeScript.

Obsługiwane aktywatory funkcji

Aktywatory HTTP

Funkcja wywoływana przez HTTP jest wdrażana w publicznym punkcie końcowym https i uruchamiana, gdy uzyskuje się do niego dostęp.

Więcej informacji o pisaniu funkcji aktywowanych przez HTTP znajdziesz w artykule Wywoływanie funkcji za pomocą żądań HTTPCloud Functionsdokumentacji.

Definicja funkcji (tylko 1 generacji)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onRequest(async (req, resp) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

Funkcje wywoływalne

Funkcje wywoływalne są podobne do funkcji wywoływanych przez HTTP, ale implementują protokół, który ułatwia ich wywoływanie z kodu po stronie klienta.

Informacje o korzystaniu z funkcji wywoływalnych znajdziesz w sekcji Wywoływanie funkcji z aplikacji w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacji)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onCall(async (data, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

Aktywatory zaplanowanych funkcji

Zaplanowana funkcja jest uruchamiana wielokrotnie zgodnie z dostosowywanym harmonogramem.

Informacje o tworzeniu funkcji harmonogramu znajdziesz w sekcji Planowanie funkcji w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacji)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: 'every 5 minutes'
  - name: anotherFunction
    type: ...

Oto dostępne pola podrzędne dla parametru scheduleTrigger:

Pole Opis
schedule
(wymagane)

Częstotliwość, z jaką funkcja ma być uruchamiana.

W tym polu można używać ciągów znaków z dowolną składnią (wymagane jest umieszczenie w pojedynczych cudzysłowach):

timeZone
(opcjonalnie)

Strefa czasowa, w której będzie uruchamiany harmonogram.

Jeśli chcesz, aby użytkownicy mogli skonfigurować harmonogram podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji funkcji resource:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: ${SCHEDULE_FREQUENCY}
  - name: anotherFunction
    type: ...

params:
  - param: SCHEDULE_FREQUENCY
    label: Schedule
    description: How often do you want to run yourFunctionName()?
    type: string
    default: 'every 5 minutes'  # Specifying a default is optional.
    required: true

Wyzwalacze kolejki zadań

Funkcja kolejki zadań jest wywoływana w przypadku zdarzeń cyklu życia rozszerzenia lub gdy zostanie ręcznie dodana do kolejki zadań rozszerzenia za pomocą metody TaskQueue.enqueue() pakietu Admin SDK.

Informacje o pisaniu funkcji obsługujących zdarzenia cyklu życia znajdziesz w artykule Obsługa zdarzeń cyklu życia rozszerzenia.

Więcej informacji o pisaniu funkcji kolejki zadań znajdziesz w sekcji Kolejkowanie funkcji za pomocą Cloud Tasks w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacji)

import { tasks } from "firebase-functions/v1";

export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: myTaskFunction
    type: firebaseextensions.v1beta.function
    description: >-
      Perform a task when triggered by a lifecycle event
    properties:
      taskQueueTrigger: {}

Ustaw właściwość taskQueueTrigger na wartość {} lub mapę opcji, które dostrajają limity szybkości i zachowanie kolejki zadań w przypadku ponawiania (patrz Dostrajanie kolejki zadań).

Jeśli chcesz wywoływać funkcję w przypadku zdarzeń cyklu życia rozszerzenia, dodaj rekordy lifecycleEvents z nazwą funkcji i opcjonalną wiadomością o przetwarzaniu, która będzie wyświetlana w konsoli Firebase po rozpoczęciu przetwarzania.

lifecycleEvents:
  onInstall:
    function: myTaskFunction
    processingMessage: Resizing your existing images
  onUpdate:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension
  onConfigure:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension

Analytics

Funkcja aktywowana przez Analytics jest uruchamiana, gdy zostanie zarejestrowane określone zdarzenie Analytics.

Informacje o pisaniu funkcji wywoływanych przez Analytics znajdziesz w dokumentacji Cloud Functions dotyczącej wyzwalaczy Google Analytics.

Definicja funkcji (tylko 1 generacji)

import { analytics } from "firebase-functions/v1";

export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/ga_event
  - name: anotherFunction
    type: ...

Jeśli chcesz, aby użytkownicy mogli konfigurować zdarzenie Analytics, które ma być nasłuchiwane podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji funkcji resource:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/${EVENT_NAME}
  - name: anotherFunction
    type: ...

params:
  - param: EVENT_NAME
    label: Analytics event
    description: What event do you want to respond to?
    type: string
    default: ga_event  # Specifying a default is optional.
    required: true

Authentication

Funkcja wywoływana przez uwierzytelnianie jest uruchamiana, gdy użytkownik zostanie utworzony lub usunięty.

Więcej informacji o pisaniu funkcji wywoływanych przez uwierzytelnianie znajdziesz w dokumentacji Cloud Functions w sekcji Triggery Uwierzytelniania Firebase.

Definicja funkcji (tylko 1 generacji)

import { auth } from "firebase-functions/v1";

export const yourFunctionName = auth.user().onCreate((user, context) => {
  // ...
});

export const yourFunctionName2 = auth.user().onDelete((user, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/firebase.auth/eventTypes/user.create
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...

W tabeli poniżej znajdziesz informacje o tym, jak określać poszczególne obsługiwane typy zdarzeńAuthentication:

Cloud Functions aktywator zdarzeń eventType Opis
onCreate() providers/firebase.auth/eventTypes/user.create Utworzono nowego użytkownika
onDelete() providers/firebase.auth/eventTypes/user.delete Użytkownik został usunięty

Cloud Firestore

Funkcja wywoływana przez Cloud Firestore jest uruchamiana, gdy dokument zostanie utworzony, zaktualizowany lub usunięty.

Informacje o pisaniu funkcji aktywowanych przez Firestore znajdziesz w sekcji Aktywatory Cloud Firestore w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacji)

import { firestore } from "firebase-functions/v1";

export const yourFunctionName = firestore.document("collection/{doc_id}")
  .onCreate((snapshot, context) => {
    // ...
  });

export const yourFunctionName2 = firestore.document("collection/{doc_id}")
  .onUpdate((change, context) => {
    // ...
  });

export const yourFunctionName3 = firestore.document("collection/{doc_id}")
  .onDelete((snapshot, context) => {
    // ...
  });

export const yourFunctionName4 = firestore.document("collection/{doc_id}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/collection/{documentID}
  - name: anotherFunction
    type: ...

W tabeli poniżej znajdziesz informacje o tym, jak określać poszczególne obsługiwane Cloud Firestoretypy zdarzeń:

Cloud Functions aktywator zdarzeń eventType Opis
onCreate() providers/cloud.firestore/eventTypes/document.create Utworzono nowy dokument
onDelete() providers/cloud.firestore/eventTypes/document.delete Dokument został usunięty
onUpdate() providers/cloud.firestore/eventTypes/document.update Dokument został zaktualizowany
onWrite() providers/cloud.firestore/eventTypes/document.write Dokument został utworzony, usunięty lub zaktualizowany

Jeśli chcesz, aby użytkownicy mogli konfigurować ścieżkę dokumentu podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji funkcji resource:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/${YOUR_DOCUMENT_PATH}
  - name: anotherFunction
    type: ...

params:
  - param: YOUR_DOCUMENT_PATH
    label: Cloud Firestore path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{documentID}  # Specifying a default is optional.
    required: true

Pub/Sub

Funkcja aktywowana przez Pub/Sub jest uruchamiana, gdy w określonym temacie zostanie opublikowana wiadomość.

Więcej informacji o pisaniu funkcji wyzwalanych przez Pub/Sub znajdziesz w dokumentacji Cloud Functions w sekcji Aktywatory Pub/Sub.

Definicja funkcji (tylko 1 generacji)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/topic-name
  - name: anotherFunction
    type: ...

Jeśli chcesz, aby użytkownicy mogli skonfigurować temat Pub/Sub podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji funkcji resource:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/${PUBSUB_TOPIC}
  - name: anotherFunction
    type: ...

params:
  - param: PUBSUB_TOPIC
    label: Pub/Sub topic
    description: Which Pub/Sub topic do you want to watch for messages?
    type: string
    default: topic-name  # Specifying a default is optional.
    required: true

Realtime Database

Funkcja wywoływana przez bazę danych czasu rzeczywistego jest uruchamiana, gdy ścieżka pasująca do określonego wzorca zostanie utworzona, zaktualizowana lub usunięta.

Informacje o pisaniu funkcji wywoływanych przez bazę danych czasu rzeczywistego znajdziesz w artykule Aktywatory Bazy danych czasu rzeczywistego w Cloud Functions dokumentacji.

Definicja funkcji (tylko 1 generacji)

import { database } from "firebase-functions/v1";

export const yourFunctionName = database.ref("path/to/{item}")
  .onCreate((snapshot, context) => {
    // ...
  });

export const yourFunctionName2 = database.ref("path/to/{item}")
  .onUpdate((change, context) => {
    // ...
  });

export const yourFunctionName3 = database.ref("path/to/{item}")
  .onDelete((snapshot, context) => {
    // ...
  });

export const yourFunctionName4 = database.ref("path/to/{item}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/path/to/{itemId}
  - name: anotherFunction
    type: ...

W tabeli poniżej znajdziesz informacje o tym, jak określać poszczególne obsługiwane Cloud Firestoretypy zdarzeń:

Cloud Functions aktywator zdarzeń eventType Opis
onCreate() providers/google.firebase.database/eventTypes/ref.create Utworzone dane
onDelete() providers/google.firebase.database/eventTypes/ref.delete Usunięto dane
onUpdate() providers/google.firebase.database/eventTypes/ref.update Dane zostały zaktualizowane
onWrite() providers/google.firebase.database/eventTypes/ref.write Dane zostały utworzone, usunięte lub zaktualizowane

Jeśli chcesz, aby użytkownicy mogli konfigurować ścieżkę do obserwowania podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji funkcji resource:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/${DB_PATH}
  - name: anotherFunction
    type: ...

params:
  - param: DB_PATH
    label: Realtime Database path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{itemId}  # Specifying a default is optional.
    required: true

Remote Config

Funkcja wywoływana przez Zdalną konfigurację jest uruchamiana, gdy szablon parametru projektu zostanie zaktualizowany.

Więcej informacji o pisaniu funkcji wywoływanych przez Zdalną konfigurację znajdziesz w dokumentacji Cloud Functions na temat wyzwalaczy Zdalnej konfiguracji.

Definicja funkcji (tylko 1 generacji)

import { remoteConfig } from "firebase-functions/v1";

export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.firebase.remoteconfig.update
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...

Cloud Storage

Funkcja aktywowana przez Cloud Storage jest uruchamiana, gdy obiekt zostanie utworzony, zarchiwizowany lub usunięty albo gdy zmienią się jego metadane.

Więcej informacji o pisaniu funkcji aktywowanych przez Cloud Storage znajdziesz w sekcji Aktywatory Cloud Storage w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacji)

import { storage } from "firebase-functions/v1";

export const yourFunctionName = storage.object().onFinalize((object, context) => {
  // ...
});

export const yourFunctionName2 = storage.object().onMetadataUpdate((object, context) => {
  // ...
});

export const yourFunctionName3 = storage.object().onArchive((object, context) => {
  // ...
});

export const yourFunctionName4 = storage.object().onDelete((object, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        # STORAGE_BUCKET (project's default bucket) is an auto-populated
        # parameter. You can also specify a bucket.
        resource: projects/_/buckets/${STORAGE_BUCKET}
  - name: anotherFunction
    type: ...

W tabeli poniżej znajdziesz informacje o tym, jak określać poszczególne obsługiwane Cloud Storagetypy zdarzeń:

Cloud Functions aktywator zdarzeń eventType Opis
onFinalize() google.storage.object.finalize Utworzono obiekt
onMetadataUpdate() google.storage.object.metadataUpdate Zaktualizowano metadane obiektu
onArchive() google.storage.object.archive Obiekt został zarchiwizowany
onDelete() google.storage.object.delete Obiekt został usunięty

Jeśli chcesz, aby użytkownicy mogli konfigurować zasobnik pamięci podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji funkcji resource:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        resource: projects/_/buckets/${YOUR_BUCKET}
  - name: anotherFunction
    type: ...

params:
  - param: YOUR_BUCKET
    label: Cloud Storage bucket
    description: Which bucket do you want to watch for changes?
    type: selectResource
    resourceType: storage.googleapis.com/Bucket
    default: ${STORAGE_BUCKET}  # Specifying a default is optional.
    required: true

Test Lab

Funkcja wywołana przez Laboratorium Firebase jest uruchamiana, gdy zestaw testów zakończy testy.

Informacje o pisaniu funkcji wywoływanych przez Laboratorium znajdziesz w sekcji Aktywatory Laboratorium Firebase w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacji)

import { testLab } from "firebase-functions/v1";

export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.testing.testMatrix.complete
        resource: projects/${PROJECT_ID}/testMatrices/{matrixId}
  - name: anotherFunction
    type: ...

Crashlytics reguły alertów

Funkcja wywoływana przez Crashlytics jest uruchamiana, gdy Crashlytics opublikuje alert.

Więcej informacji o pisaniu funkcji wywoływanych przez alerty znajdziesz w sekcji Aktywatory alertów Firebase w dokumentacji Cloud Functions.

Definicja funkcji (tylko 2 generacji)

import {
  onNewFatalIssuePublished,
  onNewNonfatalIssuePublished,
  onNewAnrIssuePublished,
  onRegressionAlertPublished,
  onVelocityAlertPublished,
  onStabilityDigestPublished,
} from "firebase-functions/v2/alerts/crashlytics";

export const yourFunctionName = onNewFatalIssuePublished((event) => {
  // ...
});

export const yourFunctionName2 = onNewNonfatalIssuePublished((event) => {
  // ...
});

export const yourFunctionName3 = onNewAnrIssuePublished((event) => {
  // ...
});

export const yourFunctionName4 = onRegressionAlertPublished((event) => {
  // ...
});

export const yourFunctionName5 = onVelocityAlertPublished((event) => {
  // ...
});

export const yourFunctionName6 = onStabilityDigestPublished((event) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: crashlytics.newFatalIssue
  - name: anotherFunction
    type: ...

W przypadku alerttype możesz użyć tych wartości:

  • crashlytics.newFatalIssue
  • crashlytics.newNonfatalIssue
  • crashlytics.regression
  • crashlytics.stabilityDigest
  • crashlytics.velocity
  • crashlytics.newAnrIssue

Performance Monitoring reguły alertów

Funkcja wywoływana przez Performance Monitoring jest uruchamiana, gdy Performance Monitoring opublikuje alert.

Więcej informacji o pisaniu funkcji wywoływanych przez alerty znajdziesz w sekcji Aktywatory alertów Firebase w dokumentacji Cloud Functions.

Definicja funkcji (tylko 2 generacji)

import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";

export const yourFunctionName = onThresholdAlertPublished((event) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: performance.threshold
  - name: anotherFunction
    type: ...

App Distribution reguły alertów

Funkcja wywoływana przez App Distribution jest uruchamiana, gdy App Distribution opublikuje alert.

Więcej informacji o pisaniu funkcji wywoływanych przez alerty znajdziesz w sekcji Aktywatory alertów Firebase w dokumentacji Cloud Functions.

Definicja funkcji (tylko 2 generacji)

import {
  onNewTesterIosDevicePublished,
  onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";

export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
  // ...
});

export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: appDistribution.inAppFeedback
  - name: anotherFunction
    type: ...

W przypadku alerttype możesz użyć tych wartości:

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

Aktywatory zdarzeń niestandardowych (Eventarc)

Funkcja wywoływana przez Eventarc jest uruchamiana, gdy określony typ zdarzenia zostanie opublikowany w określonym kanale.

Więcej informacji o pisaniu funkcji wywoływanych przez Eventarc znajdziesz w dokumentacji w artykule Cloud Functions Tworzenie i obsługa niestandardowych aktywatorów zdarzeń.

Możesz też publikować zdarzenia z rozszerzeń, aby umożliwić użytkownikom wstawianie niestandardowej logiki do rozszerzenia. Zobacz Używanie w rozszerzeniu niestandardowej logiki dostarczonej przez dewelopera.

Definicja funkcji (tylko 2 generacji)

import { onCustomEventPublished } from "firebase-functions/v2/eventarc";

export const yourFunctionName = onCustomEventPublished((event) => {
  // ...
});

Deklaracja zasobu (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      # LOCATION is a user-configured parameter value specified by the user
      # during installation.
      location: ${param:LOCATION}
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
        timeoutSeconds: 60
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/us-central1/channels/firebase
  - name: anotherFunction
    type: ...

Kanał musi już istnieć w momencie instalacji rozszerzenia. Jeśli na przykład korzystasz ze zdarzeń niestandardowych z innego rozszerzenia, które tworzy kanał, poproś użytkowników o najpierw zainstalowanie tego rozszerzenia.

Powyższy przykład utworzy regułę opartą na zdarzeniu niestandardowym dla kanału „default” Firebase w regionie us-central1. Możesz dostosować nazwę i region kanału za pomocą parametrów. Przykład:


params:
  - param: EVENTARC_CHANNEL_NAME
    label: Eventarc channel name
    description: What is the name of the Eventarc channel.
    default: firebase
    type: string
    required: true

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      location: ${param:LOCATION}
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/${param:LOCATION}/channels/${param:EVENTARC_CHANNEL_NAME}