Zapisywanie funkcji w Cloud Functions na potrzeby rozszerzenia

Podczas tworzenia rozszerzenia jego logikę piszesz za pomocą Cloud Functions, w podobny sposób, w jaki napisałbyś funkcję, która byłaby używana tylko w Twoim projekcie. Funkcje deklarujesz w pliku extension.yaml. Gdy użytkownicy zainstalują Twoje rozszerzenie, te funkcje zostaną wdrożone w ich projekcie.

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

1 i 2 generacji Cloud Functions

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

Obsługa generacji funkcji jest wymieniona poniżej w przypadku każdego typu aktywatora.

Specjalne uwagi

  • Niektóre definicje funkcji wymagają podania informacji, które są też określone w pliku extension.yaml. Na przykład Cloud Firestore ma metodę document(), która określa wzorzec dokumentu do obserwowania, a jej 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.

    Ze względu na dokumentację często określa się skonfigurowaną wartość w definicji funkcji. Przykłady na tej stronie są zgodne z tym wzorcem.

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

Korzystanie z TypeScript

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

Wszystkie oficjalne Firebase rozszerzenia są napisane w TypeScript. Możesz je przejrzeć, aby poznać sprawdzone metody używania TypeScript w rozszerzeniu.

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

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

    Polecenie firebase ext:dev:init command umożliwia wybranie TypeScript do pisania funkcji. Polecenie udostępnia kompletne rozszerzenie z możliwością zainstalowania a także skrypt kompilacji, który można 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 aktywowana przez HTTP jest wdrażana w publicznym punkcie końcowym https i uruchamia się, gdy ten punkt końcowy jest dostępny.

Informacje o pisaniu funkcji aktywowanych przez HTTP znajdziesz w artykule Wywoływanie funkcji za pomocą żądań HTTP w Cloud Functions dokumentacji.

Definicja funkcji (tylko 1 generacja)

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ływane

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

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

Definicja funkcji (tylko 1 generacja)

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 funkcji zaplanowanych

Funkcja zaplanowana jest uruchamiana wielokrotnie zgodnie z konfigurowalnym harmonogramem.

Informacje o pisaniu funkcji zaplanowanych znajdziesz w artykule Planowanie funkcji w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacja)

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 podpola dla scheduleTrigger:

Pole Opis
schedule
(required)

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

To pole może zawierać ciągi znaków, które używają jednej z tych składni (wymagane jest otoczenie pojedynczymi cudzysłowami):

timeZone
(optional)

Strefa czasowa, w której będzie działać 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 resource funkcji:

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

Aktywatory kolejki zadań

Funkcja kolejki zadań jest aktywowana przez zdarzenia 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.

Informacje o pisaniu funkcji kolejki zadań znajdziesz w artykule Dodawanie funkcji do kolejki za pomocą Cloud Tasks w Cloud Functions dokumentacji.

Definicja funkcji (tylko 1 generacja)

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 {} lub mapę opcji, które dostosowują limity szybkości i zachowanie kolejki zadań w przypadku ponawiania (patrz Dostosowywanie kolejki zadań).

Jeśli chcesz aktywować funkcję w przypadku zdarzeń cyklu życia rozszerzenia, dodaj lifecycleEvents rekordy z nazwą funkcji i opcjonalną wiadomością o przetwarzaniu, która będzie wyświetlana w Firebase konsoli 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 aktywowanych przez Analytics znajdziesz w artykule Aktywatory Google Analytics w dokumentacji Cloud Functions dla.

Definicja funkcji (tylko 1 generacja)

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 skonfigurować 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 resource funkcji:

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 aktywowana przez uwierzytelnianie jest uruchamiana, gdy użytkownik zostanie utworzony lub usunięty.

Informacje o pisaniu funkcji aktywowanych przez uwierzytelnianie znajdziesz w artykule Aktywatory uwierzytelniania Firebase w Cloud Functions dokumentacji.

Definicja funkcji (tylko 1 generacja)

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 pokazujemy, jak określić każdy z obsługiwanych typów 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 aktywowana przez Cloud Firestore jest uruchamiana, gdy dokument zostanie utworzony, zaktualizowany lub usunięty.

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

Definicja funkcji (tylko 1 generacja)

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 pokazujemy, jak określić każdy z obsługiwanych Cloud Firestore typów 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 skonfigurować ścieżkę dokumentu podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji resource funkcji:

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 wiadomość zostanie opublikowana w określonym temacie.

Informacje o pisaniu funkcji aktywowanych przez Pub/Sub znajdziesz w artykule Aktywatory Pub/Sub w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacja)

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 resource funkcji:

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 aktywowana przez Realtime Database jest uruchamiana, gdy ścieżka pasująca do określonego wzorca zostanie utworzona, zaktualizowana lub usunięta.

Informacje o pisaniu funkcji aktywowanych przez RTDB znajdziesz w artykule Aktywatory Bazy danych czasu rzeczywistego w dokumentacjiCloud Functions.

Definicja funkcji (tylko 1 generacja)

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 pokazujemy, jak określić każdy z obsługiwanych Cloud Firestore typów zdarzeń:

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

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

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 aktywowana przez Remote Config jest uruchamiana, gdy szablon parametru projektu zostanie zaktualizowany.

Informacje o pisaniu funkcji aktywowanych przez Zdalną konfigurację znajdziesz w artykule Aktywatory Zdalnej konfiguracji w dokumentacji Cloud Functions.

Definicja funkcji (tylko 1 generacja)

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.

Informacje o pisaniu funkcji aktywowanych przez Cloud Storage znajdziesz w artykule Aktywatory Cloud Storage w dokumentacji Cloud Functions dla.

Definicja funkcji (tylko 1 generacja)

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 pokazujemy, jak określić każdy z obsługiwanych Cloud Storage typów zdarzeń:

Cloud Functions aktywator zdarzeń eventType Opis
onFinalize() google.storage.object.finalize Utworzenie obiektu
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 skonfigurować zasobnik Cloud Storage podczas instalowania rozszerzenia, dodaj nowy parametr do pliku extension.yaml i odwołaj się do niego w deklaracji resource funkcji:

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 aktywowana przez Test Lab jest uruchamiana, gdy zestaw testów zakończy testy.

Informacje o pisaniu funkcji aktywowanych przez Test Lab znajdziesz w artykule Aktywatory Laboratorium Firebase w Cloud Functions dokumentacji.

Definicja funkcji (tylko 1 generacja)

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 aktywatory alertów

Funkcja aktywowana przez Crashlytics jest uruchamiana, gdy Crashlytics opublikuje alert.

Informacje o pisaniu funkcji aktywowanych przez alerty znajdziesz w artykule Aktywatory alertów Firebase w dokumentacji Cloud Functions.

Definicja funkcji (tylko 2 generacja)

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)

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 aktywatory alertów

Funkcja aktywowana przez Performance Monitoring jest uruchamiana, gdy Performance Monitoring opublikuje alert.

Informacje o pisaniu funkcji aktywowanych przez alerty znajdziesz w artykule Aktywatory alertów Firebase w dokumentacji Cloud Functions.

Definicja funkcji (tylko 2 generacja)

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

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

Deklaracja zasobu (extension.yaml)

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 aktywatory alertów

Funkcja aktywowana przez App Distribution jest uruchamiana, gdy App Distribution opublikuje alert.

Informacje o pisaniu funkcji aktywowanych przez alerty znajdziesz w artykule Aktywatory alertów Firebase w dokumentacji Cloud Functions.

Definicja funkcji (tylko 2 generacja)

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

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

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

Deklaracja zasobu (extension.yaml)

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 aktywowana przez Eventarc jest uruchamiana, gdy określony typ zdarzenia zostanie opublikowany w określonym kanale.

Informacje o pisaniu funkcji aktywowanych przez Eventarc znajdziesz w artykule Tworzenie i obsługa aktywatorów zdarzeń niestandardowych w Cloud Functions dokumentacji.

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

Definicja funkcji (tylko 2 generacja)

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

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

Deklaracja zasobu (extension.yaml)

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: ...

Podczas instalowania rozszerzenia kanał musi już istnieć. Jeśli na przykład zależy Ci na zdarzeniach niestandardowych z innego rozszerzenia, które tworzy kanał, poproś użytkowników, aby najpierw zainstalowali to rozszerzenie.

Powyższy przykład utworzy aktywator zdarzeń niestandardowych dla domyślnego kanału Firebase w regionie us-central1. Nazwę kanału i region możesz dostosować 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}