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

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

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

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

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

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

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

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

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

Eventarc इवेंट इसमें पब्लिश किए जाते हैं चैनल. चैनल की मदद से, मिलते-जुलते इवेंट को ग्रुप किया जा सकता है और ऐक्सेस मैनेज किया जा सकता है अनुमतियां दी हैं. जब आप कोई एक्सटेंशन इंस्टॉल करते हैं या ऐसा फ़ंक्शन डिप्लॉय करते हैं जो Firebase अपने आप एक डिफ़ॉल्ट चैनल बना देता है, जिसका नाम है us-central1 क्षेत्र में firebase. Firebase Admin 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, जो सोर्स के बारे में बताता है इवेंट को हटा दिया जाता है. अगर Cloud Functions for Firebase के बाहर इवेंट पब्लिश किए जा रहे हैं, तो आपको अपने इवेंट पेलोड में साफ़ तौर पर source फ़ील्ड जोड़ना होगा.

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

एक्सटेंशन इवेंट के साथ-साथ सभी कस्टम इवेंट को, onCustomEventPublished या on_custom_event_published हैंडलर. सबसे पहले, इस हैंडलर को Eventarc SDK टूल से Firebase Admin 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

हर खास एक्सटेंशन के लिए, इवेंट ऑब्जेक्ट में लौटाया गया पेलोड उपलब्ध कराता है डेटा मौजूद है जिसका इस्तेमाल करके, ऐप्लिकेशन फ़्लो के लिए कस्टम लॉजिक लागू किया जा सकता है. इसमें केस, फ़ंक्शन, साइज़ बदलने के तरीके के मेटाडेटा को कॉपी करने के लिए Admin SDK का इस्तेमाल करता है 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)
    # ...