Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Criar e lidar com acionadores de eventos personalizados

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Com o Cloud Functions (2ª geração), você pode acionar funções em resposta a eventos personalizados . Esses são eventos fornecidos por provedores de eventos especiais ou adicionais, em oposição aos eventos do Firebase suportados nativamente pelo SDK do Firebase para Cloud Functions.

Durante a visualização pública, os eventos personalizados disponíveis são fornecidos pelo Firebase Extensions. Você pode instalar uma extensão em seu aplicativo e responder a eventos personalizados neste fluxo básico:

  1. Instale uma extensão que forneça um ou mais eventos personalizados.
  2. Manipule um tipo de evento implantando um manipulador onCustomEventPublished . Nesta função, analise a carga retornada no objeto CloudEvent e execute qualquer lógica personalizada que seu aplicativo exija.

Por exemplo, uma extensão projetada para ajudar aplicativos a processar imagens grandes pode emitir um evento na conclusão do redimensionamento da imagem. Aplicativos com esta extensão instalada podem lidar com o evento de conclusão atualizando links no aplicativo para apontar para versões redimensionadas da imagem.

Todos os eventos personalizados estão em conformidade com o formato de evento CloudEvents JSON . Para obter informações importantes, como a lista de eventos disponíveis e os detalhes da carga útil do evento, consulte a documentação de uma extensão específica.

Gerenciar um evento personalizado

Depois de descobrir um evento personalizado disponível em uma extensão instalada, você pode lidar com esse evento com o
manipulador onCustomEventPublished . Primeiro, importe este manipulador do Eventarc SDK junto com o Firebase Admin SDK para Node.js para sua lógica personalizada e o logger SDK para lidar com erros:

const {onCustomEventPublished} = require("firebase-functions/v2/eventarc");
const logger = require("firebase-functions/logger");
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

Em seu código de função, passe o nome do evento conforme mostrado para a função de exemplo onimageresized :

exports.onimageresized = onCustomEventPublished(
    "firebase.extensions.storage-resize-images.v1.complete",
    (event) => {
      logger.info("Received image resize completed event", event);
      // For example, write resized image details into Firestore.
      return getFirestore()
          .collection("images")
          .doc(event.subject.replace("/", "_")) // original file path
          .set(event.data); // resized images paths and sizes
    });

Para cada extensão específica, a carga retornada no objeto de evento fornece dados que você pode usar para executar a lógica personalizada para o fluxo de seu aplicativo. Nesse caso, a função usa o Admin SDK para copiar os metadados sobre a imagem redimensionada para uma coleção no Cloud Firestore, obtendo o nome do arquivo do subject fornecido pelo evento e salvando os metadados dos data fornecidos pelo evento.

Manipular um evento em um canal não padrão

O exemplo acima assume que o evento de conclusão da imagem é publicado no canal padrão, no local padrão us-central1 conforme especificado na extensão. Nos casos em que um evento personalizado é publicado em um canal não padrão, você precisará especificar o canal em seu código de função. Por exemplo, se você deseja manipular eventos que são publicados em um canal não padrão para o local us-west1 , é necessário especificar o canal conforme mostrado:

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

export const func = onCustomEventPublished(
    {
      eventType: "firebase.extensions.storage-resize-images.v1.complete",
      channel: "locations/us-west1/channels/firebase",
      region: "us-west1",
    },
    (event) => { ... });