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

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

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

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

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

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

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

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

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

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

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

הדגמה

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

מזהי פרויקטים של פרויקטים לדוגמה כוללים את הקידומת demo-.

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

מומלץ להשתמש בפרויקטים לדוגמה כשהדבר אפשרי. ההטבות כוללות:

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

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

Android, פלטפורמות של Apple ו-SDK לאינטרנט

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

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

יש הגבלות על בדיקת אפליקציות בצד השרת. ערכות ה-Firebase Admin SDK משתמשות בממשק ה-API של Google Cloud, ולא כל נקודות הקצה של ה-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 מתכוון לשפר את התמיכה הזו לאורך זמן.

מה הלאה?