获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Erstellen und handhaben Sie benutzerdefinierte Ereignisauslöser

Mit Cloud Functions (2. Generation) können Sie Funktionen als Reaktion auf benutzerdefinierte Ereignisse auslösen . Dies sind Ereignisse, die von speziellen oder zusätzlichen Ereignisanbietern bereitgestellt werden, im Gegensatz zu den Firebase-Ereignissen, die nativ vom Firebase SDK für Cloud-Funktionen unterstützt werden.

Während der öffentlichen Vorschau werden verfügbare benutzerdefinierte Ereignisse von Firebase-Erweiterungen bereitgestellt. Sie können eine Erweiterung in Ihrer App installieren und dann in diesem grundlegenden Ablauf auf benutzerdefinierte Ereignisse reagieren:

  1. Installieren Sie eine Erweiterung, die ein oder mehrere benutzerdefinierte Ereignisse bereitstellt.
  2. Behandeln Sie einen Ereignistyp, indem Sie einen onCustomEventPublished -Handler bereitstellen. Analysieren Sie in dieser Funktion die im CloudEvent Objekt zurückgegebene Nutzlast und führen Sie die benutzerdefinierte Logik aus, die Ihre App erfordert.

Beispielsweise könnte eine Erweiterung, die entwickelt wurde, um Apps bei der Verarbeitung großer Bilder zu unterstützen, ein Ereignis nach Abschluss der Bildgrößenänderung ausgeben. Apps mit dieser installierten Erweiterung könnten das Abschlussereignis verarbeiten, indem sie Links in der App so aktualisieren, dass sie auf verkleinerte Versionen des Bilds verweisen.

Alle benutzerdefinierten Ereignisse entsprechen dem CloudEvents JSON-Ereignisformat . Wichtige Informationen wie die Liste der verfügbaren Ereignisse und die Details der Ereignisnutzlast finden Sie in der Dokumentation einer bestimmten Erweiterung.

Behandeln Sie ein benutzerdefiniertes Ereignis

Sobald Sie ein benutzerdefiniertes Ereignis entdeckt haben, das von einer installierten Erweiterung verfügbar ist, können Sie dieses Ereignis mit der behandeln
onCustomEventPublished Handler. Importieren Sie zunächst diesen Handler aus dem Eventarc SDK zusammen mit dem Firebase Admin SDK für Node.js für Ihre benutzerdefinierte Logik und dem logger -SDK für die Fehlerbehandlung:

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

Übergeben Sie in Ihrem Funktionscode den Ereignisnamen wie für die Beispielfunktion onimageresized gezeigt:

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

Für jede einzelne Erweiterung stellt die im Ereignisobjekt zurückgegebene Nutzlast Daten bereit, die Sie verwenden können, um benutzerdefinierte Logik für Ihren Anwendungsfluss auszuführen. In diesem Fall verwendet die Funktion das Admin SDK, um Metadaten über das in der Größe geänderte Bild in eine Sammlung in Cloud Firestore zu kopieren, den Dateinamen aus dem vom Ereignis bereitgestellten subject abzurufen und Metadaten aus den vom Ereignis bereitgestellten data zu speichern.

Behandeln Sie ein Ereignis auf einem nicht standardmäßigen Kanal

Das obige Beispiel geht davon aus, dass das Bildabschlussereignis auf dem Standardkanal veröffentlicht wird, am Standardspeicherort us-central1 wie in der Erweiterung angegeben. In Fällen, in denen ein benutzerdefiniertes Ereignis auf einem nicht standardmäßigen Kanal veröffentlicht wird, müssen Sie den Kanal in Ihrem Funktionscode angeben. Wenn Sie beispielsweise Ereignisse verarbeiten möchten, die in einem nicht standardmäßigen Kanal für den Standort us-west1 veröffentlicht werden, müssen Sie den Kanal wie gezeigt angeben:

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