আপনার অ্যাপকে Cloud Firestore এমুলেটরের সাথে সংযুক্ত করার আগে, নিশ্চিত করুন যে আপনি Firebase Local Emulator Suite সামগ্রিক কার্যপ্রবাহ বুঝতে পেরেছেন , এবং আপনি Local Emulator Suite ইনস্টল ও কনফিগার করার পাশাপাশি এর CLI কমান্ডগুলো পর্যালোচনা করেছেন।
একটি ফায়ারবেস প্রজেক্ট বেছে নিন
Firebase Local Emulator Suite একটিমাত্র ফায়ারবেস প্রোজেক্টের প্রোডাক্টগুলোকে এমুলেট করে।
ব্যবহার করার জন্য প্রজেক্ট নির্বাচন করতে, এমুলেটরগুলো চালু করার আগে, আপনার ওয়ার্কিং ডিরেক্টরিতে CLI-তে firebase use চালান। অথবা, আপনি প্রতিটি এমুলেটর কমান্ডে --project ফ্ল্যাগটি পাস করতে পারেন।
Local Emulator Suite বাস্তব ফায়ারবেস প্রজেক্ট এবং ডেমো প্রজেক্টের এমুলেশন সমর্থন করে।
| প্রকল্পের ধরণ | বৈশিষ্ট্য | এমুলেটরের সাথে ব্যবহার করুন |
|---|---|---|
| বাস্তব | একটি প্রকৃত Firebase প্রজেক্ট হলো সেটি যা আপনি তৈরি এবং কনফিগার করেছেন (সম্ভবত Firebase কনসোলের মাধ্যমে)। বাস্তব প্রজেক্টগুলিতে লাইভ রিসোর্স থাকে, যেমন ডাটাবেস ইনস্ট্যান্স, স্টোরেজ বাকেট, ফাংশন, বা অন্য যেকোনো রিসোর্স যা আপনি সেই Firebase প্রজেক্টের জন্য সেট আপ করেছেন। | আসল Firebase প্রোজেক্ট নিয়ে কাজ করার সময়, আপনি সমর্থিত যেকোনো বা সমস্ত প্রোডাক্টের জন্য এমুলেটর চালাতে পারেন। যেসব প্রোডাক্ট আপনি এমুলেট করছেন না, সেগুলোর ক্ষেত্রে আপনার অ্যাপ ও কোড লাইভ রিসোর্সের (যেমন ডেটাবেস ইনস্ট্যান্স, স্টোরেজ বাকেট, ফাংশন ইত্যাদি) সাথে ইন্টারঅ্যাক্ট করবে। |
| ডেমো | একটি ডেমো ফায়ারবেস প্রজেক্টে কোনো বাস্তব ফায়ারবেস কনফিগারেশন বা লাইভ রিসোর্স থাকে না। এই প্রজেক্টগুলো সাধারণত কোডল্যাব বা অন্যান্য টিউটোরিয়ালের মাধ্যমে ব্যবহার করা হয়। ডেমো প্রজেক্টগুলোর আইডির শুরুতে | ডেমো ফায়ারবেস প্রজেক্ট নিয়ে কাজ করার সময়, আপনার অ্যাপ এবং কোড শুধুমাত্র এমুলেটরের সাথেই ইন্টারঅ্যাক্ট করে। যদি আপনার অ্যাপ এমন কোনো রিসোর্সের সাথে ইন্টারঅ্যাক্ট করার চেষ্টা করে যার জন্য কোনো এমুলেটর চলছে না, তাহলে সেই কোডটি ব্যর্থ হবে। |
আমরা আপনাকে যথাসম্ভব ডেমো প্রজেক্ট ব্যবহার করার পরামর্শ দিই। এর সুবিধাগুলোর মধ্যে রয়েছে:
- সেটআপ করা সহজ, কারণ কোনো Firebase প্রজেক্ট তৈরি না করেই এমুলেটরগুলো চালানো যায়।
- আরও শক্তিশালী সুরক্ষা, কারণ যদি আপনার কোড ভুলবশত নন-এমুলেটেড (প্রোডাকশন) রিসোর্স ব্যবহার করে, তাহলেও ডেটা পরিবর্তন, ব্যবহার এবং বিলিং-এর কোনো সম্ভাবনা থাকে না।
- উন্নততর অফলাইন সাপোর্ট, কারণ আপনার SDK কনফিগারেশন ডাউনলোড করার জন্য ইন্টারনেট অ্যাক্সেস করার প্রয়োজন নেই।
এমুলেটরগুলোর সাথে যোগাযোগ করার জন্য আপনার অ্যাপটিকে প্রয়োজনীয় সরঞ্জাম দিয়ে সজ্জিত করুন।
চালু হওয়ার সময়, Cloud Firestore এমুলেটর আপনার firebase.json ফাইলে থাকা প্রতিটি firestore কনফিগারেশনের জন্য একটি ডিফল্ট ডেটাবেস এবং একটি নামযুক্ত ডেটাবেস তৈরি করে।
এমুলেটরে করা যেকোনো SDK বা REST API কল, যা একটি নির্দিষ্ট ডেটাবেসকে রেফারেন্স করে, তার প্রতিক্রিয়ায় স্বয়ংক্রিয়ভাবে নামযুক্ত ডেটাবেসও তৈরি হয়। এই ধরনের স্বয়ংক্রিয়ভাবে তৈরি ডেটাবেসগুলো উন্মুক্ত নিয়ম মেনে চলে।
Emulator Suite UI তে আপনার ডিফল্ট এবং নামযুক্ত ডেটাবেসগুলির সাথে ইন্টারেক্টিভভাবে কাজ করার জন্য, আপনার ব্রাউজারের অ্যাড্রেস বারে থাকা URL-টি আপডেট করে ডিফল্ট অথবা একটি নামযুক্ত ডেটাবেস নির্বাচন করুন।
- উদাহরণস্বরূপ, আপনার ডিফল্ট ইনস্ট্যান্সের ডেটা ব্রাউজ করতে, URL-টি
localhost:4000/firestore/default/dataতে আপডেট করুন। -
ecommerceনামের ইনস্ট্যান্সে ব্রাউজ করতে,localhost:4000/firestore/ecommerce/dataতে আপডেট করুন।
একটি নির্দিষ্ট সংস্করণে এমুলেটরটি চালু করুন
আপনার firebase.json ফাইলের firestore.edition সেকশনে নির্দিষ্ট করা এডিশনে এমুলেটরটি চালু হবে। আপনার firebase.json ফাইলের emulators.firestore.edition সেকশনেও একটি এডিশন নির্দিষ্ট করার বিকল্প রয়েছে। এডিশনের জন্য বৈধ মানগুলো হলো standard এবং enterprise । আপনি যদি উভয় কনফিগারেশনে edition নির্দিষ্ট করেন, তাহলে emulators.firestore.edition প্রাধান্য পাবে।
{
...
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json",
"edition": "enterprise"
},
"emulators": {
"firestore": {
"port": 8080,
"edition": "enterprise" // Takes precedence over `firestore.edition`
}
},
...
}
অ্যান্ড্রয়েড, অ্যাপল প্ল্যাটফর্ম এবং ওয়েব এসডিকে
নিম্নলিখিতভাবে Cloud Firestore সাথে সংযোগ স্থাপনের জন্য আপনার ইন-অ্যাপ কনফিগারেশন বা টেস্ট ক্লাসগুলো সেট আপ করুন। উল্লেখ্য যে, নিম্নলিখিত নমুনাগুলোতে অ্যাপ কোড ডিফল্ট প্রজেক্ট ডেটাবেসের সাথে সংযোগ স্থাপন করছে। ডিফল্ট ডেটাবেস ছাড়াও অতিরিক্ত Cloud Firestore ডেটাবেস সম্পর্কিত উদাহরণের জন্য, একাধিক ডেটাবেসের নির্দেশিকাটি দেখুন।
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFirestore firestore = FirebaseFirestore.getInstance(); firestore.useEmulator("10.0.2.2", 8080); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(false) .build(); firestore.setFirestoreSettings(settings);
সুইফট
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
এমুলেটর ব্যবহার করে ফায়ারস্টোর ইভেন্ট দ্বারা ট্রিগার হওয়া ক্লাউড ফাংশন পরীক্ষা করার জন্য কোনো অতিরিক্ত সেটআপের প্রয়োজন নেই। যখন ফায়ারস্টোর এবং ক্লাউড ফাংশন এমুলেটর উভয়ই চালু থাকে, তখন তারা স্বয়ংক্রিয়ভাবে একসাথে কাজ করে।
Admin SDK
যখন FIRESTORE_EMULATOR_HOST এনভায়রনমেন্ট ভেরিয়েবলটি সেট করা থাকে, তখন Firebase Admin SDK স্বয়ংক্রিয়ভাবে Cloud Firestore এমুলেটরের সাথে সংযুক্ত হয়:
export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"
আপনার কোড যদি Cloud Functions এমুলেটরের ভেতরে চলে, তাহলে initializeApp কল করার সময় আপনার প্রোজেক্ট আইডি এবং অন্যান্য কনফিগারেশন স্বয়ংক্রিয়ভাবে সেট হয়ে যায়।
আপনি যদি আপনার Admin SDK কোডকে অন্য কোনো পরিবেশে চলমান একটি শেয়ার্ড এমুলেটরের সাথে সংযোগ করতে চান, তাহলে আপনাকে Firebase CLI ব্যবহার করে সেট করা একই প্রজেক্ট আইডি উল্লেখ করতে হবে। আপনি সরাসরি initializeApp এ একটি প্রজেক্ট আইডি পাস করতে পারেন অথবা GCLOUD_PROJECT এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন।
নোড.জেএস অ্যাডমিন এসডিকে
admin.initializeApp({ projectId: "your-project-id" });
পরিবেশগত পরিবর্তনশীল
export GCLOUD_PROJECT="your-project-id"
ক্লাউড ফায়ারস্টোর REST API
ক্লাউড ফায়ারস্টোর এমুলেটর আপনার ডেটাবেসের সাথে যোগাযোগের জন্য একটি REST এন্ডপয়েন্ট প্রদান করে। সমস্ত REST API কল http://localhost:8080/v1 এন্ডপয়েন্টে করতে হবে।
একটি REST কলের সম্পূর্ণ পথটি নিম্নলিখিত প্যাটার্ন অনুসরণ করে:
http://localhost:8080/v1/projects/{project_id}/databases/{database_id}/documents/{document_path}
উদাহরণস্বরূপ, my-project-id প্রজেক্টের জন্য users কালেকশনে থাকা সমস্ত ডকুমেন্ট তালিকাভুক্ত করতে, আপনি curl ব্যবহার করতে পারেন:
curl -X GET "http://localhost:8080/v1/projects/my-project-id/databases/(default)/documents/users"
পরীক্ষাগুলোর মাঝে আপনার ডাটাবেস পরিষ্কার করুন।
প্রোডাকশন ফায়ারস্টোরে ডাটাবেস ফ্লাশ করার জন্য কোনো প্ল্যাটফর্ম SDK মেথড নেই, কিন্তু ফায়ারস্টোর এমুলেটর আপনাকে বিশেষভাবে এই কাজের জন্য একটি REST এন্ডপয়েন্ট দেয়, যা একটি টেস্ট ফ্রেমওয়ার্ক সেটআপ/টিয়ারডাউন স্টেপ থেকে, একটি টেস্ট ক্লাস থেকে, অথবা কোনো টেস্ট শুরু হওয়ার আগে শেল থেকে (যেমন, curl দিয়ে) কল করা যেতে পারে। আপনি শুধু এমুলেটর প্রসেসটি বন্ধ করে দেওয়ার বিকল্প হিসেবে এই পদ্ধতিটি ব্যবহার করতে পারেন।
একটি উপযুক্ত পদ্ধতিতে, আপনার Firebase প্রজেক্ট আইডি (যেমন firestore-emulator-example ) নিম্নলিখিত এন্ডপয়েন্টে সরবরাহ করে একটি HTTP DELETE অপারেশন সম্পাদন করুন:
"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
স্বাভাবিকভাবেই, আপনার কোডের উচিত ফ্লাশ সম্পন্ন হয়েছে নাকি ব্যর্থ হয়েছে, সে বিষয়ে REST নিশ্চিতকরণের জন্য অপেক্ষা করা।
আপনি শেল থেকে এই অপারেশনটি সম্পাদন করতে পারেন:
// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
এই ধরনের একটি পদক্ষেপ বাস্তবায়ন করার পর, আপনি আত্মবিশ্বাসের সাথে আপনার টেস্টগুলোর ক্রম নির্ধারণ করতে এবং ফাংশনগুলো চালু করতে পারেন, এই ভরসায় যে প্রতিটি রানের মাঝে পুরোনো ডেটা মুছে যাবে এবং আপনি একটি নতুন বেসলাইন টেস্ট কনফিগারেশন ব্যবহার করছেন।
আমদানি ও রপ্তানি ডেটা
Cloud Storage for Firebase আপনাকে একটি চলমান এমুলেটর ইনস্ট্যান্স থেকে ডেটা এক্সপোর্ট করার সুযোগ দেয়। আপনার ইউনিট টেস্ট বা কন্টিনিউয়াস ইন্টিগ্রেশন ওয়ার্কফ্লোতে ব্যবহারের জন্য একটি বেসলাইন ডেটা সেট নির্ধারণ করুন, তারপর দলের মধ্যে শেয়ার করার জন্য এটি এক্সপোর্ট করুন।
firebase emulators:export ./dirপরীক্ষার সময়, এমুলেটর চালু হলে বেসলাইন ডেটা ইম্পোর্ট করুন।
firebase emulators:start --import=./dirআপনি একটি এক্সপোর্ট পাথ নির্দিষ্ট করে অথবা কেবল --import ফ্ল্যাগে দেওয়া পাথটি ব্যবহার করে এমুলেটরকে শাটডাউনের সময় ডেটা এক্সপোর্ট করার নির্দেশ দিতে পারেন।
firebase emulators:start --import=./dir --export-on-exitএই ডেটা ইম্পোর্ট এবং এক্সপোর্ট অপশনগুলো ` firebase emulators:exec কমান্ডের সাথেও কাজ করে। আরও বিস্তারিত জানতে, এমুলেটর কমান্ড রেফারেন্স দেখুন।
নিরাপত্তা নিয়মের কার্যকলাপ কল্পনা করুন
প্রোটোটাইপ এবং টেস্ট লুপ চলাকালীন, আপনি Local Emulator Suite দ্বারা প্রদত্ত ভিজ্যুয়ালাইজেশন টুল এবং রিপোর্ট ব্যবহার করতে পারেন।
অনুরোধ মনিটর ব্যবহার করুন
Cloud Firestore এমুলেটর আপনাকে Emulator Suite UI তে ক্লায়েন্ট অনুরোধগুলি দেখতে দেয়, যার মধ্যে Firebase Security Rules মূল্যায়ন ট্রেসিংও অন্তর্ভুক্ত।
প্রতিটি অনুরোধের বিস্তারিত মূল্যায়ন ক্রম দেখতে Firestore > Requests ট্যাবটি খুলুন।

নিয়ম মূল্যায়ন প্রতিবেদনগুলি কল্পনা করুন
আপনার প্রোটোটাইপে সিকিউরিটি রুলস যোগ করার সাথে সাথে আপনি Local Emulator Suite ডিবাগ টুলস ব্যবহার করে সেগুলো ডিবাগ করতে পারেন।
একাধিক পরীক্ষা চালানোর পর, আপনি টেস্ট কভারেজ রিপোর্টগুলো দেখতে পারবেন, যেখানে দেখানো হবে আপনার প্রতিটি নিরাপত্তা নিয়ম কীভাবে মূল্যায়ন করা হয়েছে।
রিপোর্টগুলো পেতে, এমুলেটরটি চালু থাকা অবস্থায় এর একটি এক্সপোজড এন্ডপয়েন্টে কোয়েরি করুন। ব্রাউজার-বান্ধব সংস্করণের জন্য, নিম্নলিখিত URL-টি ব্যবহার করুন:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
এটি আপনার নিয়মগুলোকে এক্সপ্রেশন এবং সাব-এক্সপ্রেশনে বিভক্ত করে, যেগুলোর উপর মাউস রাখলে আপনি আরও তথ্য জানতে পারবেন, যার মধ্যে ইভ্যালুয়েশনের সংখ্যা এবং ফেরত আসা মান অন্তর্ভুক্ত। এই ডেটার র JSON সংস্করণের জন্য, আপনার কোয়েরিতে নিম্নলিখিত URL-টি অন্তর্ভুক্ত করুন:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
এখানে, রিপোর্টের HTML সংস্করণটি সেই মূল্যায়নগুলিকে হাইলাইট করে যেগুলি undefined এবং null-value ত্রুটি দেখায়:

Cloud Firestore এমুলেটর প্রোডাকশন থেকে কীভাবে আলাদা
Cloud Firestore এমুলেটরটি কিছু উল্লেখযোগ্য সীমাবদ্ধতা সহ প্রোডাকশন সার্ভিসের আচরণকে বিশ্বস্তভাবে অনুকরণ করার চেষ্টা করে।
Cloud Firestore জন্য একাধিক ডেটাবেস সমর্থন
বর্তমানে, Emulator Suite UI একটি ডিফল্ট ডেটাবেসের জন্য ইন্টারেক্টিভভাবে তৈরি, সম্পাদনা, মুছে ফেলা, অনুরোধ পর্যবেক্ষণ এবং নিরাপত্তা ভিজ্যুয়ালাইজেশন সমর্থন করে, কিন্তু অতিরিক্ত নামযুক্ত ডেটাবেসের জন্য করে না।
তবে, এমুলেটরটি নিজেই আপনার firebase.json ফাইলের কনফিগারেশনের উপর ভিত্তি করে এবং SDK বা REST API কলের প্রতিক্রিয়ায় পরোক্ষভাবে একটি নামযুক্ত ডেটাবেস তৈরি করে।
লেনদেন
এমুলেটরটি বর্তমানে প্রোডাকশনে দেখা সমস্ত ট্রানজ্যাকশন আচরণ বাস্তবায়ন করে না। যখন আপনি এমন ফিচার পরীক্ষা করছেন যেখানে একটি ডকুমেন্টে একই সাথে একাধিক রাইট জড়িত, তখন এমুলেটরটি রাইট রিকোয়েস্ট সম্পন্ন করতে ধীর হতে পারে। কিছু ক্ষেত্রে, লক রিলিজ হতে ৩০ সেকেন্ড পর্যন্ত সময় লাগতে পারে। প্রয়োজনে, সেই অনুযায়ী টেস্ট টাইমআউট সামঞ্জস্য করার কথা বিবেচনা করুন।
সূচক
এমুলেটরটি কম্পাউন্ড ইনডেক্স ট্র্যাক করে না এবং এর পরিবর্তে যেকোনো বৈধ কোয়েরি এক্সিকিউট করবে। আপনার কোন কোন ইনডেক্সের প্রয়োজন হবে তা নির্ধারণ করতে, আপনার অ্যাপটি একটি আসল Cloud Firestore ইনস্ট্যান্সে পরীক্ষা করে দেখুন।
সীমা
এমুলেটর প্রোডাকশনে আরোপিত সমস্ত সীমাবদ্ধতা প্রয়োগ করে না। উদাহরণস্বরূপ, এমুলেটর এমন ট্রানজ্যাকশন অনুমোদন করতে পারে যা প্রোডাকশন সার্ভিস দ্বারা খুব বড় হওয়ার কারণে প্রত্যাখ্যাত হবে। নিশ্চিত করুন যে আপনি নথিভুক্ত সীমাবদ্ধতাগুলির সাথে পরিচিত এবং আপনার অ্যাপটি এমনভাবে ডিজাইন করেছেন যাতে সেগুলি আগে থেকেই এড়ানো যায়।
এরপর কী?
- নির্বাচিত ভিডিও এবং বিস্তারিত নির্দেশনামূলক উদাহরণের জন্য, ফায়ারবেস এমুলেটর প্রশিক্ষণ প্লেলিস্টটি অনুসরণ করুন।
- সিকিউরিটি রুলস টেস্টিং এবং ফায়ারবেস টেস্ট এসডিকে-এর সাথে জড়িত উন্নত ব্যবহারের ক্ষেত্রগুলো অনুসন্ধান করুন: সিকিউরিটি রুলস টেস্ট করুন (ফায়ারস্টোর) ।
- যেহেতু ট্রিগারড ফাংশনগুলো Cloud Firestore একটি সাধারণ ইন্টিগ্রেশন, তাই ‘রান ফাংশনস লোকালি’ অংশে Cloud Functions for Firebase এমুলেটর সম্পর্কে আরও জানুন।