Scrivi funzioni Cloud Functions per un'estensione

Quando crei un'estensione, ne scrivi la logica utilizzando Cloud Functions, in più o meno come si scrive una funzione che viene utilizzata solo per il tuo progetto. Dichiari le funzioni nel file extension.yaml e, quando gli utenti installano l'estensione, queste funzioni vengono implementate nel loro progetto.

Per informazioni generali sull'utilizzo, consulta la documentazione di Cloud Functions. Cloud Functions.

Cloud Functions di 1a e 2a generazione

Firebase supporta sia Cloud Functions di 1ª che di 2ª generazione. Tuttavia, Firebase Le estensioni hanno attualmente alcune restrizioni su quale generazione di cloud che puoi utilizzare con alcuni tipi di trigger. Per questo motivo, le estensioni includono una combinazione di funzioni di 1a e 2a generazione.

Il supporto della generazione delle funzioni è indicato di seguito per ogni tipo di trigger.

Considerazioni speciali

  • Alcune definizioni di funzione richiedono di specificare informazioni che specificato nel file extension.yaml. Ad esempio, Cloud Firestore ha Metodo document() che specifica il pattern del documento da controllare e i relativi dichiarazione corrispondente in extension.yaml ha un campo resource che specifica lo stesso.

    In queste situazioni, la configurazione specificata in extension.yaml e la configurazione specificata nella definizione della funzione è ignorato.

    È pratica comune specificare il valore configurato nella funzione definizione a prescindere, ai fini della documentazione. Gli esempi su questo segui questo schema.

  • L'SDK Cloud Functions di 1a generazione ha un metodo functions.config() e Comando dell'interfaccia a riga di comando functions:config:set che puoi usare per lavorare con valori con parametri nelle funzioni di 1a generazione. Questa tecnica è deprecata in Cloud Functions e non funzionerà in un'estensione. Utilizza invece il modulo functions.params (consigliato) o process.env.

Utilizzo di TypeScript

La maggior parte della documentazione per lo sviluppo di un'estensione descrive i flussi di lavoro utilizzando JavaScript per Cloud Functions for Firebase. Tuttavia, puoi scrivere le tue funzioni con TypeScript.

Infatti, estensioni Firebase ufficiali sono scritte in TypeScript. Puoi esaminare queste estensioni per capire per utilizzare TypeScript per la tua estensione.

Se scrivi le funzioni dell'estensione in TypeScript, devi eseguire le prima di installare l'estensione:

  1. Compila il codice sorgente delle funzioni dell'estensione in JavaScript.

    La firebase ext:dev:init comando consente di scegliere TypeScript per la scrittura delle funzioni. Il comando un'estensione completa e installabile, oltre a una build che puoi eseguire con npm run build.

  2. Nel file package.json, assicurati di indirizzare il campo main al codice JavaScript generato.

  3. Se stai installando o caricando l'estensione da un'origine locale, compila prima i file TypeScript.

Trigger di funzione supportati

Trigger HTTP

Il deployment di una funzione attivata da HTTP viene eseguito su un endpoint https pubblico ed esegue quando si accede all'endpoint.

Per informazioni su come scrivere funzioni attivate da HTTP, consulta Chiamare funzioni tramite richieste HTTP nella documentazione di Cloud Functions.

Definizione della funzione (solo 1ª gen.)

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

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

Dichiarazione della risorsa (extension.yaml)

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

Funzioni richiamabili

Le funzioni richiamabili sono simili a quelle attivate da HTTP, ma implementano una funzione che li rende più facili da chiamare dal codice lato client.

Vedi Funzioni di chiamata dall'app nella documentazione di Cloud Functions per informazioni sull'uso delle funzioni richiamabili.

Definizione della funzione (solo 1a generazione)

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

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

Dichiarazione delle risorse (extension.yaml)

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

Trigger di funzioni pianificate

Una funzione pianificata viene eseguita ripetutamente in base a una pianificazione personalizzabile.

Per informazioni sulla scrittura di funzioni pianificate, consulta Pianificare le funzioni nella documentazione di Cloud Functions.

Definizione della funzione (solo 1a generazione)

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

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

Dichiarazione della risorsa (extension.yaml)

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

Ecco i campi secondari disponibili per scheduleTrigger:

Campo Descrizione
schedule
(obbligatorio)

La frequenza con cui vuoi che venga eseguita la funzione.

Questo campo può accettare stringhe che utilizzano entrambe le sintassi (è obbligatorio inserire le stringhe tra virgolette singole):

timeZone
(facoltativo)

Il fuso orario in cui verrà eseguita la pianificazione.

Se vuoi che gli utenti possano configurare la programmazione quando installano il tuo aggiungi un nuovo parametro al file extension.yaml e fai riferimento al nella dichiarazione resource della funzione:

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

Trigger delle code di attività

Viene attivata una funzione di coda di attività nel ciclo di vita dell'estensione eventi o aggiunti manualmente alla coda di attività dell'estensione mediante Il metodo TaskQueue.enqueue() dell'SDK.

Per informazioni sulla scrittura, consulta Gestire gli eventi del ciclo di vita delle estensioni che gestiscono gli eventi del ciclo di vita.

Consulta Coda funzioni con Cloud Tasks nella Cloud Functions documentazione per informazioni sulla scrittura delle funzioni delle code di attività.

Definizione della funzione (solo 1ª gen.)

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

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

Dichiarazione della risorsa (extension.yaml)

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

Imposta la proprietà taskQueueTrigger su {} o su una mappa di opzioni che regolare i limiti di frequenza e riprovare il comportamento della coda di attività (consulta Ottimizzazione dell'attività coda).

Se vuoi attivare la funzione per gli eventi del ciclo di vita dell'estensione, aggiungi lifecycleEvents record con il nome della funzione e un elemento facoltativo messaggio di elaborazione, che verrà visualizzato nella console Firebase quando l'elaborazione inizia.

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

Una funzione attivata da Analytics viene eseguita quando un evento di Analytics specificato viene registrato.

Consulta gli attivatori di Google Analytics nella documentazione Cloud Functions per informazioni sulla scrittura di funzioni attivate da Analytics.

Definizione della funzione (solo 1a generazione)

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

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

Dichiarazione delle risorse (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: ...

Se vuoi che gli utenti possano configurare l'evento Analytics da ascoltare quando installano l'estensione, aggiungi un nuovo parametro a extension.yaml e fai riferimento al parametro nella dichiarazione resource della funzione:

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

Una funzione attivata dall'autenticazione viene eseguita quando un utente viene creato o eliminato.

Consulta la sezione Attivatori di Firebase Authentication nella Cloud Functions documentazione per informazioni sulla scrittura di funzioni attivate dall'autenticazione.

Definizione della funzione (solo 1a generazione)

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

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

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

Dichiarazione delle risorse (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: ...

La tabella seguente mostra come specificare ciascuno dei tipi di eventi Authentication supportati:

Cloud Functions attivatore di evento eventType Descrizione
onCreate() providers/firebase.auth/eventTypes/user.create Nuovo utente creato
onDelete() providers/firebase.auth/eventTypes/user.delete Utente eliminato

Cloud Firestore

Una funzione attivata da Cloud Firestore viene eseguita quando un documento viene creato, aggiornato o eliminati.

Vedi Trigger di Cloud Firestore nella documentazione Cloud Functions per informazioni sulla scrittura di funzioni attivate da Firestore.

Definizione della funzione (solo 1ª gen.)

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

Dichiarazione della risorsa (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: ...

La tabella seguente mostra come specificare ciascuno dei Cloud Firestore supportati tipi di eventi:

Trigger evento Cloud Functions eventType Descrizione
onCreate() providers/cloud.firestore/eventTypes/document.create Nuovo documento creato
onDelete() providers/cloud.firestore/eventTypes/document.delete Documento eliminato
onUpdate() providers/cloud.firestore/eventTypes/document.update Documento aggiornato
onWrite() providers/cloud.firestore/eventTypes/document.write Documento creato, eliminato o aggiornato

Se vuoi che gli utenti possano configurare il percorso del documento quando installano l'estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento il parametro nella dichiarazione resource della funzione:

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

Una funzione attivata da Pub/Sub viene eseguita quando un messaggio viene pubblicato in un argomento specifico.

Consulta i trigger di Pub/Sub nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da Pub/Sub.

Definizione della funzione (solo 1a generazione)

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

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

Dichiarazione delle risorse (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: ...

Se vuoi che gli utenti possano configurare l'argomento Pub/Sub quando Se installi l'estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento al parametro nella dichiarazione resource della funzione:

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

Una funzione attivata da Realtime Database viene eseguita quando viene creato, aggiornato o eliminato un percorso corrispondente a un pattern specificato.

Consulta Trigger di Realtime Database nella documentazione Cloud Functions per informazioni sulla scrittura di funzioni attivate da RTDB.

Definizione della funzione (solo 1a generazione)

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

Dichiarazione della risorsa (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: ...

La tabella seguente mostra come specificare ciascuno dei Cloud Firestore supportati tipi di eventi:

Trigger evento Cloud Functions eventType Descrizione
onCreate() providers/google.firebase.database/eventTypes/ref.create Dati creati
onDelete() providers/google.firebase.database/eventTypes/ref.delete Dati eliminati
onUpdate() providers/google.firebase.database/eventTypes/ref.update Dati aggiornati
onWrite() providers/google.firebase.database/eventTypes/ref.write Dati creati, eliminati o aggiornati

Se vuoi che gli utenti possano configurare il percorso da osservare quando installano l'estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento il parametro nella dichiarazione resource della funzione:

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

Una funzione attivata da Remote Config viene eseguita quando il modello di parametri di un progetto aggiornato.

Consulta Trigger di Remote Config nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da Remote Config.

Definizione della funzione (solo 1a generazione)

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

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

Dichiarazione delle risorse (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

Una funzione attivata da Cloud Storage viene eseguita quando un oggetto viene creato, archiviato o o quando vengono modificati i metadati.

Consulta Trigger di Cloud Storage nella documentazione Cloud Functions per informazioni sulla scrittura di funzioni attivate da Storage.

Definizione della funzione (solo 1a generazione)

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

Dichiarazione della risorsa (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: ...

La tabella seguente mostra come specificare ciascuno dei Cloud Storage supportati tipi di eventi:

Cloud Functions attivatore di evento eventType Descrizione
onFinalize() google.storage.object.finalize Oggetto creato
onMetadataUpdate() google.storage.object.metadataUpdate Metadati degli oggetti aggiornati
onArchive() google.storage.object.archive L'oggetto è stato archiviato
onDelete() google.storage.object.delete Oggetto eliminato

Se vuoi che gli utenti possano configurare il bucket di archiviazione quando installano l'estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento il parametro nella dichiarazione resource della funzione:

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

Una funzione attivata da Test Lab viene eseguita al termine dei test di una matrice di test.

Consulta gli attivatori di Firebase Test Lab nella documentazione Cloud Functions per informazioni sulla scrittura di funzioni attivate da Test Lab.

Definizione della funzione (solo 1a generazione)

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

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

Dichiarazione della risorsa (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 trigger di avviso

Una funzione attivata da Crashlytics viene eseguita quando Crashlytics pubblica un avviso.

Consulta gli attivatori di Firebase Alert nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da avvisi.

Definizione della funzione (solo 2ª gen.)

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

Dichiarazione delle risorse (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: ...

Puoi usare i seguenti valori per alerttype

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

Performance Monitoring attivatori di avviso

Una funzione attivata da Performance Monitoring viene eseguita quando Performance Monitoring pubblica un avviso.

Consulta gli attivatori di Firebase Alert nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da avvisi.

Definizione della funzione (solo 2a generazione)

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

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

Dichiarazione della risorsa (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 trigger di avviso

Una funzione attivata da App Distribution viene eseguita quando App Distribution pubblica un avviso.

Consulta gli attivatori di Firebase Alert nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da avvisi.

Definizione della funzione (solo 2ª gen.)

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

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

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

Dichiarazione delle risorse (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: ...

Puoi usare i seguenti valori per alerttype

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

Trigger di eventi personalizzati (Eventarc)

Una funzione attivata da Eventarc viene eseguita quando un tipo di evento specifico viene pubblicato in un canale specifico.

Consulta Creare e gestire gli attivatori di eventi personalizzati nella Cloud Functions documentazione per informazioni sulla scrittura di funzioni attivate da Eventarc.

Puoi anche pubblicare eventi dalle estensioni per offrire agli utenti un modo per inserire nella tua estensione. Consulta Utilizzare la logica personalizzata fornita dallo sviluppatore in un'estensione.

Definizione della funzione (solo 2a generazione)

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

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

Dichiarazione delle risorse (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: ...

Il canale deve esistere già quando l'estensione è installata. Ad esempio, se dipendi dagli eventi personalizzati di un'altra estensione che crea il canale, chiedere agli utenti di installare prima l'estensione.

L'esempio precedente crea un attivatore di evento personalizzato per il valore "default" Firebase canale nella regione us-central1. Puoi impostare il nome e la regione del canale personalizzabili tramite parametri. Ad esempio:


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}