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

Créer et gérer des déclencheurs d'événements personnalisés

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Avec Cloud Functions (2e génération), vous pouvez déclencher des fonctions en réponse à des événements personnalisés . Il s'agit d'événements fournis par des fournisseurs d'événements spéciaux ou supplémentaires, par opposition aux événements Firebase pris en charge de manière native par le SDK Firebase pour Cloud Functions.

Lors de la préversion publique, les événements personnalisés disponibles sont fournis par les extensions Firebase. Vous pouvez installer une extension dans votre application, puis répondre à des événements personnalisés dans ce flux de base :

  1. Installez une extension qui fournit un ou plusieurs événements personnalisés.
  2. Gérez un type d'événement en déployant un gestionnaire onCustomEventPublished . Dans cette fonction, analysez la charge utile renvoyée dans l'objet CloudEvent et exécutez la logique personnalisée requise par votre application.

Par exemple, une extension conçue pour aider les applications à traiter des images volumineuses peut émettre un événement à la fin du redimensionnement de l'image. Les applications avec cette extension installée peuvent gérer l'événement d'achèvement en mettant à jour les liens dans l'application pour pointer vers des versions redimensionnées de l'image.

Tous les événements personnalisés sont conformes au format d' événement CloudEvents JSON . Pour des informations clés telles que la liste des événements disponibles et les détails de la charge utile de l'événement, reportez-vous à la documentation d'une extension particulière.

Gérer un événement personnalisé

Une fois que vous avez découvert un événement personnalisé disponible à partir d'une extension installée, vous pouvez gérer cet événement avec le
gestionnaire onCustomEventPublished . Tout d'abord, importez ce gestionnaire à partir du SDK Eventarc avec le SDK Firebase Admin pour Node.js pour votre logique personnalisée et le SDK logger pour la gestion des erreurs :

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");

Dans votre code de fonction, transmettez le nom de l'événement comme indiqué pour l'exemple de fonction 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
    });

Pour chaque extension particulière, la charge utile renvoyée dans l'objet d'événement fournit des données que vous pouvez utiliser pour exécuter une logique personnalisée pour votre flux d'application. Dans ce cas, la fonction utilise le SDK Admin pour copier les métadonnées de l'image redimensionnée dans une collection dans Cloud Firestore, en obtenant le nom de fichier à partir du subject fourni par l'événement et en enregistrant les métadonnées à partir des data fournies par l'événement.

Gérer un événement sur un canal autre que le canal par défaut

L'exemple ci-dessus suppose que l'événement d'achèvement d'image est publié sur le canal par défaut, à l'emplacement par défaut us-central1 comme spécifié dans l'extension. Dans les cas où un événement personnalisé est publié sur un canal autre que le canal par défaut, vous devrez spécifier le canal dans votre code de fonction. Par exemple, si vous souhaitez gérer les événements qui sont publiés dans un canal autre que le canal par défaut pour l'emplacement us-west1 , vous devez spécifier le canal comme indiqué :

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