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


לפני שמתחילים להשתמש ב-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 שמכילה קוד של פונקציות בענן וקבצים תומכים אחרים.

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

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

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

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

firebase emulators:start

כדי ליצור אב טיפוס של האפליקציה ההיפותטית שלנו, בואו נגדיר ונבדוק פונקציה בסיסית ב-Cloud Functions כדי לשנות רשומות טקסט במסד נתונים, וגם ליצור את מסד הנתונים הזה ולאכלס אותו ב-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. הפקודה הזו מפעילה את הפונקציה ב-Cloud Functions. שימו לב שתוך זמן קצר יופיע שדה uppercase חדש, שמאוכלס במחרוזת TEST.
    התמונה שלי התמונה שלי
  6. בכרטיסייה Firestore > Requests, בודקים את הבקשות שנשלחו למסד הנתונים האמולציה שלכם, כולל כל ההערכות של Firebase Security Rules שבוצעו כחלק ממילוי הבקשות האלה.
  7. בודקים את הכרטיסייה Logs כדי לוודא שהפונקציה לא נתקלה בשגיאות בזמן עדכון מסד הנתונים.

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

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

אחרי שתתקדמו כראוי ביצירת האב טיפוס האינטראקטיבי והחלטתם על עיצוב, תוכלו להוסיף לאפליקציה קוד גישה למסד נתונים באמצעות ה-SDK המתאים. תמשיכו להשתמש בכרטיסייה של מסד הנתונים, ובפונקציות בכרטיסייה 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"

מידע מפורט יותר על מכונות וירטואליות ספציפיות

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

מה הלאה?

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