將應用程式連線至 Cloud Storage for Firebase 模擬器之前,請務必瞭解整體 Firebase 本機模擬器套件的工作流程,並安裝及設定本機模擬器套件並查看其 CLI 指令。
選擇 Firebase 專案
Firebase 本機模擬器套件可模擬單一 Firebase 專案中的產品。
如要選取要使用的專案,請先透過 CLI 在工作目錄中執行 firebase use
,再啟動模擬器。或者,您也可以將 --project
標記傳遞至每個模擬器指令。
本機模擬器套件支援模擬「實際」的 Firebase 專案和示範專案。
專案類型 | 功能與特色 | 與模擬器搭配使用 |
---|---|---|
真實 |
真正的 Firebase 專案是您建立及設定的專案 (很有可能透過 Firebase 控制台進行)。 真實專案包含使用中的資源,例如資料庫執行個體、儲存空間值區、函式,或是您為該 Firebase 專案設定的任何其他資源。 |
使用實際的 Firebase 專案時,您可以針對任何或所有支援的產品執行模擬器。 針對並非您要模擬的任何產品,應用程式和程式碼會與即時資源 (資料庫執行個體、儲存空間值區、函式等) 互動。 |
示範 |
示範 Firebase 專案沒有實際的 Firebase 設定,也沒有即時資源。一般來說,您可以透過程式碼研究室或其他教學課程存取這些專案。 示範專案的專案 ID 含有 |
使用示範 Firebase 專案時,您的應用程式和程式碼「只會」與模擬器互動。如果應用程式嘗試與未執行模擬器的資源互動,該程式碼將會失敗。 |
建議您盡可能使用示範專案。Meet 具備以下優點:
- 設定更簡單,因為您無須建立 Firebase 專案即可執行模擬器
- 安全性較高,因為如果程式碼意外叫用非模擬的 (正式環境) 資源,就無法變更資料、使用及計費
- 改善離線支援功能,因為不需透過網際網路即可下載 SDK 設定。
檢測應用程式,以便與模擬器通訊
Android、Apple 平台和 Web 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 Storage for Firebase 事件觸發的 Cloud 函式。當 Cloud Storage for Firebase 和 Cloud Functions 模擬器同時執行時,兩者會自動搭配運作。
管理員 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 模擬器之間的整合時略過這個步驟。系統將在 Cloud Storage for Firebase 中自動為 Admin SDK 設定環境變數。
如要讓 Admin SDK 程式碼連線至在其他環境中執行的共用模擬器,您必須指定使用 Firebase CLI 設定的相同專案 ID。您可以將專案 ID 直接傳遞至 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 模擬器幾乎與 Firebase API 介面區域完全一致。所有 Firebase 指令預期可在一般 Firebase SDK (網頁、Android 和 Apple 平台) 之間運作。
伺服器端應用程式測試設有限制。Firebase Admin SDK 會使用 Google Cloud API 介面,且不會模擬這個 API 的所有端點。原則上,凡是可透過用戶端 SDK 執行的操作 (上傳或刪除檔案、取得及設定中繼資料) 也都是實作為從 Admin SDK 使用,除了不允許的做法以外。下方列出幾個常見的排除設定。
與 Google Cloud Storage 的差異
Cloud Storage for Firebase 產品 (包括 Storage 模擬器) 提供一部分 Google Cloud Storage (GCS) 功能,著重在對開發 Firebase 應用程式非常有幫助的儲存物件。Cloud Storage for Firebase 與 GCS 的差異如下:
- Cloud Storage for Firebase 目前不支援建立、列出、取得或刪除儲存空間值區的
Bucket
API。 - 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 希望持續改善這項支援功能。
接下來呢?
- 如需一系列精選影片和詳細教學範例,請參閱 Firebase 模擬器訓練播放清單。
- 由於觸發的函式是 Cloud Storage for Firebase 的典型整合,因此請參閱在本機執行函式一文,進一步瞭解 Cloud Functions for Firebase 模擬器。