Cloud Functions (2nd gen)-এর সাহায্যে, আপনি কাস্টম ইভেন্টের উত্তরে ফাংশন ট্রিগার করতে পারবেন। এগুলি হল বিশেষ বা অতিরিক্ত ইভেন্ট প্রদানকারীর দেওয়া ইভেন্ট, যা Firebase SDK-এর মাধ্যমে Cloud Functions-এ নেটিভভাবে কাজ করা 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
হ্যান্ডলারের মাধ্যমে ম্যানেজ করতে পারবেন। প্রথমে, Eventarc SDK থেকে এই হ্যান্ডলারটি
Firebase Admin SDK-এর সাথে ইমপোর্ট করুন:
Node.js
const {onCustomEventPublished} = require("firebase-functions/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-এর একটি সংগ্রহে রিসাইজ করা
ইমেজ সম্পর্কে মেটাডেটা কপি করতে Admin SDK ব্যবহার করে, ইভেন্ট দ্বারা প্রদান করা
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)
# ...