Tạo và xử lý trình kích hoạt sự kiện tùy chỉnh

Với Chức năng đám mây v2, bạn có thể kích hoạt các chức năng để đáp ứng các sự kiện tùy chỉnh . Đây là các sự kiện được cung cấp bởi các nhà cung cấp sự kiện đặc biệt hoặc bổ sung, trái ngược với các sự kiện Firebase được hỗ trợ bởi SDK Firebase cho Chức năng đám mây.

Trong quá trình xem trước công khai, các sự kiện tùy chỉnh có sẵn do Tiện ích mở rộng Firebase cung cấp. Bạn có thể cài đặt tiện ích mở rộng trong ứng dụng của mình và sau đó phản hồi các sự kiện tùy chỉnh trong quy trình cơ bản sau:

  1. Cài đặt tiện ích mở rộng cung cấp một hoặc nhiều sự kiện tùy chỉnh.
  2. Xử lý loại sự kiện bằng cách triển khai trình xử lý onCustomEventPublished . Trong chức năng này, phân tích cú pháp tải trọng được trả về trong đối tượng CloudEvent và thực hiện bất kỳ logic tùy chỉnh nào mà ứng dụng của bạn yêu cầu.

Ví dụ: một tiện ích mở rộng được thiết kế để giúp ứng dụng xử lý hình ảnh lớn có thể phát ra một sự kiện khi hoàn thành việc thay đổi kích thước hình ảnh. Các ứng dụng đã cài đặt tiện ích mở rộng này có thể xử lý sự kiện hoàn thành bằng cách cập nhật các liên kết trong ứng dụng để trỏ đến các phiên bản đã thay đổi kích thước của hình ảnh.

Tất cả các sự kiện tùy chỉnh đều tuân theo định dạng sự kiện CloudEvents JSON . Để biết thông tin chính như danh sách các sự kiện có sẵn và chi tiết về khối lượng sự kiện, hãy tham khảo tài liệu của một tiện ích mở rộng cụ thể.

Xử lý một sự kiện tùy chỉnh

Khi bạn đã phát hiện ra một sự kiện tùy chỉnh có sẵn từ một tiện ích mở rộng đã cài đặt, bạn có thể xử lý sự kiện đó với
Trình xử lý onCustomEventPublished . Trước tiên, hãy nhập trình xử lý này từ SDK logger cùng với SDK quản trị Firebase cho Node.js để có logic tùy chỉnh của bạn và SDK trình ghi để xử lý lỗi:

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

Trong mã hàm của bạn, hãy nhập tên sự kiện như được hiển thị cho hàm 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
    });

Đối với mỗi tiện ích mở rộng cụ thể, trọng tải được trả về trong đối tượng sự kiện cung cấp dữ liệu mà bạn có thể sử dụng để thực hiện logic tùy chỉnh cho luồng ứng dụng của mình. Trong trường hợp này, chức năng sử dụng SDK quản trị để sao chép siêu dữ liệu về hình ảnh đã thay đổi kích thước vào bộ sưu tập trong Cloud Firestore, lấy tên tệp từ subject do sự kiện cung cấp và lưu siêu dữ liệu từ data do sự kiện cung cấp.

Xử lý sự kiện trên một kênh không phải mặc định

Ví dụ trên giả định rằng sự kiện hoàn thành hình ảnh được xuất bản trên kênh mặc định, ở vị trí mặc định us-central1 như được chỉ định trong tiện ích mở rộng. Trong trường hợp một sự kiện tùy chỉnh được xuất bản trên một kênh không phải mặc định, bạn sẽ cần chỉ định kênh trong mã chức năng của mình. Ví dụ: nếu bạn muốn xử lý các sự kiện được xuất bản trong một kênh không phải là kênh mặc định cho vị trí us-west1 , bạn cần chỉ định kênh như được hiển thị:

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