2022 年 10 月 18 日に開催される Firebase Summit に、直接会場で、またはオンラインでご参加ください。Firebase を使用してアプリ開発を加速させ、自信を持ってアプリをリリースし、簡単にスケールする方法をご紹介します。 今すぐ登録

カスタムイベントトリガーを作成して処理する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Cloud Functions v2 では、カスタム イベントに応答して関数をトリガーできます。これらは、Firebase SDK for Cloud Functions によってネイティブにサポートされている Firebase イベントとは対照的に、特別なまたは追加のイベント プロバイダーによって提供されるイベントです。

パブリック プレビューの期間中、利用可能なカスタム イベントは Firebase Extensions によって提供されます。アプリに拡張機能をインストールしてから、次の基本的なフローでカスタム イベントに応答できます。

  1. 1 つ以上のカスタム イベントを提供する拡張機能をインストールします。
  2. onCustomEventPublishedハンドラーをデプロイして、イベント タイプを処理します。この関数では、 CloudEventオブジェクトで返されたペイロードを解析し、アプリに必要なカスタム ロジックを実行します。

たとえば、アプリが大きな画像を処理できるように設計された拡張機能は、画像のサイズ変更の完了時にイベントを発行する場合があります。この拡張機能がインストールされているアプリは、アプリ内のリンクを更新して、サイズ変更されたバージョンの画像を指すようにすることで、完了イベントを処理できます。

すべてのカスタム イベントは、 CloudEvents JSON イベント形式に準拠しています。使用可能なイベントのリストやイベント ペイロードの詳細などの重要な情報については、特定の拡張機能のドキュメントを参照してください。

カスタム イベントを処理する

インストールされた拡張機能から利用可能なカスタム イベントを見つけたら、そのイベントを
onCustomEventPublishedハンドラー。まず、Eventarc SDK からこのハンドラを、カスタム ロジック用の Node.js 用 Firebase Admin SDK とエラー処理用のlogger SDK とともにインポートします。

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

関数コードで、サンプル関数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
    });

特定の拡張機能ごとに、イベント オブジェクトで返されるペイロードは、アプリケーション フローのカスタム ロジックを実行するために使用できるデータを提供します。この場合、関数は Admin SDK を使用してサイズ変更された画像に関するメタデータを Cloud Firestore のコレクションにコピーし、イベントによって提供されたsubjectからファイル名を取得し、イベントによって提供されたdataからメタデータを保存します。

デフォルト以外のチャネルでイベントを処理する

上記の例では、拡張機能で指定されたデフォルトの場所us-central1で、イメージ完了イベントがデフォルトのチャネルで公開されることを前提としています。カスタム イベントが既定以外のチャネルで発行される場合は、関数コードでチャネルを指定する必要があります。たとえば、 us-west1ロケーションのデフォルト以外のチャネルで発行されたイベントを処理する場合は、次のようにチャネルを指定する必要があります。

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