获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

将您的应用连接到 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 项目和演示项目。

项目类型特征与模拟器一起使用
真实的

一个真正的 Firebase 项目是您创建和配置的项目(很可能是通过 Firebase 控制台)。

真实项目具有实时资源,例如数据库实例、存储桶、函数或您为该 Firebase 项目设置的任何其他资源。

在处理真实的 Firebase 项目时,您可以为任何或所有受支持的产品运行模拟器。

对于您未模拟的任何产品,您的应用程序和代码将与实时资源(数据库实例、存储桶、函数等)交互。

演示

一个演示 Firebase 项目没有真正的Firebase 配置,也没有实时资源。这些项目通常通过代码实验室或其他教程访问。

演示项目的项目 ID 具有demo-前缀。

使用演示 Firebase 项目时,您的应用程序和代码与模拟器交互。如果您的应用程序尝试与未运行模拟器的资源进行交互,则该代码将失败。

我们建议您尽可能使用演示项目。好处包括:

  • 设置更简单,因为您无需创建 Firebase 项目即可运行模拟器
  • 更强的安全性,因为如果您的代码不小心调用了非模拟(生产)资源,就没有数据更改、使用和计费的机会
  • 更好的离线支持,因为无需访问互联网即可下载您的 SDK 配置。

检测您的应用以与模拟器对话

Android、Apple 平台和 Web SDK

设置您的应用内配置或测试类以与 Cloud Storage for Firebase 模拟器交互,如下所示。

Kotlin+KTX
Firebase.storage.useEmulator("10.0.2.2", 9199)
Java
FirebaseStorage.getInstance().useEmulator("10.0.2.2", 9199);
迅速
Storage.storage().useEmulator(withHost:"localhost", port:9199)
网络 v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
网络 v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
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支持以下方法: copydeletegetinsertlistpatchrewriteupdate

云 IAM

Firebase 模拟器套件不会尝试复制或遵守任何与 IAM 相关的运行行为。模拟器遵守提供的 Firebase 安全规则,但在通常使用 IAM 的情况下,例如设置 Cloud Functions 调用服务帐户和权限,模拟器不可配置,将使用开发人员计算机上的全局可用帐户,类似于直接运行本地脚本。

发布/订阅通知

Cloud Storage for Firebase 模拟器未与 Cloud Pub/Sub 模拟器集成,因此不支持为存储对象更改创建通道/通知。我们建议直接使用 Cloud Functions Storage 触发器。

桶级元数据

Cloud Storage for Firebase 模拟器不支持任何存储桶级配置,包括存储类、存储桶级 CORS 配置、标签或保留策略。 Firebase 打算随着时间的推移改进这种支持。

接下来是什么?

  • 如需一组精选的视频和详细的操作示例,请关注Firebase Emulators Training Playlist
  • 由于触发函数是与 Cloud Storage for Firebase 的典型集成,因此请在本地运行函数中了解有关 Cloud Functions for Firebase 模拟器的更多信息。