ربط تطبيقك وبدء إنشاء النماذج الأولية


قبل البدء في استخدام Firebase Local Emulator Suite، تأكَّد من إنشاء مشروع Firebase وإعداد بيئة التطوير واختيار حِزم تطوير البرامج (SDK) لمنصّة Firebase وتثبيتها وفقًا لمواضيع بدء استخدام Firebase لمنصّتك: Apple أو Android أو الويب.

إنشاء النماذج الأولية واختبارها

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

التفاعل بين قاعدة بيانات Firebase ومحاكيات الدوال
قاعدة البيانات ومحاكيات Cloud Functions كجزء من Local Emulator Suite الكامل.

في هذا الموضوع، لتقديم سير عمل Local Emulator Suite، لنفترض أنّك تعمل على تطبيق يستخدم مجموعة نموذجية من المنتجات: قاعدة بيانات Firebase ووظائف السحابة الإلكترونية التي يتم تشغيلها من خلال العمليات على قاعدة البيانات هذه.

بعد إعداد مشروع Firebase على جهازك، ستتضمّن دورة التطوير باستخدام Local Emulator Suite عادةً ثلاث خطوات:

  1. يمكنك إنشاء نماذج أولية للميزات بشكل تفاعلي باستخدام المحاكيات وEmulator Suite UI.

  2. إذا كنت تستخدم محاكي قاعدة بيانات أو محاكي Cloud Functions، عليك تنفيذ خطوة لمرة واحدة لربط تطبيقك بالمحاكيات.

  3. يمكنك إجراء الاختبارات آليًا باستخدام المحاكيات والنصوص البرمجية المخصّصة.

إعداد مشروع Firebase على جهازك المحلي

تأكَّد من تثبيت واجهة سطر الأوامر أو التحديث إلى الإصدار الأخير.

curl -sL firebase.tools | bash

إذا لم تكن قد فعلت ذلك من قبل، فقم بتهيئة دليل العمل الحالي كمشروع Firebase، باتباع المطالبات التي تظهر على الشاشة لتحديد أنك تستخدم Cloud Functions وإما Cloud Firestore أو Realtime Database:

firebase init

سيحتوي دليل مشروعك الآن على ملفات إعداد Firebase، وملف تعريف Firebase Security Rules لقاعدة البيانات، ودليل functions يحتوي على رمز دوال السحابة الإلكترونية، وملفات داعمة أخرى.

إنشاء نماذج أولية تفاعلية

تم تصميم Local Emulator Suite للسماح لك بإنشاء نماذج أولية للميزات الجديدة بسرعة، وتُعدّ واجهة المستخدم المضمّنة في المجموعة إحدى أكثر أدوات إنشاء النماذج الأولية فائدةً. يشبه ذلك إلى حدّ ما تشغيل وحدة تحكّم Firebase على الجهاز.

باستخدام Emulator Suite UI، يمكنك تكرار تصميم قاعدة بيانات وتجربة تدفقات بيانات مختلفة تتضمن دوال السحابة الإلكترونية وتقييم تغييرات قواعد الأمان والتحقق من السجلات لتأكيد أداء خدمات الواجهة الخلفية والمزيد. بعد ذلك، إذا كنت تريد البدء من جديد، فما عليك سوى مسح قاعدة البيانات والبدء من جديد بفكرة تصميم جديدة.

تتوفّر كل هذه الميزات عند بدء Local Emulator Suite باستخدام:

firebase emulators:start

لإنشاء نموذج أوّلي لتطبيقنا الافتراضي، لنقم بإعداد واختبار دالة سحابية أساسية لتعديل إدخالات النص في قاعدة بيانات، وإنشاء قاعدة البيانات هذه وتعبئتها في Emulator Suite UI لتشغيلها.

  1. أنشئ دالة سحابية يتم تشغيلها من خلال عمليات الكتابة في قاعدة البيانات عن طريق تعديل ملف functions/index.js في دليل مشروعك. استبدِل محتوى الملف الحالي بالمقتطف التالي. تستمع هذه الدالة إلى التغييرات التي تطرأ على المستندات في مجموعة messages، وتحوّل محتوى حقل original في المستند إلى أحرف كبيرة، وتخزّن النتيجة في حقل uppercase في ذلك المستند.
  2.   const functions = require('firebase-functions/v1');
    
      exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
          .onCreate((snap, context) => {
            const original = snap.data().original;
            console.log('Uppercasing', context.params.documentId, original);
            const uppercase = original.toUpperCase();
            return snap.ref.set({uppercase}, {merge: true});
          });
      
  3. شغِّل Local Emulator Suite باستخدام firebase emulators:start. يتم تشغيل محاكي Cloud Functions ومحاكي قاعدة البيانات، ويتم ضبطهما تلقائيًا للعمل معًا.
  4. يمكنك عرض واجهة المستخدم في المتصفّح على http://localhost:4000. المنفذ 4000 هو المنفذ التلقائي لواجهة المستخدم، ولكن يُرجى التحقّق من رسائل Terminal التي تظهر من خلال واجهة سطر الأوامر في Firebase. لاحظ حالة المحاكيات المتاحة. في حالتنا، سيتم تشغيل محاكيَي Cloud Functions وCloud Firestore.
    صورتي
  5. في واجهة المستخدم، ضمن علامة التبويب Firestore > البيانات، انقر على بدء المجموعة واتّبِع التعليمات لإنشاء مستند جديد في مجموعة messages، مع اسم الحقل original والقيمة test. يؤدي ذلك إلى تشغيل دالة السحابة الإلكترونية. لاحظ ظهور حقل uppercase جديد بعد فترة وجيزة، معبأ بالسلسلة "TEST".
    صورتي صورتي
  6. في علامة التبويب Firestore > الطلبات، افحص الطلبات المقدَّمة إلى قاعدة البيانات التي تمت محاكاتها، بما في ذلك جميع تقييمات Firebase Security Rules التي تم إجراؤها كجزء من تنفيذ هذه الطلبات.
  7. تحقَّق من علامة التبويب السجلّات للتأكّد من أنّ الدالة لم تواجه أخطاءً أثناء تعديل قاعدة البيانات.

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

ربط تطبيقك بالمحاكيات

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

يُرجى العِلم أنّ Local Emulator Suite هي أداة للمطوّرين محلية. لن تؤدي عمليات الكتابة في قواعد بيانات الإنتاج إلى تشغيل الدوال التي تنشئ نماذج أولية لها محليًا.

للتبديل إلى جعل تطبيقك يكتب في قاعدة البيانات، ستحتاج إلى توجيه فئات الاختبار أو الإعداد داخل التطبيق إلى محاكي 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);
Swift
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings
Unity
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
// Connects to the Firestore Emulator running on port 8080
db.Settings.Host = "127.0.0.1:8080";
db.Settings.SslEnabled = false;

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);
}

أتمِت اختباراتك باستخدام نصوص برمجية مخصّصة

والآن، ننتقل إلى الخطوة الأخيرة في سير العمل العام. بعد إنشاء نموذج أوّلي للميزة داخل التطبيق والتأكّد من أنّها تعمل بشكل جيد على جميع الأنظمة الأساسية، يمكنك الانتقال إلى مرحلة التنفيذ والاختبار النهائية. بالنسبة إلى اختبارات الوحدات وسير عمل CI، يمكنك تشغيل المحاكيات وإجراء الاختبارات النصية وإيقاف تشغيل المحاكيات في طلب واحد باستخدام الأمر exec:

firebase emulators:exec "./testdir/test.sh"

استكشاف المحاكيات الفردية بمزيد من التفصيل

بعد أن تعرّفت على سير العمل الأساسي من جهة العميل، يمكنك متابعة التفاصيل حول المحاكيات الفردية في المجموعة، بما في ذلك كيفية استخدامها لتطوير التطبيقات من جهة الخادم:

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

احرص على قراءة المواضيع ذات الصلة بالمحاكيات المحدّدة المذكورة أعلاه. بعد ذلك: