कस्टम ईवेंट ट्रिगर बनाएं और प्रबंधित करें

क्लाउड फ़ंक्शंस v2 के साथ, आप कस्टम ईवेंट के जवाब में फ़ंक्शन ट्रिगर कर सकते हैं। ये विशेष या अतिरिक्त ईवेंट प्रदाताओं द्वारा प्रदान किए गए ईवेंट हैं, क्योंकि क्लाउड फ़ंक्शंस के लिए Firebase SDK द्वारा मूल रूप से समर्थित Firebase ईवेंट के विपरीत।

सार्वजनिक पूर्वावलोकन के दौरान, उपलब्ध कस्टम ईवेंट Firebase एक्सटेंशन द्वारा प्रदान किए जाते हैं। आप अपने ऐप में एक एक्सटेंशन इंस्टॉल कर सकते हैं और फिर इस मूल प्रवाह में कस्टम इवेंट का जवाब दे सकते हैं:

  1. एक या अधिक कस्टम ईवेंट प्रदान करने वाला एक्सटेंशन इंस्टॉल करें।
  2. एक onCustomEventPublished हैंडलर परिनियोजित करके किसी ईवेंट प्रकार को हैंडल करें। इस फ़ंक्शन में, CloudEvent ऑब्जेक्ट में लौटाए गए पेलोड को पार्स करें, और जो भी कस्टम लॉजिक आपके ऐप की आवश्यकता है उसे निष्पादित करें।

उदाहरण के लिए, ऐप्स को बड़ी छवियों को संसाधित करने में मदद करने के लिए डिज़ाइन किया गया एक्सटेंशन छवि का आकार बदलने के पूरा होने पर एक ईवेंट उत्सर्जित कर सकता है। इस एक्सटेंशन वाले ऐप्स इंस्टॉल किए गए छवि के आकार वाले संस्करणों को इंगित करने के लिए ऐप में लिंक अपडेट करके पूरा होने की घटना को संभाल सकते हैं।

सभी कस्टम ईवेंट CloudEvents JSON ईवेंट प्रारूप के अनुरूप हैं। उपलब्ध ईवेंट की सूची और ईवेंट पेलोड के विवरण जैसी महत्वपूर्ण जानकारी के लिए, किसी विशेष एक्सटेंशन के दस्तावेज़ देखें।

एक कस्टम ईवेंट प्रबंधित करें

एक बार जब आप किसी इंस्टॉल किए गए एक्सटेंशन से उपलब्ध कस्टम ईवेंट की खोज कर लेते हैं, तो आप उस ईवेंट को इसके साथ संभाल सकते हैं
onCustomEventPublished हैंडलर। सबसे पहले, अपने कस्टम लॉजिक के लिए Node.js के लिए फायरबेस एडमिन एसडीके और त्रुटियों को संभालने के लिए 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
    });

प्रत्येक विशेष एक्सटेंशन के लिए, ईवेंट ऑब्जेक्ट में लौटाया गया पेलोड डेटा प्रदान करता है जिसका उपयोग आप अपने एप्लिकेशन प्रवाह के लिए कस्टम लॉजिक करने के लिए कर सकते हैं। इस मामले में, फ़ंक्शन क्लाउड फायरस्टोर में एक संग्रह में आकार बदलने वाली छवि के बारे में मेटाडेटा की प्रतिलिपि बनाने के लिए व्यवस्थापक एसडीके का उपयोग करता है, ईवेंट द्वारा प्रदान किए गए 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) => { ... });