將應用程式連線至 Cloud Storage for Firebase 模擬器

將應用程式連線至 Cloud Storage for Firebase 模擬器之前,請先確認 瞭解整體 Firebase Local Emulator Suite 工作流程 而且您需要安裝及設定 Local Emulator Suite 並查看其 CLI 指令

選擇 Firebase 專案

Firebase Local Emulator Suite 在單一 Firebase 專案中模擬產品。

如要選取要使用的專案,請先在 CLI 執行下列指令,再啟動模擬器 firebase use。您也可以 對每個模擬器使用 --project 標記 指令

Local Emulator Suite 支援模擬「實際」的 Firebase 專案和 demo 專案。

專案類型 功能 與模擬器搭配使用
真實

真正的 Firebase 專案是您建立及設定的專案 (很有可能 透過 Firebase 控制台進行)。

真實專案具備即時資源,例如資料庫執行個體、儲存空間 您為此 Firebase 設定的值區、函式或任何其他資源 專案。

使用實際的 Firebase 專案時 或所有支援的產品

如有任何產品並非由您模擬,應用程式和程式碼就會 會與 live 資源 (資料庫執行個體、儲存空間) 互動 值區、函式等)。

示範

示範 Firebase 專案沒有實際的 Firebase 設定, 沒有即時資源這類專案通常透過程式碼研究室或 其他教學課程

示範專案的專案 ID 含有前置字串 demo-

使用示範 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 FirebaseCloud 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 FunctionsCloud Storage for Firebase 整合 模擬器。系統會自動為 Admin SDK 設定環境變數 在「Cloud Storage for Firebase」中。

如果您希望 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 的所有端點 模擬。原則上,可透過 Client 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 支援下列方法:copydeletegetinsertlistpatchrewriteupdate

Cloud IAM

Firebase 模擬器套件不會試圖複製或尊重任何 與執行作業的 IAM 相關行為。模擬器符合 Firebase 安全性規定 已提供規則,但在一般情況下會使用 IAM,例如 設定 Cloud Functions 叫用服務帳戶,藉此取得權限 無法設定模擬器,且會使用全域存取的帳戶 與直接執行本機指令碼類似

Pub/Sub 通知

Cloud Storage for Firebase 模擬器不會與 Cloud Build 整合 Pub/Sub 模擬器,因此不支援建立功能 儲存空間物件變更的管道/通知。為求明確,建議採用 Cloud Functions 個儲存空間觸發條件。

值區層級中繼資料

Cloud Storage for Firebase 模擬器不支援任何值區層級 包括儲存空間級別、值區層級 CORS 設定、標籤 或資料保留政策Firebase 希望持續改善這項支援功能。

接下來呢?