कस्टम इवेंट ट्रिगर बनाना और उन्हें मैनेज करना

Cloud Functions (2nd gen) की मदद से, आप कस्टम इवेंट में बदल सकते हैं. ये इवेंट, खास या अतिरिक्त इवेंट की सेवा देने वाली कंपनियों की ओर से उपलब्ध कराए जाते हैं, जैसे कि यह Cloud Functions के लिए Firebase SDK टूल के साथ नेटिव तौर पर काम करने वाले Firebase इवेंट के ख़िलाफ़ है. कस्टम इवेंट ट्रिगर की मदद से, आपका ऐप्लिकेशन इन इवेंट का जवाब दे सकता है: Firebase एक्सटेंशन या आप खुद का कस्टम एक्सटेंशन प्रकाशित कर सकते हैं इवेंट और ट्रिगर फ़ंक्शन का इस्तेमाल करता है.

सभी कस्टम इवेंट CloudEvent JSON इवेंट का फ़ॉर्मैट और Eventarc पर पब्लिश किए गए हों. इवेंटआर्क इस्तेमाल करने पर लगने वाला शुल्क लागू होता है.

कस्टम इवेंट के साथ फ़ंक्शन ट्रिगर करें

आपके पास कस्टम इवेंट पब्लिश करने (या Firebase एक्सटेंशन से इवेंट पाने) का विकल्प होता है. इस बेसिक फ़्लो को लागू करके, उन इवेंट के जवाब में फ़ंक्शन ट्रिगर करेंगे:

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

उदाहरण के लिए, हो सकता है कि कोई गेम ऐप्लिकेशन, उपयोगकर्ताओं के डिवाइस में टाइप करते ही सूचनाएं भेजना चाहे या टॉप 10 प्रतियोगियों के लीडरबोर्ड से बाहर निकलें. यह ऐप्लिकेशन प्रकाशित कर सकता है इवेंट को लीडरबोर्ड पर डिफ़ॉल्ट चैनल पर ले जाएं और फिर इवेंट को फ़ंक्शन है जो उपयोगकर्ताओं को टारगेट किए गए पुश नोटिफ़िकेशन भेजता है.

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

किसी चैनल पर इवेंट पब्लिश करना

Eventarc इवेंट इसमें पब्लिश किए जाते हैं चैनल. चैनल की मदद से, मिलते-जुलते इवेंट को ग्रुप किया जा सकता है और ऐक्सेस मैनेज किया जा सकता है अनुमतियां दी हैं. जब आप कोई एक्सटेंशन इंस्टॉल करते हैं या ऐसा फ़ंक्शन डिप्लॉय करते हैं जो Firebase अपने आप एक डिफ़ॉल्ट चैनल बना देता है, जिसका नाम है us-central1 क्षेत्र में firebase. Firebase एडमिन SDK टूल, चैनलों पर प्रकाशित करने के लिए एक eventarc सबपैकेज.

किसी भरोसेमंद सर्वर (या किसी अन्य फ़ंक्शन) से इवेंट पब्लिश करने के लिए, डिफ़ॉल्ट चैनल:

import {getEventarc} from 'firebase-admin/eventarc';

getEventarc().channel().publish({
    type: 'achieved-leaderboard',
    subject: 'Welcome to the top 10',
    data: {
      message: 'You have achieved the nth position in our leaderboard!  To see . . .'
    }
});

अपने आप डिफ़ॉल्ट चैनल बनाने के अलावा, Firebase एनवायरमेंट वैरिएबल EVENTARC_CLOUD_EVENT_SOURCE, जो सोर्स के बारे में बताता है इवेंट को हटा दिया जाता है. अगर आप 'Firebase के लिए Cloud Functions' के बाहर इवेंट प्रकाशित कर रहे हैं, तो आपको अपने इवेंट पेलोड में साफ़ तौर पर source फ़ील्ड जोड़ना होगा.

कस्टम इवेंट मैनेज करना

एक्सटेंशन इवेंट के साथ-साथ सभी कस्टम इवेंट को, onCustomEventPublished या on_custom_event_published हैंडलर. सबसे पहले, इस हैंडलर को Eventarc SDK टूल से Firebase एडमिन SDK टूल:

Node.js

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

Python

from firebase_admin import firestore, initialize_app
from firebase_functions import eventarc_fn

अपने फ़ंक्शन कोड में, इवेंट का नाम पास करें, जैसा कि उदाहरण के तौर पर दिए गए फ़ंक्शन के लिए दिखाया गया है:

Node.js

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

Python

@eventarc_fn.on_custom_event_published(
    event_type="firebase.extensions.storage-resize-images.v1.complete")
def onimageresized(event: eventarc_fn.CloudEvent) -> None:
    print("Received image resize completed event: ", event.type)

    if not isinstance(event.subject, str):
        print("No 'subject' data.")
        return

    # For example, write resized image details into Firestore.
    firestore_client: google.cloud.firestore.Client = firestore.client()
    collection = firestore_client.collection("images")
    doc = collection.document(event.subject.replace("/", "_"))  # original file path
    doc.set(event.data)  # resized images paths and sizes

हर खास एक्सटेंशन के लिए, इवेंट ऑब्जेक्ट में लौटाया गया पेलोड उपलब्ध कराता है डेटा मौजूद है जिसका इस्तेमाल करके, ऐप्लिकेशन फ़्लो के लिए कस्टम लॉजिक लागू किया जा सकता है. इसमें केस में, फ़ंक्शन, Cloud Firestore में मौजूद किसी कलेक्शन में इमेज जोड़ने के लिए, इवेंट से मिला subject और दिए गए data से मेटाडेटा सेव किया जा रहा है इवेंट के अनुसार ट्रैक करें.

ऐसे चैनल जो डिफ़ॉल्ट के तौर पर सेट नहीं हैं उन पर इवेंट पब्लिश और मैनेज करना

कस्टम चैनल उन मामलों में काम के हो सकते हैं जहां आपको खास अनुमति चाहिए या अन्य ज़रूरतों को पूरा करने के साथ-साथ, विज़िबिलिटी और ऐक्सेस का एक जैसा लेवल न चाहते हों सभी इवेंट के लिए. चैनल बनाने के लिए, Google Cloud Console. इवेंट पब्लिश करने और उनकी सदस्यता लेने की प्रोसेस एक ही चैनल पर होनी चाहिए.

अगर कस्टम इवेंट किसी ऐसे चैनल पर पब्लिश किया गया है जो डिफ़ॉल्ट नहीं है, तो आपको अपने फ़ंक्शन कोड में चैनल की जानकारी देनी होगी. उदाहरण के लिए, अगर उन इवेंट को मैनेज करना चाहता है जो डिफ़ॉल्ट नहीं हैं us-west1 लोकेशन, आपको चैनल को इस तरह से बताना होगा:

Node.js

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

Python

@eventarc_fn.on_custom_event_published(
    event_type="firebase.extensions.storage-resize-images.v1.complete",
    channel="locations/us-west1/channels/firebase",
    region="us-west1")
def onimageresizedwest(event: eventarc_fn.CloudEvent) -> None:
    print("Received image resize completed event: ", event.type)
    # ...