חיבור האפליקציה לאמולטור Cloud Storage for Firebase

לפני שמחברים את האפליקציה לאמולטור של Cloud Storage for Firebase, חשוב לוודא שמבינים את תהליך העבודה הכולל של Firebase Local Emulator Suite, שהתקנתם והגדרתם את Local Emulator Suite ושבדקתם את פקודות ה-CLI שלו.

בחירת פרויקט ב-Firebase

Firebase Local Emulator Suite מדמה מוצרים לפרויקט Firebase יחיד.

כדי לבחור את הפרויקט שבו רוצים להשתמש, לפני שמפעילים את האמולטורים, מריצים את הפקודה firebase use בספריית העבודה. אפשר גם להעביר את הדגל --project לכל פקודת אמולטור.

Local Emulator Suite תומך באמולציה של פרויקטים אמיתיים ב-Firebase ושל פרויקטים לדוגמה.

סוג הפרויקט תכונות שימוש באמולטורים
Real

פרויקט Firebase אמיתי הוא פרויקט שיצרתם והגדרתם (לרוב דרך Firebaseהמסוף).

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

כשעובדים עם פרויקטים אמיתיים ב-Firebase, אפשר להפעיל אמולטורים לכל המוצרים הנתמכים או לחלק מהם.

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

הדגמה

לפרויקט הדגמה ב-Firebase אין הגדרה אמיתית של Firebase ואין לו משאבים פעילים. בדרך כלל ניגשים לפרויקטים האלה באמצעות הדרכות של Codelab או מדריכים אחרים.

מזהי פרויקטים של פרויקטים לדוגמה מתחילים בקידומת 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. משתנה הסביבה יוגדר אוטומטית עבור Admin SDK ב-Cloud Storage for Firebase.

אם רוצים שהקוד Admin SDK יתחבר לאמולטור משותף שפועל בסביבה אחרת, צריך לציין את אותו מזהה פרויקט שהגדרתם באמצעות Firebase CLI. אפשר להעביר מזהה פרויקט ישירות אל 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 תואם כמעט באופן מושלם לסביבת הייצור מבחינת אזור ה-API של Firebase. כל הפקודות של Firebase אמורות לפעול בין ערכות ה-SDK הרגילות של Firebase‏ (Web,‏ Android ופלטפורמות של אפל).

יש מגבלות על בדיקה של אפליקציות בצד השרת. ערכות Firebase Admin SDK משתמשות ב-Google Cloud API surface, ולא כל נקודות הקצה של ה-API הזה עוברות אמולציה. ככלל, כל מה שאפשר לעשות באמצעות ה-SDK של הלקוח (העלאה או מחיקה של קבצים, קבלת מטא-נתונים והגדרתם) מיושם גם לשימוש באמצעות Admin SDK, אבל כל מה שמעבר לכך לא מיושם. בהמשך מפורטות החרגות חשובות.

מה ההבדל מ-Google Cloud Storage

המוצר Cloud Storage for Firebase, כולל אמולטור האחסון, מספק קבוצת משנה של פונקציות Google Cloud Storage‏ (GCS) שמתמקדות באובייקטים של אחסון, ושימושיות מאוד לפיתוח אפליקציות Firebase. Cloud Storage for Firebase שונה מ-GCS בדרכים הבאות:

  • Cloud Storage for Firebase לא תומך כרגע בממשקי API של Bucket ליצירה, להצגה, לקבלת או למחיקה של מאגרי אחסון.
  • Google Cloud Storage Objects API תומך ב-methods הבאות: copy,‏ delete,‏ get,‏ insert,‏ list,‏ patch,‏ rewrite,‏ update.

Cloud IAM

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

התראות Pub/Sub

האמולטור של Cloud Storage for Firebase לא משולב עם האמולטור של Cloud Pub/Sub, ולכן הוא לא תומך ביצירת ערוצים או התראות לשינויים באובייקטים של אחסון. מומלץ להשתמש ישירות בטריגרים של Cloud Functions Storage.

מטא-נתונים ברמת הקטגוריה

האמולטור Cloud Storage for Firebase לא תומך בהגדרות ברמת הקטגוריה, כולל מחלקת אחסון, הגדרות CORS ברמת הקטגוריה, תוויות או מדיניות שמירת נתונים. אנחנו מתכננים לשפר את התמיכה הזו ב-Firebase לאורך זמן.

מה הלאה?