Ao criar uma extensão, você escreve sua lógica usando o Cloud Functions, da mesma forma que escreveria uma função que só seria usada em seu próprio projeto. Você declara suas funções no arquivo extension.yaml
e, quando os usuários instalam sua extensão, essas funções são implantadas em seus projetos.
Consulte a documentação do Cloud Functions para obter informações gerais sobre o uso do Cloud Functions.
Funções Cloud de 1ª e 2ª geração
O Firebase oferece suporte a Cloud Functions de 1ª e 2ª geração . No entanto, as extensões do Firebase atualmente têm algumas restrições sobre qual geração de função de nuvem você pode usar com determinados tipos de gatilho. Por esta razão, muitas extensões incluem uma combinação de funções de 1ª e 2ª geração.
O suporte à geração de função é indicado para cada tipo de gatilho abaixo.
Considerações Especiais
Algumas definições de função exigem que você especifique informações que também são especificadas no arquivo
extension.yaml
. Por exemplo, Cloud Firestore possui um métododocument()
que especifica o padrão de documento a ser observado, e sua declaração correspondente emextension.yaml
possui um camporesource
que especifica o mesmo.Nessas situações, a configuração especificada no arquivo
extension.yaml
é usada e a configuração especificada na definição da função é ignorada.É prática comum especificar o valor configurado na definição da função de qualquer maneira, para fins de documentação. Os exemplos nesta página seguem este padrão.
O SDK de 1ª geração do Cloud Functions tem um método
functions.config()
e um comando CLIfunctions:config:set
que você pode usar para trabalhar com valores parametrizados em funções de 1ª geração. Essa técnica está obsoleta no Cloud Functions e não funcionará em uma extensão. Em vez disso, use o módulofunctions.params
(recomendado) ouprocess.env
.
Usando TypeScript
A maior parte da documentação para desenvolver sua própria extensão descreve fluxos de trabalho usando JavaScript para Cloud Functions para Firebase. No entanto, você pode escrever suas funções usando TypeScript.
Na verdade, todas as extensões oficiais do Firebase são escritas em TypeScript. Você pode revisar essas extensões para conhecer algumas práticas recomendadas para usar TypeScript em sua extensão.
Se você escrever as funções da sua extensão em TypeScript, deverá fazer o seguinte antes de instalar a extensão:
Compile o código-fonte das funções da sua extensão para JavaScript.
O comando
firebase ext:dev:init
permite que você escolha TypeScript para escrever suas funções. O comando fornece uma extensão instalável completa , bem como um script de construção que você pode executar comnpm run build
.Em seu arquivo
package.json
, certifique-se de apontar o campomain
para o JavaScript gerado.Se você estiver instalando ou fazendo upload de sua extensão de uma fonte local, primeiro compile seus arquivos TypeScript.
Gatilhos de função suportados
Gatilhos HTTP
Uma função acionada por HTTP é implementada em um endpoint https
público e é executada quando o endpoint é acessado.
Consulte Chamar funções por meio de solicitações HTTP na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas por HTTP.
Definição de função (somente 1ª geração)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onRequest(async (req, resp) => {
// ...
});
Declaração de recurso (extension.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Funções chamáveis
As funções que podem ser chamadas são semelhantes às funções acionadas por HTTP, mas implementam um protocolo que as torna convenientes para serem chamadas a partir do código do lado do cliente.
Consulte Chamar funções do seu aplicativo na documentação do Cloud Functions para obter informações sobre como usar funções que podem ser chamadas.
Definição de função (somente 1ª geração)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onCall(async (data, context) => {
// ...
});
Declaração de recursos (extension.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Gatilhos de função agendados
Uma função agendada é executada repetidamente com base em uma programação personalizável.
Consulte Programar funções na documentação do Cloud Functions para obter informações sobre como escrever funções programadas.
Definição de função (somente 1ª geração)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
// ...
});
Declaração de recursos (extension.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
scheduleTrigger:
schedule: 'every 5 minutes'
- name: anotherFunction
type: ...
Aqui estão os subcampos disponíveis para scheduleTrigger
:
Campo | Descrição |
---|---|
schedule (obrigatório) | A frequência na qual você deseja que a função seja executada. Este campo pode aceitar strings que usam qualquer uma das sintaxes (é necessário colocar aspas simples ):
|
timeZone (opcional) | O fuso horário no qual o agendamento será executado.
|
Se você quiser que os usuários possam configurar o agendamento ao instalar sua extensão, adicione um novo parâmetro ao seu arquivo extension.yaml
e faça referência ao parâmetro na declaração de resource
da sua função:
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
Gatilhos de fila de tarefas
Uma função de fila de tarefas é acionada nos eventos do ciclo de vida da sua extensão ou quando adicionada manualmente à fila de tarefas da sua extensão usando o método TaskQueue.enqueue()
do SDK Admin.
Consulte Tratar os eventos do ciclo de vida da sua extensão para obter informações sobre como escrever funções que tratam dos eventos do ciclo de vida.
Consulte Enfileirar funções com Cloud Tasks na documentação do Cloud Functions para obter informações sobre como gravar funções de fila de tarefas.
Definição de função (somente 1ª geração)
import { tasks } from "firebase-functions/v1";
export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
// ...
});
Declaração de recursos (extension.yaml)
resources:
- name: myTaskFunction
type: firebaseextensions.v1beta.function
description: >-
Perform a task when triggered by a lifecycle event
properties:
taskQueueTrigger: {}
Defina a propriedade taskQueueTrigger
definida como {}
ou um mapa de opções que ajustam os limites de taxa e o comportamento de repetição da fila de tarefas (consulte Ajustando a fila de tarefas ).
Se você quiser acionar sua função nos eventos de ciclo de vida da sua extensão, adicione registros lifecycleEvents
com o nome da função e uma mensagem de processamento opcional, que será exibida no console do Firebase quando o processamento começar.
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
Análise
Uma função acionada pelo Analytics é executada quando um evento especificado do Analytics é registrado.
Consulte os acionadores do Google Analytics na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas pelo Analytics.
Definição de função (somente 1ª geração)
import { analytics } from "firebase-functions/v1";
export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
// ...
});
Declaração de 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: ...
Se você quiser que os usuários possam configurar o evento do Analytics para escutar quando instalarem sua extensão, adicione um novo parâmetro ao arquivo extension.yaml
e faça referência ao parâmetro na declaração de resource
da sua função:
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
Autenticação
Uma função acionada por autenticação é executada quando um usuário é criado ou excluído.
Consulte Gatilhos do Firebase Authentication na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas por autenticação.
Definição de função (somente 1ª geração)
import { auth } from "firebase-functions/v1";
export const yourFunctionName = auth.user().onCreate((user, context) => {
// ...
});
export const yourFunctionName2 = auth.user().onDelete((user, context) => {
// ...
});
Declaração de 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: ...
A tabela a seguir mostra como especificar cada um dos tipos de eventos de autenticação suportados:
Acionador de eventos do Cloud Functions | eventType | Descrição |
---|---|---|
onCreate() | providers/firebase.auth/eventTypes/user.create | Novo usuário criado |
onDelete() | providers/firebase.auth/eventTypes/user.delete | Usuário excluído |
Cloud Fire Store
Uma função acionada pelo Cloud Firestore é executada quando um documento é criado, atualizado ou excluído.
Consulte os gatilhos do Cloud Firestore na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas pelo Firestore.
Definição de função (somente 1ª geração)
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.
// ...
});
Declaração de 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: ...
A tabela a seguir mostra como especificar cada um dos tipos de eventos compatíveis do Cloud Firestore:
Acionador de eventos do Cloud Functions | eventType | Descrição |
---|---|---|
onCreate() | providers/cloud.firestore/eventTypes/document.create | Novo documento criado |
onDelete() | providers/cloud.firestore/eventTypes/document.delete | Documento excluído |
onUpdate() | providers/cloud.firestore/eventTypes/document.update | Documento atualizado |
onWrite() | providers/cloud.firestore/eventTypes/document.write | Documento criado, excluído ou atualizado |
Se você quiser que os usuários possam configurar o caminho do documento ao instalar sua extensão, adicione um novo parâmetro ao seu arquivo extension.yaml
e faça referência ao parâmetro na declaração resource
da sua função:
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
Uma função acionada pelo Pub/Sub é executada quando uma mensagem é publicada em um tópico específico.
Consulte Gatilhos do Pub/Sub na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas pelo Pub/Sub.
Definição de função (somente 1ª geração)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
// ...
});
Declaração de 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: ...
Se você quiser que os usuários possam configurar o tópico do Pub/Sub ao instalarem sua extensão, adicione um novo parâmetro ao arquivo extension.yaml
e faça referência ao parâmetro na declaração resource
da sua função:
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
Banco de dados em tempo real
Uma função acionada pelo Realtime Database é executada quando um caminho que corresponde a um padrão especificado é criado, atualizado ou excluído.
Consulte Gatilhos do Realtime Database na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas por RTDB.
Definição de função (somente 1ª geração)
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.
// ...
});
Declaração de recursos (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: ...
A tabela a seguir mostra como especificar cada um dos tipos de eventos compatíveis do Cloud Firestore:
Acionador de eventos do Cloud Functions | eventType | Descrição |
---|---|---|
onCreate() | providers/google.firebase.database/eventTypes/ref.create | Dados criados |
onDelete() | providers/google.firebase.database/eventTypes/ref.delete | Dados excluídos |
onUpdate() | providers/google.firebase.database/eventTypes/ref.update | Dados atualizados |
onWrite() | providers/google.firebase.database/eventTypes/ref.write | Dados criados, excluídos ou atualizados |
Se você quiser que os usuários possam configurar o caminho a ser monitorado quando instalarem sua extensão, adicione um novo parâmetro ao seu arquivo extension.yaml
e faça referência ao parâmetro na declaração resource
da sua função:
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
Configuração remota
Uma função acionada pelo Configuração remota é executada quando o modelo de parâmetro de um projeto é atualizado.
Consulte Gatilhos do Configuração remota na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas pelo Configuração remota.
Definição de função (somente 1ª geração)
import { remoteConfig } from "firebase-functions/v1";
export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
// ...
});
Declaração de recursos (extension.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
eventTrigger:
eventType: google.firebase.remoteconfig.update
resource: projects/${PROJECT_ID}
- name: anotherFunction
type: ...
Armazenamento na núvem
Uma função acionada pelo Cloud Storage é executada quando um objeto é criado, arquivado ou excluído, ou quando seus metadados são alterados.
Consulte Gatilhos do Cloud Storage na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas pelo Storage.
Definição de função (somente 1ª geração)
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) => {
// ...
});
Declaração de recursos (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: ...
A tabela a seguir mostra como especificar cada um dos tipos de eventos compatíveis do Cloud Storage:
Acionador de eventos do Cloud Functions | eventType | Descrição |
---|---|---|
onFinalize() | google.storage.object.finalize | Objeto criado |
onMetadataUpdate() | google.storage.object.metadataUpdate | Metadados de objeto atualizados |
onArchive() | google.storage.object.archive | O objeto foi arquivado |
onDelete() | google.storage.object.delete | Objeto excluído |
Se você quiser que os usuários possam configurar o bucket de armazenamento ao instalar sua extensão, adicione um novo parâmetro ao arquivo extension.yaml
e faça referência ao parâmetro na declaração resource
da sua função:
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
Laboratório de testes
Uma função acionada pelo Test Lab é executada quando uma matriz de teste termina seus testes.
Consulte Gatilhos do Firebase Test Lab na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas pelo Test Lab.
Definição de função (somente 1ª geração)
import { testLab } from "firebase-functions/v1";
export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
// ...
});
Declaração de 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: ...
Gatilhos de alerta do Crashlytics
Uma função acionada pelo Crashlytics é executada quando o Crashlytics publica um alerta.
Consulte Gatilhos de alertas do Firebase na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas por alertas.
Definição de função (somente 2ª geração)
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) => {
// ...
});
Declaração de recursos (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: ...
Você pode usar os seguintes valores para alerttype
-
crashlytics.newFatalIssue
-
crashlytics.newNonfatalIssue
-
crashlytics.regression
-
crashlytics.stabilityDigest
-
crashlytics.velocity
-
crashlytics.newAnrIssue
Gatilhos de alerta de monitoramento de desempenho
Uma função acionada pelo Monitoramento de Desempenho é executada quando o Monitoramento de Desempenho publica um alerta.
Consulte Gatilhos de alertas do Firebase na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas por alertas.
Definição de função (somente 2ª geração)
import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";
export const yourFunctionName = onThresholdAlertPublished((event) => {
// ...
});
Declaração de 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: ...
Gatilhos de alerta de distribuição de aplicativos
Uma função acionada pelo App Distribution é executada quando o App Distribution publica um alerta.
Consulte Gatilhos de alertas do Firebase na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas por alertas.
Definição de função (somente 2ª geração)
import {
onNewTesterIosDevicePublished,
onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";
export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
// ...
});
export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
// ...
});
Declaração de 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: ...
Você pode usar os seguintes valores para alerttype
-
appDistribution.newTesterIosDevice
-
appDistribution.inAppFeedback
Gatilhos de eventos personalizados (Eventarc)
Uma função acionada pelo Eventarc é executada quando um tipo de evento específico é publicado em um canal específico.
Consulte Criar e manipular gatilhos de eventos personalizados na documentação do Cloud Functions para obter informações sobre como escrever funções acionadas pelo Eventarc.
Você também pode publicar eventos de suas extensões para oferecer aos usuários uma maneira de inserir lógica personalizada em sua extensão. Consulte Usar lógica personalizada fornecida pelo desenvolvedor em uma extensão .
Definição de função (somente 2ª geração)
import { onCustomEventPublished } from "firebase-functions/v2/eventarc";
export const yourFunctionName = onCustomEventPublished((event) => {
// ...
});
Declaração de 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: ...
O canal já deve existir quando sua extensão for instalada. Por exemplo, se você depende de eventos personalizados de outra extensão que cria o canal, instrua seus usuários a instalarem essa extensão primeiro.
O exemplo acima criaria um gatilho de evento personalizado para o canal "padrão" do Firebase na região us-central1
. Você pode personalizar o nome do canal e a região usando parâmetros. Por exemplo:
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}