สร้างและจัดการทริกเกอร์เหตุการณ์ที่กำหนดเอง

ด้วย Cloud Function v2 คุณสามารถทริกเกอร์ฟังก์ชันต่างๆ เพื่อตอบสนองต่อ เหตุการณ์ที่กำหนดเอง เหตุการณ์เหล่านี้เป็นเหตุการณ์ที่จัดทำโดยผู้ให้บริการเหตุการณ์พิเศษหรือเพิ่มเติม ซึ่งต่างจากเหตุการณ์ Firebase ที่ Firebase SDK สำหรับฟังก์ชันระบบคลาวด์รองรับโดยกำเนิด

ในระหว่างการแสดงตัวอย่างสาธารณะ Firebase Extensions จะให้บริการเหตุการณ์ที่กำหนดเอง คุณสามารถติดตั้งส่วนขยายในแอปของคุณแล้วตอบสนองต่อเหตุการณ์ที่กำหนดเองในขั้นตอนพื้นฐานนี้:

  1. ติดตั้งส่วนขยายที่มีเหตุการณ์ที่กำหนดเองอย่างน้อยหนึ่งเหตุการณ์
  2. จัดการประเภทเหตุการณ์โดยปรับใช้ตัวจัดการ onCustomEventPublished ในฟังก์ชันนี้ แยกวิเคราะห์เพย์โหลดที่ส่งคืนในออบเจ็กต์ CloudEvent และดำเนินการตามตรรกะแบบกำหนดเองที่แอปของคุณต้องการ

ตัวอย่างเช่น ส่วนขยายที่ออกแบบมาเพื่อช่วยให้แอปประมวลผลภาพขนาดใหญ่อาจส่งเหตุการณ์เมื่อการปรับขนาดภาพเสร็จสิ้น แอปที่ติดตั้งส่วนขยายนี้สามารถจัดการเหตุการณ์ที่เสร็จสิ้นได้โดยอัปเดตลิงก์ในแอปให้ชี้ไปที่เวอร์ชันที่ปรับขนาดของรูปภาพ

เหตุการณ์ที่กำหนดเองทั้งหมดเป็นไปตาม รูปแบบเหตุการณ์ CloudEvents JSON สำหรับข้อมูลสำคัญ เช่น รายการเหตุการณ์ที่มีอยู่และรายละเอียดของส่วนของข้อมูลเหตุการณ์ โปรดดูเอกสารประกอบของส่วนขยายเฉพาะ

จัดการเหตุการณ์ที่กำหนดเอง

เมื่อคุณพบเหตุการณ์ที่กำหนดเองจากส่วนขยายที่ติดตั้งแล้ว คุณสามารถจัดการเหตุการณ์นั้นได้ด้วย
ตัวจัดการ onCustomEventPublished ขั้นแรก นำเข้าตัวจัดการนี้จาก Eventarc SDK พร้อมกับ Firebase Admin SDK สำหรับ Node.js สำหรับตรรกะที่กำหนดเองของคุณและ SDK ตัว logger สำหรับการจัดการข้อผิดพลาด:

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