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


לפני שמתחילים להשתמש ב-Firebase Local Emulator Suite, צריך לוודא שיצרתם פרויקט ב-Firebase, הגדרתם את סביבת הפיתוח ובחרתם והתקנתם את ערכות Firebase SDK לפלטפורמה שלכם בהתאם לנושאים במאמר תחילת העבודה עם Firebase לפלטפורמה שלכם: Apple,‏ Android או Web.

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

‫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.database.ref('/messages/{pushId}/original')
          .onCreate((snapshot, context) => {
            const original = snapshot.val();
            console.log('Uppercasing', context.params.pushId, original);
            const uppercase = original.toUpperCase();
            return snapshot.ref.parent.child('uppercase').set(uppercase);
          });
      
  3. מפעילים את Local Emulator Suite באמצעות firebase emulators:start. האמולטורים של Cloud Functions ומסד הנתונים מופעלים, ומוגדרים אוטומטית לפעולה הדדית.
  4. אפשר להציג את ממשק המשתמש בדפדפן בכתובת http://localhost:4000. יציאה 4000 היא היציאה שמוגדרת כברירת מחדל לממשק המשתמש, אבל כדאי לבדוק את הפלט של הודעות הטרמינל שמופקות על ידי Firebase CLI. שימו לב לסטטוס של הסימולטורים הזמינים. במקרה שלנו, האמולטורים Cloud Functions ו-Realtime Database יפעלו.
    התמונה שלי
  5. בממשק המשתמש, בכרטיסייה מסד נתונים בזמן אמת, משתמשים באמצעי הבקרה של עורך תוכן מסד הנתונים כדי ליצור קבוצה של צמתים עם צומת messages שמכיל צומת message1, שמכיל בתורו צומת עם מפתח שהוגדר כ-original וערך שהוגדר כ-test. הפעולה הזו מפעילה את פונקציית הענן. אחרי זמן קצר יופיע נכס חדש uppercase עם הערך TEST.
    התמונה שלי התמונה שלי
  6. בודקים בכרטיסייה Logs (יומנים) כדי לוודא שהפונקציה לא הפעילה שגיאות בזמן שהיא עדכנה את מסד הנתונים.

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

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

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

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

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

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
Swift
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")
Unity
// Connects to the RTDB Emulator running on port 9000.
// Note: You may need to append your namespace: "?ns=YOUR_PROJECT_ID"
FirebaseDatabase database = FirebaseDatabase.GetInstance("http://127.0.0.1:9000");

Web

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
} 

Web

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("127.0.0.1", 9000);
} 

אוטומציה של בדיקות באמצעות סקריפטים מותאמים אישית

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

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

עיון באמולטורים ספציפיים לעומק

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

מה הלאה?

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