לפני שמחברים את האפליקציה לאמולטור של 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 או מדריכים אחרים. מזהי הפרויקטים של פרויקטים לדוגמה מתחילים בקידומת |
כשעובדים עם פרויקטים לדוגמה ב-Firebase, האפליקציות והקוד שלכם מקיימים אינטראקציה עם אמולטורים בלבד. אם האפליקציה תנסה לקיים אינטראקציה עם משאב שלא פועל בו אמולטור, הקוד ייכשל. |
מומלץ להשתמש בפרויקטים לדוגמה בכל מקום שבו זה אפשרי. היתרונות כוללים:
- הגדרה קלה יותר, כי אפשר להפעיל את האמולטורים בלי ליצור פרויקט ב-Firebase.
- בטיחות משופרת, כי אם הקוד שלכם מפעיל בטעות משאבים שלא עברו אמולציה (ייצור), אין סיכוי לשינוי נתונים, לשימוש ולחיוב.
- תמיכה טובה יותר במצב אופליין, כי אין צורך לגשת לאינטרנט כדי להוריד את הגדרות ה-SDK.
הגדרת האפליקציה כך שתתקשר עם האמולטורים
ערכות SDK ל-Android, לפלטפורמות של אפל ולאינטרנט
מגדירים את ההגדרות האישיות באפליקציה או את מחלקות הבדיקה כדי ליצור אינטראקציה עם האמולטור של 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)
Unity
FirebaseStorage storage = FirebaseStorage.DefaultInstance; // Connects to the Storage Emulator running on port 9199 storage.UseEmulator("127.0.0.1", 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_STORAGE_EMULATOR_HOST, ה-Firebase Admin SDK מתחברים באופן אוטומטי לאמולטור של Cloud Storage for Firebase:
export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"
שימו לב שהאמולטור של Cloud Functions מזהה באופן אוטומטי את האמולטור של Cloud Storage for Firebase, כך שאפשר לדלג על השלב הזה כשבודקים שילובים בין האמולטורים של Cloud Functions ו-Cloud Storage for Firebase. משתנה הסביבה יוגדר באופן אוטומטי ל-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 מאפשרים לייצא נתונים ממכונה פעילה של אמולטור. מגדירים קבוצת נתונים בסיסית לשימוש בבדיקות יחידה או בתהליכי עבודה של אינטגרציה רציפה (CI), ואז מייצאים אותה כדי לשתף אותה עם הצוות.
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).
יש מגבלות על בדיקת אפליקציות בצד השרת. ערכות ה-SDK של Firebase לאדמינים משתמשות בממשק ה-API של Google Cloud, ולא כל נקודות הקצה של ה-API הזה עוברות אמולציה. ככלל אצבע, כל מה שאפשר לעשות מ-SDK של הלקוח (העלאה או מחיקה של קבצים, קבלה והגדרה של מטא-נתונים) מיושם גם לשימוש מ-SDK לאדמינים, אבל כל מה שמעבר לכך לא מיושם. החרגות בולטות מפורטות בהמשך.
מה ההבדל מ-Google Cloud Storage
המוצר Cloud Storage for Firebase, כולל האמולטור של Storage, מספק קבוצת משנה של פונקציונליות של 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 יש אוסף של סרטונים ודוגמאות מפורטות.
- מכיוון שפונקציות מופעלות הן שילוב אופייני עם Cloud Storage for Firebase, כדאי לקרוא מידע נוסף על האמולטור של Cloud Functions for Firebase במאמר הפעלת פונקציות באופן מקומי.