將您的應用程式連接到 Cloud Storage for Firebase 模擬器

在將您的應用程式連接到 Cloud Storage for Firebase 模擬器之前,請確保您了解 Firebase 本機模擬器套件的整體工作流程,並安裝和設定本機模擬器套件並查看其CLI 命令

選擇 Firebase 項目

Firebase 本機模擬器套件模擬單一 Firebase 專案的產品。

若要選擇要使用的項目,請在啟動模擬器之前,在 CLI 中在工作目錄中執行firebase use 。或者,您可以將--project標誌傳遞給每個模擬器指令。

本機模擬器套件支援模擬真實的Firebase 專案和演示專案。

項目類型特徵與模擬器一起使用
真實的

真正的 Firebase 專案是您建立和配置的專案(很可能透過 Firebase 控制台)。

真實專案具有即時資源,例如資料庫執行個體、儲存桶、函數或您為該 Firebase 專案設定的任何其他資源。

在處理真實的 Firebase 專案時,您可以為任何或所有受支援的產品運行模擬器。

對於您未模擬的任何產品,您的應用程式和程式碼將與即時資源(資料庫執行個體、儲存桶、函數等)進行互動。

示範

示範 Firebase 專案沒有真正的Firebase 配置,也沒有即時資源。這些項目通常透過代碼實驗室或其他教程存取。

示範項目的項目 ID 具有demo-前綴。

使用示範 Firebase 專案時,您的應用程式和程式碼與模擬器互動。如果您的應用程式嘗試與未運行模擬器的資源進行交互,則該程式碼將會失敗。

我們建議您盡可能使用演示項目。好處包括:

  • 設定更簡單,因為您無需建立 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);
迅速
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web modular API

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 namespaced API

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 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 管理 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(Web、Android 和 Apple 平台)之間執行。

對於伺服器端應用程式的測試,存在限制。 Firebase Admin SDK 使用 Google Cloud API 介面,並非模擬該 API 的所有端點。根據經驗,任何可以從客戶端 SDK 完成的操作(上傳或刪除檔案、獲取和設定元資料)也可以透過管理 SDK 實現,但除此之外的任何操作都不能。下面列出了值得注意的排除情況。

與谷歌雲端儲存的區別

Cloud Storage for Firebase 產品(包括儲存模擬器)提供了 Google Cloud Storage (GCS) 功能的子集,該功能專注於儲存對象,這對於開發 Firebase 應用程式非常有用。 Cloud Storage for Firebase 與 GCS 有以下不同之處:

  • Cloud Storage for Firebase 目前不支援用於建立、列出、取得或刪除儲存桶Bucket API。
  • Google Cloud Storage Objects API支援以下方法: copydeletegetinsertlistpatchrewriteupdate

雲端身分管理

Firebase 模擬器套件不會嘗試複製或遵守任何與 IAM 相關的運行行為。模擬器遵守提供的 Firebase 安全性規則,但在通常使用 IAM 的情況下,例如設定呼叫服務帳戶和權限的 Cloud Functions,模擬器不可配置,並將使用開發人員電腦上的全域可用帳戶,類似於直接執行本地腳本。

發布/訂閱通知

Cloud Storage for Firebase 模擬器不會與 Cloud Pub/Sub 模擬器集成,因此不支援為儲存物件變更建立通道/通知。我們建議直接使用 Cloud Functions Storage 觸發器。

桶級元數據

Cloud Storage for Firebase 模擬器不支援任何儲存桶級配置,包括儲存類別、儲存桶級 CORS 配置、標籤或保留策略。 Firebase 打算隨著時間的推移改進這種支援。

接下來是什麼?