Cuando creas una extensión, escribes su lógica usando Cloud Functions, de la misma manera que escribirías una función que solo se usaría en tu propio proyecto. Declaras tus funciones en el archivo extension.yaml
y, cuando los usuarios instalan tu extensión, estas funciones se implementan en su proyecto.
Consulte la documentación de Cloud Functions para obtener información general sobre el uso de Cloud Functions.
Funciones Cloud de 1ª y 2ª generación
Firebase admite funciones de nube de primera y segunda generación . Sin embargo, las extensiones de Firebase actualmente tienen algunas restricciones sobre qué generación de función de nube puede 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 especifique información que también se especifica en el archivo
extension.yaml
. Por ejemplo, Cloud Firestore tiene un métododocument()
que especifica el patrón de documento que se va a observar, y su declaración correspondiente enextension.yaml
tiene un camporesource
que especifica lo mismo.En estas situaciones, se utiliza la configuración especificada en el archivo
extension.yaml
y se ignora la configuración especificada en la definición de función.Es una práctica común especificar el valor configurado en la definición de función independientemente, por motivos de documentación. Los ejemplos de esta página siguen este patrón.
El SDK de 1.ª generación de Cloud Functions tiene un método
functions.config()
y un comando CLIfunctions:config:set
que puede utilizar para trabajar con valores parametrizados en funciones de 1.ª generación. Esta técnica está obsoleta en Cloud Functions y no funcionará en absoluto en una extensión. En su lugar, utilice el módulofunctions.params
(recomendado) oprocess.env
.
Usando mecanografiado
La mayor parte de la documentación para desarrollar su propia extensión describe flujos de trabajo que utilizan JavaScript para Cloud Functions para Firebase. Sin embargo, puedes escribir tus funciones usando TypeScript.
De hecho, todas las extensiones oficiales de Firebase están escritas en TypeScript. Puede revisar esas extensiones para conocer algunas de las mejores prácticas para usar TypeScript para su extensión.
Si escribe las funciones de su extensión en TypeScript, debe hacer lo siguiente antes de instalar su extensión:
Compile el código fuente de las funciones de su extensión en JavaScript.
El comando
firebase ext:dev:init
le permite elegir TypeScript para escribir sus funciones. El comando le proporciona una extensión instalable completa , así como un script de compilación que puede ejecutar connpm run build
.En su archivo
package.json
, asegúrese de señalar el campomain
al JavaScript generado.Si está instalando o cargando su extensión desde una fuente local, primero compile sus archivos TypeScript.
Activadores de funciones admitidas
Activadores HTTP
Una función activada por HTTP se implementa en un punto final https
público y se ejecuta cuando se accede al punto final.
Consulte Llamar 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 función (solo 1.ª generación)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onRequest(async (req, resp) => {
// ...
});
Declaración de recursos (extensión.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Funciones invocables
Las funciones invocables son similares a las funciones activadas por HTTP, pero implementan un protocolo que hace que sea conveniente llamarlas desde el código del lado del cliente.
Consulte Llamar a funciones desde su aplicación en la documentación de Cloud Functions para obtener información sobre el uso de funciones invocables.
Definición de función (solo 1.ª generación)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onCall(async (data, context) => {
// ...
});
Declaración de recursos (extensión.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 repetidamente según un cronograma personalizable.
Consulte Programar funciones en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones programadas.
Definición de función (solo 1.ª generación)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
// ...
});
Declaración de recursos (extensión.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 (requerido) | La frecuencia con la que desea que se ejecute la función. Este campo puede aceptar cadenas que utilicen cualquiera de las sintaxis (es necesario incluirlas entre comillas simples ):
|
timeZone (opcional) | La zona horaria en la que se ejecutará el programa.
|
Si desea que los usuarios puedan configurar la programación cuando instalen su extensión, agregue un nuevo parámetro a su archivo extension.yaml
y haga referencia al parámetro en la declaración de resource
de su 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 cola de tareas
Una función de cola de tareas se activa en los eventos del ciclo de vida de su extensión o cuando se agrega manualmente a la cola de tareas de su extensión mediante el método TaskQueue.enqueue()
del SDK de administrador.
Consulte Manejar los eventos del ciclo de vida de su extensión para obtener información sobre cómo escribir funciones que manejan eventos del ciclo de vida.
Consulte Poner en cola funciones con Cloud Tasks en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones de cola de tareas.
Definición de función (solo 1.ª generación)
import { tasks } from "firebase-functions/v1";
export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
// ...
});
Declaración de recursos (extensión.yaml)
resources:
- name: myTaskFunction
type: firebaseextensions.v1beta.function
description: >-
Perform a task when triggered by a lifecycle event
properties:
taskQueueTrigger: {}
Establezca la propiedad taskQueueTrigger
en {}
o en un mapa de opciones que ajuste los límites de velocidad y el comportamiento de reintento de la cola de tareas (consulte Ajuste de la cola de tareas ).
Si desea activar su función en los eventos del ciclo de vida de su extensión, agregue 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
Analítica
Una función activada por Analytics se ejecuta cuando se registra un evento de Analytics específico.
Consulte los activadores de Google Analytics en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Analytics.
Definición de función (solo 1.ª generación)
import { analytics } from "firebase-functions/v1";
export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
// ...
});
Declaración de recursos (extensión.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 desea que los usuarios puedan configurar el evento de Analytics para escucharlo cuando instalen su extensión, agregue un nuevo parámetro a su archivo extension.yaml
y haga referencia al parámetro en la declaración de resource
de su 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
Autenticación
Una función activada por autenticación se ejecuta cuando se crea o elimina un usuario.
Consulte Activadores de autenticación de Firebase en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por autenticación.
Definición de función (solo 1.ª generación)
import { auth } from "firebase-functions/v1";
export const yourFunctionName = auth.user().onCreate((user, context) => {
// ...
});
export const yourFunctionName2 = auth.user().onDelete((user, context) => {
// ...
});
Declaración de recursos (extensión.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 siguiente tabla muestra cómo especificar cada uno de los tipos de eventos de autenticación admitidos:
Desencadenador de eventos de Cloud Functions | eventType | Descripción |
---|---|---|
onCreate() | providers/firebase.auth/eventTypes/user.create | Nuevo usuario creado |
onDelete() | providers/firebase.auth/eventTypes/user.delete | Usuario eliminado |
Tienda de fuego en la nube
Una función activada por Cloud Firestore se ejecuta cuando se crea, actualiza o elimina un documento.
Consulta los activadores de Cloud Firestore en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Firestore.
Definición de función (solo 1.ª generación)
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 de recursos (extensión.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 siguiente tabla muestra cómo especificar cada uno de los tipos de eventos de Cloud Firestore admitidos:
Desencadenador de eventos de Cloud Functions | eventType | Descripción |
---|---|---|
onCreate() | providers/cloud.firestore/eventTypes/document.create | Nuevo documento creado |
onDelete() | providers/cloud.firestore/eventTypes/document.delete | Documento eliminado |
onUpdate() | providers/cloud.firestore/eventTypes/document.update | Documento actualizado |
onWrite() | providers/cloud.firestore/eventTypes/document.write | Documento creado, eliminado o actualizado |
Si desea que los usuarios puedan configurar la ruta del documento cuando instalen su extensión, agregue un nuevo parámetro a su archivo extension.yaml
y haga referencia al parámetro en la declaración de resource
de su 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.
Consulte Activadores de Pub/Sub en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Pub/Sub.
Definición de función (solo 1.ª generación)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
// ...
});
Declaración de recursos (extensión.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 desea que los usuarios puedan configurar el tema Pub/Sub cuando instalen su extensión, agregue un nuevo parámetro a su archivo extension.yaml
y haga referencia al parámetro en la declaración de resource
de su 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
Base de datos en tiempo real
Una función activada por Realtime Database se ejecuta cuando se crea, actualiza o elimina una ruta que coincide con un patrón específico.
Consulte Activadores de bases de datos en tiempo real en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por RTDB.
Definición de función (solo 1.ª generación)
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 de recursos (extensión.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 siguiente tabla muestra cómo especificar cada uno de los tipos de eventos de Cloud Firestore admitidos:
Desencadenador de eventos de Cloud Functions | eventType | Descripción |
---|---|---|
onCreate() | providers/google.firebase.database/eventTypes/ref.create | Datos creados |
onDelete() | providers/google.firebase.database/eventTypes/ref.delete | Datos eliminados |
onUpdate() | providers/google.firebase.database/eventTypes/ref.update | Datos actualizados |
onWrite() | providers/google.firebase.database/eventTypes/ref.write | Datos creados, eliminados o actualizados |
Si desea que los usuarios puedan configurar la ruta para observar cuando instalen su extensión, agregue un nuevo parámetro a su archivo extension.yaml
y haga referencia al parámetro en la declaración de resource
de su 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
Configuración remota
Una función activada por Remote Config se ejecuta cuando se actualiza la plantilla de parámetros de un proyecto.
Consulte Activadores de Remote Config en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Remote Config.
Definición de función (solo 1.ª generación)
import { remoteConfig } from "firebase-functions/v1";
export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
// ...
});
Declaración de recursos (extensión.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.firebase.remoteconfig.update
resource: projects/${PROJECT_ID}
- name: anotherFunction
type: ...
Almacenamiento en la nube
Una función activada por Cloud Storage se ejecuta cuando se crea, archiva o elimina un objeto, o cuando cambian sus metadatos.
Consulta los 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 función (solo 1.ª generación)
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 de recursos (extensión.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 siguiente tabla muestra cómo especificar cada uno de los tipos de eventos de Cloud Storage admitidos:
Desencadenador de eventos de Cloud Functions | eventType | Descripción |
---|---|---|
onFinalize() | google.storage.object.finalize | Objeto creado |
onMetadataUpdate() | google.storage.object.metadataUpdate | Metadatos del objeto actualizados. |
onArchive() | google.storage.object.archive | El objeto fue archivado |
onDelete() | google.storage.object.delete | Objeto eliminado |
Si desea que los usuarios puedan configurar el depósito de almacenamiento cuando instalen su extensión, agregue un nuevo parámetro a su archivo extension.yaml
y haga referencia al parámetro en la declaración de resource
de su 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
Laboratorio de pruebas
Una función activada por Test Lab se ejecuta cuando una matriz de prueba finaliza sus pruebas.
Consulta los activadores de Firebase Test Lab en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Test Lab.
Definición de función (solo 1.ª generación)
import { testLab } from "firebase-functions/v1";
export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
// ...
});
Declaración de recursos (extensión.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 alerta de Crashlytics
Se ejecuta una función activada por Crashlytics cuando Crashlytics publica una alerta.
Consulte 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 función (solo 2.ª generación)
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 de recursos (extensión.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: ...
Puede utilizar los siguientes valores para alerttype
-
crashlytics.newFatalIssue
-
crashlytics.newNonfatalIssue
-
crashlytics.regression
-
crashlytics.stabilityDigest
-
crashlytics.velocity
-
crashlytics.newAnrIssue
Activadores de alerta de supervisión del rendimiento
Se ejecuta una función activada por Performance Monitoring cuando Performance Monitoring publica una alerta.
Consulte 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 función (solo 2.ª generación)
import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";
export const yourFunctionName = onThresholdAlertPublished((event) => {
// ...
});
Declaración de recursos (extensión.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 alerta de distribución de aplicaciones
Se ejecuta una función activada por App Distribution cuando App Distribution publica una alerta.
Consulte 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 función (solo 2.ª generación)
import {
onNewTesterIosDevicePublished,
onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";
export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
// ...
});
export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
// ...
});
Declaración de recursos (extensión.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: ...
Puede utilizar los siguientes valores para alerttype
-
appDistribution.newTesterIosDevice
-
appDistribution.inAppFeedback
Activadores de eventos personalizados (Eventarc)
Una función activada por Eventarc se ejecuta cuando un tipo de evento específico se publica en un canal específico.
Consulte Crear y manejar activadores de eventos personalizados en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Eventarc.
También puede publicar eventos desde sus extensiones para brindarles a los usuarios una forma de insertar lógica personalizada en su extensión. Consulte Usar lógica personalizada proporcionada por el desarrollador en una extensión .
Definición de función (solo 2.ª generación)
import { onCustomEventPublished } from "firebase-functions/v2/eventarc";
export const yourFunctionName = onCustomEventPublished((event) => {
// ...
});
Declaración de recursos (extensión.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 su extensión. Por ejemplo, si depende de eventos personalizados de otra extensión que crea el canal, indique a sus usuarios que instalen esa extensión primero.
El ejemplo anterior crearía un activador de evento personalizado para el canal de Firebase "predeterminado" en la región us-central1
. Puede personalizar el nombre del canal y la región 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}