Escreva Cloud Functions para uma extensão

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étodo document() que especifica o padrão de documento a ser observado, e sua declaração correspondente em extension.yaml possui um campo resource 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 CLI functions: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ódulo functions.params (recomendado) ou process.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:

  1. 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 com npm run build .

  2. Em seu arquivo package.json , certifique-se de apontar o campo main para o JavaScript gerado.

  3. 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}