Cloud Functions (দ্বিতীয় প্রজন্ম) ব্যবহার করে, আপনি কাস্টম ইভেন্টের প্রতিক্রিয়ায় ফাংশন ট্রিগার করতে পারেন। এগুলি বিশেষ বা অতিরিক্ত ইভেন্ট প্রদানকারী দ্বারা সরবরাহিত ইভেন্ট, যা Cloud Functions জন্য Firebase SDK দ্বারা স্থানীয়ভাবে সমর্থিত Firebase ইভেন্টগুলির বিপরীতে। কাস্টম ইভেন্ট ট্রিগারের মাধ্যমে, আপনার অ্যাপ Firebase Extensions দ্বারা সরবরাহিত ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে পারে, অথবা আপনি আপনার নিজস্ব কাস্টম ইভেন্ট প্রকাশ করতে পারেন এবং তাদের প্রতিক্রিয়ায় ফাংশন ট্রিগার করতে পারেন।
সমস্ত কাস্টম ইভেন্ট CloudEvents JSON ইভেন্ট ফর্ম্যাটের সাথে সঙ্গতিপূর্ণ এবং Eventarc এ প্রকাশিত হয়। Eventarc ব্যবহারের ফি প্রযোজ্য।
কাস্টম ইভেন্টের সাথে ফাংশন ট্রিগার করুন
আপনি এই মৌলিক প্রবাহটি বাস্তবায়নের মাধ্যমে কাস্টম ইভেন্টগুলি প্রকাশ করতে পারেন (অথবা Firebase এক্সটেনশন থেকে ইভেন্টগুলি পেতে পারেন) এবং সেই ইভেন্টগুলির প্রতিক্রিয়ায় ফাংশনগুলি ট্রিগার করতে পারেন:
- একটি Eventarc চ্যানেলে পছন্দসই ইভেন্টগুলি প্রকাশ করুন, অথবা আপনার ইনস্টল করা কোনও এক্সটেনশন দ্বারা উপলব্ধ ইভেন্টগুলি সনাক্ত করুন।
- আপনার ফাংশন কোডে, ইভেন্ট হ্যান্ডলারের সাহায্যে Eventarc চ্যানেলের ইভেন্টগুলিতে সাবস্ক্রাইব করুন।
- ফাংশনে, CloudEvent অবজেক্টে ফিরে আসা পেলোড পার্স করুন এবং আপনার অ্যাপের জন্য প্রয়োজনীয় কাস্টম লজিক সম্পাদন করুন।
উদাহরণস্বরূপ, একটি গেম অ্যাপ শীর্ষ দশ প্রতিযোগীর লিডারবোর্ডে প্রবেশ বা প্রস্থান করার সময় ব্যবহারকারীদের বিজ্ঞপ্তি পাঠাতে চাইতে পারে। এই অ্যাপটি লিডারবোর্ড ইভেন্টগুলি ডিফল্ট চ্যানেলে প্রকাশ করতে পারে এবং তারপরে এমন একটি ফাংশনে ইভেন্টটি পরিচালনা করতে পারে যা ব্যবহারকারীদের লক্ষ্যযুক্ত পুশ বিজ্ঞপ্তি পাঠায়।
অন্য একটি উদাহরণে, অ্যাপগুলিকে বড় ছবি প্রক্রিয়া করতে সাহায্য করার জন্য তৈরি একটি এক্সটেনশন ছবির আকার পরিবর্তনের সমাপ্তির সময় একটি ইভেন্ট নির্গত করতে পারে। এই এক্সটেনশন ইনস্টল করা অ্যাপগুলি ছবির আকার পরিবর্তন করা সংস্করণগুলিতে নির্দেশ করার জন্য অ্যাপের লিঙ্কগুলি আপডেট করে সমাপ্তির ইভেন্টটি পরিচালনা করতে পারে।
একটি চ্যানেলে একটি ইভেন্ট প্রকাশ করুন
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
হ্যান্ডলার ব্যবহার করে এক্সটেনশন ইভেন্ট সহ সকল কাস্টম ইভেন্ট পরিচালনা করতে পারবেন। প্রথমে, Firebase Admin SDK সহ Eventarc SDK থেকে এই হ্যান্ডলারটি আমদানি করুন:
নোড.জেএস
const {onCustomEventPublished} = require("firebase-functions/eventarc");
const logger = require("firebase-functions/logger");
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");
পাইথন
from firebase_admin import firestore, initialize_app
from firebase_functions import eventarc_fn
আপনার ফাংশন কোডে, উদাহরণ ফাংশনের জন্য দেখানো ইভেন্টের নামটি প্রবেশ করান:
নোড.জেএস
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
});
পাইথন
@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
অবস্থানের জন্য একটি নন-ডিফল্ট চ্যানেলে প্রকাশিত ইভেন্টগুলি পরিচালনা করতে চান, তাহলে আপনাকে দেখানো চ্যানেলটি নির্দিষ্ট করতে হবে:
নোড.জেএস
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) => { ... });
পাইথন
@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)
# ...