Escribe funciones de Cloud Functions para una extensión

Cuando creas una extensión, programas su lógica con Cloud Functions de manera muy similar a cuando escribes una función que solo se usa en tu propio proyecto. Debes declarar tus funciones en el archivo extension.yaml y, cuando los usuarios instalen tu extensión, estas se implementarán en su proyecto.

Consulta la documentación de Cloud Functions para obtener información general sobre el uso de Cloud Functions.

Cloud Functions de 1ª y 2ª generación

Firebase admite Cloud Functions de 1ª y 2ª generación. Sin embargo, actualmente Extensiones de Firebase tienen algunas restricciones sobre qué generación de Cloud Functions puedes usar con ciertos tipos de activadores. Por este motivo, muchas extensiones incluyen una combinación de funciones de 1ª y 2ª generación.

A continuación, se indica la compatibilidad con la generación de funciones para cada tipo de activador.

Consideraciones especiales

  • Algunas definiciones de funciones requieren que especifiques información que también se especifica en el archivo extension.yaml. Por ejemplo, Cloud Firestore tiene un método document() que especifica el patrón del documento que se debe visualizar, y su declaración correspondiente en extension.yaml tiene un campo resource que especifica lo mismo.

    En estas situaciones, se usa la configuración especificada en el archivo extension.yaml y se ignora la configuración especificada en la definición de la función.

    Es una práctica común especificar el valor configurado en la definición de la función, sin importar la documentación. Los ejemplos de esta página siguen este patrón.

  • El SDK de Cloud Functions de 1ª gen. tiene un método functions.config() y un comando functions:config:set de la CLI, que puedes usar para trabajar con valores parametrizados en funciones de 1ª gen. Esta técnica dejará de estar disponible en Cloud Functions y no funcionará en absoluto en una extensión. En su lugar, usa el módulo functions.params (recomendado) o process.env.

Usa TypeScript

En la mayor parte de la documentación para desarrollar tu propia extensión, se describen los flujos de trabajo con JavaScript para Cloud Functions for Firebase. Sin embargo, puedes escribir tus funciones con TypeScript.

De hecho, todas las extensiones oficiales de Firebase se escriben en TypeScript. Puedes revisar esas extensiones a fin de obtener recomendaciones para usar TypeScript en tu extensión.

Si escribes las funciones de tu extensión en TypeScript, debes hacer lo siguiente antes de instalar tu extensión:

  1. Compila el código fuente de las funciones de tu extensión en JavaScript.

    El comando firebase ext:dev:init permite seleccionar TypeScript para escribir tus funciones y proporciona una extensión completa instalable, además de una secuencia de comandos de compilación que puedes ejecutar con npm run build.

  2. En tu archivo package.json, asegúrate de apuntar el campo main al código JavaScript válido.

  3. Si instalas o subes tu extensión desde una fuente local, primero compila tus archivos de TypeScript.

Activadores de funciones compatibles

Activadores HTTP

Una función activada por HTTP se implementa en un extremo público https y se ejecuta cuando se accede a él.

Consulta Llama a funciones mediante solicitudes HTTP en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por HTTP.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (extension.yaml)

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

Funciones que admiten llamadas

Las funciones que admiten llamadas son similares a las que activan HTTP, pero implementan un protocolo que las hace convenientes para llamar desde tu código del cliente.

Consulta Cómo llamar a funciones desde tu app en la documentación de Cloud Functions para obtener información sobre el uso de funciones que admiten llamadas.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (extension.yaml)

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

Activadores de funciones programadas

Una función programada se ejecuta de forma repetida según un programa personalizable.

Consulta Programa funciones en la documentación de Cloud Functions si necesitas información para escribir funciones programadas.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (extension.yaml)

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

Estos son los subcampos disponibles para scheduleTrigger:

Campo Descripción
schedule
(obligatorio)

La frecuencia con la que quieres que se ejecute la función.

Este campo puede aceptar strings que usen cualquier sintaxis (se debe unir entre comillas simples):

timeZone
(opcional)

La zona horaria en que se ejecutará la programación.

Si quieres que los usuarios puedan configurar la programación cuando instalen tu extensión, agrega un parámetro nuevo a tu archivo extension.yaml y haz referencia a él en la declaración resource de la función:

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

Activadores de la lista de tareas en cola

Una función de lista de tareas en cola se activa en los eventos del ciclo de vida de tu extensión o cuando se la agrega manualmente a la lista de tareas en cola mediante el método TaskQueue.enqueue() del SDK de Admin.

Consulta la sección Controla los eventos del ciclo de vida de tu extensión si necesitas información para escribir funciones que controlen los eventos del ciclo de vida.

Consulta Coloca funciones en cola con Cloud Tasks en la documentación de Cloud Functions si necesitas información para escribir funciones de lista de tareas en cola.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (extension.yaml)

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

Establece la propiedad taskQueueTrigger establecida en {} o en un mapa de opciones que ajusten los límites de frecuencia y el comportamiento de reintento de la lista de tareas en cola (consulta Ajusta la lista de tareas en cola).

Si quieres activar la función en los eventos del ciclo de vida de la extensión, agrega registros lifecycleEvents con el nombre de la función y un mensaje de procesamiento opcional, que se mostrará en Firebase console cuando comience el procesamiento.

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 función activada por Analytics se ejecuta cuando se registra un evento de Analytics especificado.

Consulta Activadores de Google Analytics en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Analytics.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (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: ...

Si quieres que los usuarios puedan configurar el evento de Analytics para que detecte el momento en que instalen tu extensión, agrega un parámetro nuevo al archivo extension.yaml y haz referencia a este parámetro en la declaración resource de la función:

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 función activada por Authentication se ejecuta cuando se crea o se borra un usuario.

Consulta Activadores de Firebase Authentication en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Authentication.

Definición de la función (solo para la 1ª gen.)

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

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

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

Declaración del recurso (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: ...

En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Authentication admitidos:

Activador de eventos de Cloud Functions eventType Descripción
onCreate() providers/firebase.auth/eventTypes/user.create Creación de un usuario nuevo
onDelete() providers/firebase.auth/eventTypes/user.delete Se borró el usuario

Cloud Firestore

Una función activada por Cloud Firestore se ejecuta cuando se crea, actualiza o borra un documento.

Consulta los activadores de Cloud Firestore en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Firestore.

Definición de la función (solo para la 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.
    // ...
  });

Declaración del recurso (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: ...

En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Cloud Firestore admitidos:

Activador de eventos de Cloud Functions eventType Descripción
onCreate() providers/cloud.firestore/eventTypes/document.create Creación de un documento nuevo
onDelete() providers/cloud.firestore/eventTypes/document.delete Eliminación de un documento
onUpdate() providers/cloud.firestore/eventTypes/document.update Actualización de un documento
onWrite() providers/cloud.firestore/eventTypes/document.write Creación, eliminación o actualización de un documento

Si quieres que los usuarios puedan configurar la ruta de acceso del documento cuando instalen tu extensión, agrega un parámetro nuevo al archivo extension.yaml y haz referencia a este parámetro en la declaración resource de la función:

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 función activada por Pub/Sub se ejecuta cuando se publica un mensaje en un tema específico.

Consulta Activadores de Pub/Sub en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Pub/Sub.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (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: ...

Si quieres que los usuarios puedan configurar el tema de Pub/Sub cuando instalen tu extensión, agrega un parámetro nuevo al archivo extension.yaml y haz referencia a este parámetro en la declaración resource de la función:

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 función activada por Realtime Database se ejecuta cuando se crea, actualiza o borra una ruta de acceso que coincide con un patrón específico.

Consulta Activadores de Realtime Database en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por RTDB.

Definición de la función (solo para la 1ª gen.)

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

Declaración del recurso (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: ...

En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Cloud Firestore admitidos:

Activador de eventos de Cloud Functions eventType Descripción
onCreate() providers/google.firebase.database/eventTypes/ref.create Creación de datos
onDelete() providers/google.firebase.database/eventTypes/ref.delete Eliminación de datos
onUpdate() providers/google.firebase.database/eventTypes/ref.update Actualización de datos
onWrite() providers/google.firebase.database/eventTypes/ref.write Creación, eliminación o actualización de datos

Si quieres que los usuarios puedan configurar la ruta de acceso que se supervisará cuando instalen tu extensión, agrega un parámetro nuevo a tu archivo extension.yaml y haz referencia a este parámetro en la declaración resource de la función:

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 función activada por Remote Config se ejecuta cuando se actualiza la plantilla de parámetros de un proyecto.

Consulta Activadores de Remote Config en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Remote Config.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (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 función activada por Cloud Storage se ejecuta cuando se crea, archiva o borra un objeto, o cuando cambian sus metadatos.

Consulta Activadores de Cloud Storage en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Storage.

Definición de la función (solo para la 1ª gen.)

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

Declaración del recurso (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: ...

En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Cloud Storage admitidos:

Activador de eventos de Cloud Functions eventType Descripción
onFinalize() google.storage.object.finalize Creación de un objeto
onMetadataUpdate() google.storage.object.metadataUpdate Actualización de los metadatos de un objeto
onArchive() google.storage.object.archive Archivado de un objeto
onDelete() google.storage.object.delete Eliminación de un objeto

Si quieres que los usuarios puedan configurar el bucket de almacenamiento cuando instalen tu extensión, agrega un parámetro nuevo a tu archivo extension.yaml y haz referencia a este parámetro en la declaración resource de la función:

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 función activada por Test Lab se ejecuta cuando una matriz de pruebas finaliza sus pruebas.

Consulta Activadores de Firebase Test Lab en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Test Lab.

Definición de la función (solo para la 1ª gen.)

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

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

Declaración del recurso (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: ...

Activadores de alertas de Crashlytics

Una función activada por Crashlytics se ejecuta cuando Crashlytics publica una alerta.

Consulta Activadores de Alertas de Firebase en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por alertas.

Definición de la función (solo para la 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) => {
  // ...
});

Declaración del recurso (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: ...

Puedes usar los siguientes valores para alerttype

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

Activadores de alertas de Performance Monitoring

Una función activada por Performance Monitoring se ejecuta cuando Performance Monitoring publica una alerta.

Consulta Activadores de Alertas de Firebase en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por alertas.

Definición de la función (solo para la 2ª gen.)

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

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

Declaración del recurso (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: ...

Activadores de alertas de App Distribution

Una función activada por App Distribution se ejecuta cuando App Distribution publica una alerta.

Consulta Activadores de Alertas de Firebase en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por alertas.

Definición de la función (solo para la 2ª gen.)

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

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

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

Declaración del recurso (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: ...

Puedes usar los siguientes valores para alerttype

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

Activadores de eventos personalizados (Eventarc)

Una función activada por Eventarc se ejecuta cuando se publica un tipo de evento específico en un canal específico.

Consulta Crea y controla activadores de eventos personalizados en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Eventarc.

También puedes publicar eventos desde tus extensiones para darles a los usuarios una forma de insertar lógica personalizada en tu extensión. Consulta Usa la lógica personalizada que proporciona el desarrollador en una extensión.

Definición de la función (solo para la 2ª gen.)

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

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

Declaración del recurso (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: ...

El canal ya debe existir cuando se instala la extensión. Por ejemplo, si dependes de eventos personalizados de otra extensión que crea el canal, indica a tus usuarios que primero instalen esa extensión.

En el ejemplo anterior, se crearía un activador de evento personalizado para el canal “predeterminado” de Firebase en la región us-central1. Puedes hacer que el nombre del canal y la región se puedan personalizar mediante parámetros. Por ejemplo:


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}