在將您的應用程序連接到 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 項目和演示項目。
項目類型 | 特徵 | 與模擬器一起使用 |
---|---|---|
真實的 | 一個真正的 Firebase 項目是您創建和配置的項目(很可能是通過 Firebase 控制台)。 真實項目具有實時資源,例如數據庫實例、存儲桶、函數或您為該 Firebase 項目設置的任何其他資源。 | 在處理真實的 Firebase 項目時,您可以為任何或所有受支持的產品運行模擬器。 對於您未模擬的任何產品,您的應用程序和代碼將與實時資源(數據庫實例、存儲桶、函數等)交互。 |
演示 | 一個演示 Firebase 項目沒有真正的Firebase 配置,也沒有實時資源。這些項目通常通過代碼實驗室或其他教程訪問。 演示項目的項目 ID 具有 | 使用演示 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:"localhost", port:9199)
網絡 v8
var storage = firebase.storage(); if (location.hostname === "localhost") { // Point to the Storage emulator running on localhost. storage.useEmulator("localhost", 9199); }
網絡 v9
const { getStorage, connectStorageEmulator } = require("firebase/storage"); const storage = getStorage(); if (location.hostname === "localhost") { // Point to the Storage emulator running on localhost. connectStorageEmulator(storage, "localhost", 9199); }
無需額外設置即可使用模擬器測試由 Cloud Storage 觸發的 Cloud Functions 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="localhost: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"
導入導出數據
Firebase 模擬器的數據庫和 Cloud Storage 允許您從正在運行的模擬器實例中導出數據。定義要在單元測試或持續集成工作流程中使用的基線數據集,然後將其導出以在團隊之間共享。
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 執行的任何操作(上傳或刪除文件、獲取和設置元數據)也可以通過 Admin 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支持以下方法:
copy
、delete
、get
、insert
、list
、patch
、rewrite
、update
。
雲 IAM
Firebase 模擬器套件不會嘗試複製或遵守任何與 IAM 相關的運行行為。模擬器遵守提供的 Firebase 安全規則,但在通常使用 IAM 的情況下,例如設置 Cloud Functions 調用服務帳戶和權限,模擬器不可配置,將使用開發人員計算機上的全局可用帳戶,類似於直接運行本地腳本。
發布/訂閱通知
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 模擬器的更多信息。