קישור האפליקציה ויצירת אב טיפוס


לפני שמתחילים להשתמש ב-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

חשוב להתקין את CLI או לעדכן אותו לגרסה האחרונה.

curl -sL firebase.tools | bash

אם עדיין לא עשיתם זאת, מפעילים את ספריית העבודה הנוכחית כפרויקט Firebase, ופועלים לפי ההנחיות במסך כדי לציין שאתם משתמשים ב-Cloud Functions וב-Cloud Firestore או ב-Realtime Database:

firebase init

ספריית הפרויקט תכיל עכשיו קובצי תצורה של Firebase, קובץ הגדרת Firebase Security Rules למסד הנתונים, ספריית functions שמכילה קוד של פונקציות של Cloud Functions וקבצים תומכים נוספים.

יצירת אב טיפוס באופן אינטראקטיבי

Local Emulator Suite מאפשר ליצור אב טיפוס של תכונות חדשות במהירות, וממשק המשתמש המובנה של ה-Suite הוא אחד הכלים השימושיים ביותר ליצירת אב טיפוס. זה דומה להרצה של מסוף Firebase באופן מקומי.

באמצעות Emulator Suite UI תוכלו לשנות שוב ושוב את העיצוב של מסד נתונים, לנסות תהליכי העברת נתונים שונים שכוללים פונקציות בענן, להעריך שינויים בכללי האבטחה, לבדוק יומנים כדי לוודא את הביצועים של שירותי הקצה העורפי ועוד. לאחר מכן, אם רוצים להתחיל מחדש, פשוט מנקים את מסד הנתונים ומתחילים מחדש עם רעיון עיצוב חדש.

כל האפשרויות האלה זמינות כשמפעילים את Local Emulator Suite באמצעות:

firebase emulators:start

כדי ליצור אב טיפוס לאפליקציה היפותטית, נגדיר ונבדוק פונקציית ענן בסיסית לשינוי רשומות טקסט במסד נתונים, וגם ניצור את מסד הנתונים הזה ונאכלס אותו ב-Emulator Suite UI כדי להפעיל אותו.

  1. כדי ליצור פונקציית cloud שמופעלת על ידי כתיבת בבסיס נתונים, עורכים את הקובץ 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 היא ברירת המחדל של ממשק המשתמש, אבל כדאי לבדוק את הפלט של הודעות הטרמינל באמצעות ה-CLI של Firebase. שימו לב לסטטוס של המהדמנים הזמינים. במקרה שלנו, אמולרטורים של Cloud Functions ו-Cloud Firestore יפעלו.
    התמונה שלי
  5. בממשק המשתמש, בכרטיסייה Firestore > Data, לוחצים על Start collection ופועלים לפי ההנחיות כדי ליצור מסמך חדש באוסף messages, עם השם original והערך test. הפעולה הזו מפעילה את הפונקציה שלנו בענן. שימו לב שבקרוב יופיע שדה uppercase חדש, שיאוכלס במחרוזת "TEST".
    התמונה שלי התמונה שלי
  6. בכרטיסייה Firestore > Requests, בודקים את הבקשות שנשלחו למסד הנתונים האמולציה שלכם, כולל כל ההערכות של Firebase Security Rules שבוצעו כחלק ממילוי הבקשות האלה.
  7. בודקים את הכרטיסייה Logs כדי לוודא שהפונקציה לא נתקלה בשגיאות מכיוון שמסד הנתונים עודכן.

אתם יכולים לעבור בקלות בין קוד הפונקציה בענן לעריכות אינטראקטיביות של מסדי נתונים עד שתקבלו את זרימת הנתונים שאתם מחפשים, בלי לגעת בקוד הגישה למסדי הנתונים באפליקציה, בלי לבצע הידור מחדש ולהריץ מחדש חבילות בדיקות.

חיבור האפליקציה לאמולטורים

אחרי שתתקדמו כראוי ביצירת האב טיפוס האינטראקטיבי והחלטתם על עיצוב, תוכלו להוסיף לאפליקציה קוד גישה למסד נתונים באמצעות ה-SDK המתאים. כדי לוודא שההתנהגות של האפליקציה תקינה, תוכלו להמשיך להשתמש בכרטיסייה database (מסד נתונים) ובכרטיסייה Logs (יומנים) ב-Emulator Suite UI.

חשוב לזכור שה-Local Emulator Suite הוא כלי פיתוח מקומי. כתיבה במסדי הנתונים בסביבת הייצור לא תפעיל באופן מקומי פונקציות שיוצרים אב טיפוס.

כדי לעבור לאפשרות שהאפליקציה תבצע כתיבה למסד הנתונים, צריך לכוון את כיתות הבדיקה או את ההגדרות של האפליקציה לאמולטור Cloud Firestore.

Kotlin+KTX
// 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

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"

סקירה מפורטת יותר של אמולטורים

אחרי שראינו איך נראה תהליך העבודה הבסיסי בצד הלקוח, אפשר להמשיך לפרטים על הסימולטורים השונים בחבילה, כולל איך משתמשים בהם לפיתוח אפליקציות בצד השרת:

מה הלאה?

הקפידו לקרוא את הנושאים הקשורים לאמולטורים ספציפיים שצוינו למעלה. לאחר מכן: