ربط تطبيقك بمحاكي Cloud Storage for Firebase

قبل ربط تطبيقك بمحاكي Cloud Storage for Firebase، تأكَّد من أنّك تفهم سير عمل Firebase Local Emulator Suite الإجمالي، ومن أنّك تثبّت Local Emulator Suite وتضبطه وتراجع أوامر واجهة سطر الأوامر.

اختيار مشروع على Firebase

يحاكي Firebase Local Emulator Suite المنتجات لمشروع واحد على Firebase.

لاختيار المشروع الذي تريد استخدامه، نفِّذ الأمر firebase use في دليل العمل قبل بدء المحاكيات. أو يمكنك تمرير العلامة --project إلى كل أمر من أوامر المحاكي.

تتيح Local Emulator Suite محاكاة مشاريع Firebase الحقيقية ومشاريع العرض التوضيحي.

نوع المشروع الميزات الاستخدام مع المحاكيات
Real

مشروع Firebase حقيقي هو مشروع أنشأته وأعددته (على الأرجح من خلال Firebase وحدة التحكّم).

تحتوي المشاريع الحقيقية على موارد نشطة، مثل مثيلات قواعد البيانات أو حِزم التخزين أو الدوال أو أي موارد أخرى تم إعدادها لمشروع Firebase هذا.

عند العمل مع مشاريع Firebase حقيقية، يمكنك تشغيل المحاكيات لأي من المنتجات المتوافقة أو جميعها.

بالنسبة إلى أي منتجات لا تحاكيها، ستتفاعل تطبيقاتك ورموزك مع مورد مباشر (مثيل قاعدة بيانات، وحزمة تخزين، ودالة، وما إلى ذلك).

تجريبي

لا يتضمّن مشروع Firebase التجريبي أي إعدادات حقيقية في Firebase، كما لا يتضمّن أي موارد مباشرة. ويمكن عادةً الوصول إلى هذه المشاريع من خلال دروس تطبيقية حول الترميز أو برامج تعليمية أخرى.

تبدأ أرقام تعريف المشاريع التجريبية بالبادئة demo-.

عند استخدام مشاريع Firebase التجريبية، تتفاعل تطبيقاتك ورموزك مع المحاكيات فقط. إذا حاول تطبيقك التفاعل مع أحد الموارد التي لم يتم تشغيل محاكي لها، سيتعذّر تنفيذ هذا الرمز.

ننصحك باستخدام المشاريع التجريبية كلما أمكن ذلك. تتضمّن المزايا ما يلي:

  • إعداد أسهل، إذ يمكنك تشغيل المحاكيات بدون إنشاء مشروع على Firebase
  • أمان أقوى، لأنه في حال استدعى الرمز عن طريق الخطأ موارد غير محاكية (إنتاج)، لن يكون هناك أي فرصة لتغيير البيانات أو استخدامها أو إصدار الفواتير
  • إتاحة استخدام التطبيق بشكل أفضل بلا إنترنت، إذ لا حاجة إلى الاتصال بالإنترنت لتنزيل إعدادات حزمة SDK

تجهيز تطبيقك للتواصل مع المحاكيات

حِزم تطوير البرامج (SDK) على Android ومنصات Apple والويب

اضبط إعداداتك داخل التطبيق أو فئات الاختبار للتفاعل مع Cloud Storage for Firebase المحاكي على النحو التالي.

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val storage = Firebase.storage
storage.useEmulator("10.0.2.2", 9199)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseStorage storage = FirebaseStorage.getInstance();
storage.useEmulator("10.0.2.2", 9199);
Swift
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web

const { getStorage, connectStorageEmulator } = require("firebase/storage");

const storage = getStorage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  connectStorageEmulator(storage, "127.0.0.1", 9199);
} 

Web

var storage = firebase.storage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  storage.useEmulator("127.0.0.1", 9199);
} 

لا يلزم إجراء أي إعداد إضافي لاختبار دوال Cloud التي يتم تشغيلها بواسطة أحداث Cloud Storage for Firebase باستخدام المحاكي. عند تشغيل المحاكيَين Cloud Storage for Firebase وCloud Functions، سيعملان معًا تلقائيًا.

Admin SDK ثانية

تتصل Firebase Admin SDK تلقائيًا بمحاكي Cloud Storage for Firebase عند ضبط متغير البيئة FIREBASE_STORAGE_EMULATOR_HOST:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

يُرجى العِلم أنّ محاكي Cloud Functions يتعرّف تلقائيًا على محاكي Cloud Storage for Firebase، لذا يمكنك تخطّي هذه الخطوة عند اختبار عمليات الدمج بين محاكيَي Cloud Functions وCloud Storage for Firebase. سيتم ضبط متغيّر البيئة تلقائيًا لحزمة SDK الخاصة بالمشرفين في Cloud Storage for Firebase.

إذا أردت أن يتصل الرمز Admin SDK بمحاكي مشترك يعمل في بيئة أخرى، عليك تحديد معرّف المشروع نفسه الذي ضبطته باستخدام واجهة سطر الأوامر في Firebase. يمكنك تمرير معرّف مشروع إلى initializeApp مباشرةً أو ضبط متغيّر البيئة GCLOUD_PROJECT.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
متغيّر البيئة
export GCLOUD_PROJECT="your-project-id"

استيراد البيانات وتصديرها

تتيح لك محاكيات قواعد البيانات و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 أيضًا. لمزيد من المعلومات، يُرجى الرجوع إلى مرجع أوامر المحاكي.

أوجه الاختلاف بين محاكي Cloud Storage for Firebase وبيئة الإنتاج

لغرض اختبار تطبيقات العميل، يتوافق المحاكي Cloud Storage for Firebase مع بيئة الإنتاج بشكل شبه تام من حيث مساحة سطح واجهة برمجة التطبيقات في Firebase. من المتوقّع أن تعمل جميع أوامر Firebase بين حِزم تطوير البرامج (SDK) العادية لمنصة Firebase (الويب وAndroid ومنصات Apple).

تتوفّر قيود على اختبار التطبيقات من جهة الخادم. تستفيد حِزم SDK للمشرف في Firebase من مساحة Google Cloud لواجهة برمجة التطبيقات، ولا تتم محاكاة جميع نقاط نهاية واجهة برمجة التطبيقات هذه. بشكل عام، أي إجراء يمكن تنفيذه من خلال حِزم SDK الخاصة بالعميل (مثل تحميل الملفات أو حذفها أو الحصول على البيانات الوصفية أو ضبطها) يمكن تنفيذه أيضًا من خلال حِزم SDK الخاصة بالمشرف، ولكن لا يمكن تنفيذ أي إجراء آخر. في ما يلي قائمة بالاستثناءات البارزة.

الاختلافات عن Google Cloud Storage

يوفّر منتج Cloud Storage for Firebase، بما في ذلك محاكي Storage، مجموعة فرعية من وظائف Google Cloud Storage (GCS) تركّز على عناصر التخزين، وهي مفيدة جدًا لتطوير تطبيقات Firebase. Cloud Storage for Firebase يختلف عن GCS في ما يلي:

  • لا يتيح Cloud Storage for Firebase حاليًا استخدام واجهات برمجة التطبيقات Bucket لإنشاء حِزم التخزين أو إدراجها أو الحصول عليها أو حذفها.
  • من Google Cloud Storage Objects API، تتوفّر الطرق التالية: copy وdelete وget وinsert وlist وpatch وrewrite وupdate.

Cloud IAM

لا تحاول "مجموعة أدوات المحاكاة" من Firebase تكرار أي سلوك مرتبط بإدارة الهوية وإمكانية الوصول (IAM) أو الالتزام به عند التشغيل. تلتزم المحاكيات بقواعد أمان Firebase المتوفّرة، ولكن في الحالات التي يتم فيها استخدام "إدارة الهوية وإمكانية الوصول" عادةً، مثلاً لضبط حساب الخدمة الذي يستدعي Cloud Functions وبالتالي الأذونات، لا يمكن ضبط المحاكي وسيستخدم الحساب المتاح على مستوى العالم على جهاز المطوّر، على غرار تشغيل نص برمجي محلي مباشرةً.

إشعارات Pub/Sub

لا يتكامل محاكي Cloud Storage for Firebase مع محاكي Cloud Pub/Sub، وبالتالي لا يتيح إنشاء قنوات/إشعارات بشأن التغييرات في عناصر التخزين. ننصحك باستخدام Cloud Functions مشغّلات مساحة التخزين مباشرةً.

البيانات الوصفية على مستوى الحزمة

لا يتيح المحاكي Cloud Storage for Firebase أي إعدادات على مستوى الحزمة، بما في ذلك فئة التخزين أو إعدادات CORS على مستوى الحزمة أو التصنيفات أو سياسات الاحتفاظ بالبيانات. تهدف Firebase إلى تحسين هذا الدعم بمرور الوقت.

ما هي الخطوات التالية؟