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

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

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

מה הלאה?