Scrivi Cloud Functions per un'estensione

Quando crei un'estensione, scrivi la sua logica utilizzando Cloud Functions, più o meno nello stesso modo in cui scriveresti una funzione che verrebbe utilizzata solo nel tuo progetto. Dichiari le tue funzioni nel file extension.yaml e quando gli utenti installano la tua estensione, queste funzioni vengono distribuite nel loro progetto.

Consulta la documentazione di Cloud Functions per informazioni generali sull'utilizzo di Cloud Functions.

Funzioni Cloud di prima e seconda generazione

Firebase supporta sia Cloud Functions di prima che di seconda generazione . Tuttavia, le estensioni Firebase attualmente presentano alcune restrizioni sulla generazione di funzioni cloud che puoi utilizzare con determinati tipi di trigger. Per questo motivo molte estensioni includono un mix di funzioni di 1a e 2a generazione.

Il supporto per la generazione di funzioni è indicato di seguito per ciascun tipo di trigger.

Considerazioni speciali

  • Alcune definizioni di funzioni richiedono di specificare informazioni specificate anche nel file extension.yaml . Ad esempio, Cloud Firestore ha un metodo document() che specifica il modello di documento da monitorare e la dichiarazione corrispondente in extension.yaml ha un campo resource che specifica lo stesso.

    In queste situazioni, viene utilizzata la configurazione specificata nel file extension.yaml e la configurazione specificata nella definizione della funzione viene ignorata.

    È pratica comune specificare comunque il valore configurato nella definizione della funzione, a scopo di documentazione. Gli esempi in questa pagina seguono questo schema.

  • L'SDK di prima generazione di Cloud Functions dispone di un metodo functions.config() e del comando CLI functions:config:set che puoi utilizzare per lavorare con valori parametrizzati nelle funzioni di prima generazione. Questa tecnica è deprecata in Cloud Functions e non funzionerà affatto in un'estensione. Utilizzare invece il modulo functions.params (consigliato) o process.env .

Utilizzando TypeScript

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

In effetti, tutte le estensioni ufficiali di Firebase sono scritte in TypeScript. Puoi esaminare tali estensioni per alcune best practice per utilizzare TypeScript per la tua estensione.

Se scrivi le funzioni della tua estensione in TypeScript, devi effettuare le seguenti operazioni prima di installare l'estensione:

  1. Compila il codice sorgente delle funzioni della tua estensione in JavaScript.

    Il comando firebase ext:dev:init ti consente di scegliere TypeScript per scrivere le tue funzioni. Il comando fornisce un'estensione completa e installabile , nonché uno script di build che puoi eseguire con npm run build .

  2. Nel tuo file package.json , assicurati di puntare il campo main sul JavaScript generato.

  3. Se stai installando o caricando la tua estensione da una fonte locale, compila prima i file TypeScript.

Trigger di funzioni supportate

Trigger HTTP

Una funzione attivata da HTTP viene distribuita su un endpoint https pubblico e viene eseguita quando si accede all'endpoint.

Consulta Funzioni di chiamata tramite richieste HTTP nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da HTTP.

Definizione della funzione (solo di prima generazione)

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

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

Dichiarazione della risorsa (estensione.yaml)

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

Funzioni richiamabili

Le funzioni richiamabili sono simili alle funzioni attivate da HTTP, ma implementano un protocollo che le rende comode da chiamare dal codice lato client.

Consulta Chiamare le funzioni dall'app nella documentazione di Cloud Functions per informazioni sull'utilizzo delle funzioni richiamabili.

Definizione della funzione (solo di prima generazione)

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

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

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

Consulta Funzioni di pianificazione nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni pianificate.

Definizione della funzione (solo di prima generazione)

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

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

Dichiarazione della risorsa (estensione.yaml)

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

Ecco i sottocampi disponibili per scheduleTrigger :

Campo Descrizione
schedule
(necessario)

La frequenza con cui desideri che venga eseguita la funzione.

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

timeZone
(opzionale)

Il fuso orario in cui verrà eseguita la pianificazione.

Se vuoi che gli utenti siano in grado di configurare la pianificazione quando installano la tua estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento al parametro nella dichiarazione resource della tua 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 della coda di attività

Una funzione della coda di attività viene attivata in seguito agli eventi del ciclo di vita dell'estensione o quando viene aggiunta manualmente alla coda di attività dell'estensione utilizzando il metodo TaskQueue.enqueue() di Admin SDK.

Vedi Gestire gli eventi del ciclo di vita dell'estensione per informazioni sulla scrittura di funzioni che gestiscono gli eventi del ciclo di vita.

Consulta Funzioni di accodamento con Cloud Tasks nella documentazione di Cloud Functions per informazioni sulla scrittura delle funzioni della coda di attività.

Definizione della funzione (solo di prima generazione)

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

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

Dichiarazione della risorsa (estensione.yaml)

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

Impostare la proprietà taskQueueTrigger su {} o su una mappa di opzioni che ottimizzano i limiti di velocità e il comportamento dei tentativi della coda di attività (vedere Ottimizzazione della coda di attività ).

Se desideri attivare la tua funzione sugli eventi del ciclo di vita della tua estensione, aggiungi i record lifecycleEvents con il nome della funzione e un messaggio di elaborazione facoltativo, che verrà visualizzato nella console Firebase all'inizio dell'elaborazione.

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

Analitica

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

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

Definizione della funzione (solo di prima generazione)

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

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

Dichiarazione della risorsa (estensione.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 desideri che gli utenti siano in grado di configurare l'evento Analytics da ascoltare quando installano la tua estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento al parametro nella dichiarazione resource della tua 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

Autenticazione

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

Consulta Trigger di autenticazione Firebase nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate dall'autenticazione.

Definizione della funzione (solo di prima generazione)

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

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

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

Dichiarazione della risorsa (estensione.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 di autenticazione supportati:

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

Cloud Fire Store

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

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

Definizione della funzione (solo di prima generazione)

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 (estensione.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 tipi di eventi Cloud Firestore supportati:

Attivatore di eventi 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 siano in grado di configurare il percorso del documento quando installano la tua estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento al parametro nella dichiarazione resource della tua 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 Trigger Pub/Sub nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da Pub/Sub.

Definizione della funzione (solo di prima generazione)

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

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

Dichiarazione della risorsa (estensione.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 siano in grado di configurare l'argomento Pub/Sub quando installano la tua estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento al parametro nella dichiarazione della resource della tua 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

Banca dati in tempo reale

Una funzione attivata da Realtime Database viene eseguita quando un percorso che corrisponde a un modello specificato viene creato, aggiornato o eliminato.

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

Definizione della funzione (solo di prima 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 (estensione.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 tipi di eventi Cloud Firestore supportati:

Attivatore di eventi Cloud Functions eventType Descrizione
onCreate() providers/google.firebase.database/eventTypes/ref.create Dati creati
onDelete() providers/google.firebase.database/eventTypes/ref.delete Dati cancellati
onUpdate() providers/google.firebase.database/eventTypes/ref.update Dati aggiornati
onWrite() providers/google.firebase.database/eventTypes/ref.write Dati creati, cancellati o aggiornati

Se vuoi che gli utenti siano in grado di configurare il percorso da monitorare quando installano la tua estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento al parametro nella dichiarazione resource della tua 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

Configurazione remota

Una funzione attivata da Remote Config viene eseguita quando il modello di parametri di un progetto viene 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 di prima generazione)

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

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

Dichiarazione della risorsa (estensione.yaml)

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

Archiviazione nel cloud

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

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

Definizione della funzione (solo di prima 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 (estensione.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 tipi di eventi Cloud Storage supportati:

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

Se vuoi che gli utenti siano in grado di configurare il bucket di archiviazione quando installano la tua estensione, aggiungi un nuovo parametro al file extension.yaml e fai riferimento al parametro nella dichiarazione resource della tua 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

Laboratorio di prova

Una funzione attivata da Test Lab viene eseguita quando una matrice di test termina i test.

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

Definizione della funzione (solo di prima generazione)

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

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

Dichiarazione della risorsa (estensione.yaml)

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

Si attivano gli avvisi di Crashlytics

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

Consulta Trigger degli avvisi Firebase nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da avvisi.

Definizione della funzione (solo 2a generazione)

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

È possibile utilizzare i seguenti valori per alerttype

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

Si attivano gli avvisi di monitoraggio delle prestazioni

Una funzione attivata dal monitoraggio delle prestazioni viene eseguita quando il monitoraggio delle prestazioni pubblica un avviso.

Consulta Trigger degli avvisi Firebase 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 (estensione.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: ...

Si attivano gli avvisi di distribuzione delle app

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

Consulta Trigger degli avvisi Firebase nella documentazione di Cloud Functions per informazioni sulla scrittura di funzioni attivate da avvisi.

Definizione della funzione (solo 2a generazione)

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

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

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

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

È possibile utilizzare 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 su un canale specifico.

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

Puoi anche pubblicare eventi dalle tue estensioni per offrire agli utenti un modo per inserire logica personalizzata 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 della risorsa (estensione.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 già esistere quando viene installata l'estensione. Ad esempio, se dipendi dagli eventi personalizzati di un'altra estensione che crea il canale, chiedi ai tuoi utenti di installare prima tale estensione.

L'esempio precedente creerebbe un attivatore di eventi personalizzato per il canale Firebase "predefinito" nella regione us-central1 . È possibile rendere personalizzabili il nome del canale e la regione utilizzando i parametri. Per 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}