Google 致力于为黑人社区推动种族平等。查看具体举措

Cloud Storage on Android 使用入门

通过 Cloud Storage for Firebase,您可以上传和共享用户生成的内容(如图片和视频),以便将富媒体内容融入您的应用。您的数据存储在 Google Cloud Storage 存储分区中,这是一个 EB 级对象存储解决方案,具备高可用性和全局冗余性。通过 Cloud Storage for Firebase,您可以直接从移动设备和网络浏览器安全上传这些文件,从容应对网络不够稳定的情况。

前提条件

将 Firebase 添加到您的 Android 项目(如果尚未添加)。

创建默认 Cloud Storage 存储分区

  1. Firebase 控制台的导航窗格中,选择 Storage,然后点击开始使用

  2. 查看有关使用安全规则保护 Cloud Storage 数据的消息。在开发过程中,请考虑设置公共访问规则

  3. 选择一个位置作为您的默认 Cloud Storage 存储分区。

    • 此位置设置是您项目的默认 Google Cloud Platform (GCP) 资源位置。请注意,此位置将用于项目中需要位置设置的多个 GCP 服务,具体是指 Cloud Firestore 数据库和 App Engine 应用(如果您使用 Cloud Scheduler,则需要该应用)。

    • 如果您无法选择位置,表明您的项目已经具有默认 GCP 资源位置。它可能是在项目创建期间设置的,也可能是在需要位置设置的其他服务中设置的。

    如果您使用的是 Blaze 方案,则可以创建多个存储分区,每个存储分区都有自己的位置

  4. 点击完成

设置公共访问权限

Cloud Storage for Firebase 提供了一种声明式规则语言,可用于定义数据的结构、将数据编入索引的方式,以及何时可以读取和写入数据。默认情况下,对 Cloud Storage 的读写权限是受限的,只有通过身份验证的用户才能读写数据。如需在未设置身份验证的情况下开始使用,您可以配置公开访问权限规则

这会使得 Cloud Storage 向所有人开放,包括不使用您的应用的用户,因此在设置身份验证时,请务必重新限制对 Cloud Storage 的访问权限。

将 Cloud Storage SDK 添加到您的应用

使用 Firebase Android BoM模块(应用级)Gradle 文件(通常为 app/build.gradle)中声明对 Cloud Storage Android 库的依赖。

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:27.1.0')

    // Declare the dependency for the Cloud Storage library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage'
}

使用 Firebase Android BoM,可确保您的应用始终使用 Firebase Android 库的兼容版本。

(替代方法) 在不使用 BoM 的情况下声明 Firebase 库依赖项

如果您选择不使用 Firebase BoM,则必须在其依赖项行中指定每个 Firebase 库版本。

请注意,如果您在应用中使用多个 Firebase 库,我们强烈建议您使用 BoM 来管理库版本,从而确保所有版本都兼容。

dependencies {
    // Declare the dependency for the Cloud Storage library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage:19.2.2'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:27.1.0')

    // Declare the dependency for the Cloud Storage library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage-ktx'
}

使用 Firebase Android BoM,可确保您的应用始终使用 Firebase Android 库的兼容版本。

(替代方法) 在不使用 BoM 的情况下声明 Firebase 库依赖项

如果您选择不使用 Firebase BoM,则必须在其依赖项行中指定每个 Firebase 库版本。

请注意,如果您在应用中使用多个 Firebase 库,我们强烈建议您使用 BoM 来管理库版本,以确保所有版本都兼容。

dependencies {
    // Declare the dependency for the Cloud Storage library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-storage-ktx:19.2.2'
}

设置 Cloud Storage

访问 Cloud Storage 存储分区的第一步是创建一个 FirebaseStorage 实例:

Java

FirebaseStorage storage = FirebaseStorage.getInstance();

Kotlin+KTX

storage = Firebase.storage

现在可以开始使用 Cloud Storage 了!

首先,我们来了解如何创建 Cloud Storage 引用

高级设置

以下几种使用情形需要进行额外的设置:

  • 使用多个地理区域中的 Cloud Storage 存储分区
  • 使用不同存储类别的 Cloud Storage 存储分区
  • 同一个应用中有多个经过身份验证的用户的情况下使用 Cloud Storage 存储分区

如果您的用户遍布世界各地,并且您希望将他们的数据存储在各自所在地附近,则非常适合第一种使用情形。例如,您可以在美国、欧洲和亚洲分别创建存储分区,为各自地区的用户存储数据,以减少延迟时间。

如果您的数据有不同的访问模式,则适合第二种使用情形。 例如,您可以设置一个多区域或单区域存储分区来存储照片或其他经常访问的内容,并设置一个 Nearline 或 Coldline 存储分区以存储用户备份或其他不常访问的内容。

在这两种使用情形下,您都需要使用多个 Cloud Storage 存储分区

如果您要构建一个允许用户登录多个帐号(例如,一个个人帐号和一个工作帐号)的应用(例如 Google 云端硬盘),则适合第三种使用情形。您可以使用自定义 Firebase 应用实例来对额外的每个帐号进行身份验证。

使用多个 Cloud Storage 存储分区

如果需要使用上文提供的默认存储分区以外的 Cloud Storage 存储分区,或在单个应用中使用多个 Cloud Storage 存储分区,则可以创建一个引用您的自定义存储分区的 FirebaseStorage 实例:

Java

// Get a non-default Storage bucket
FirebaseStorage storage = FirebaseStorage.getInstance("gs://my-custom-bucket");

Kotlin+KTX

// Get a non-default Storage bucket
val storage = Firebase.storage("gs://my-custom-bucket")

使用导入的存储分区

将现有 Cloud Storage 存储分区导入 Firebase 时,您必须使用 Google Cloud SDK 中包含的 gsutil 工具授予 Firebase 访问这些文件的权限:

gsutil -m acl ch -r -u service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

您可以在 Firebase 项目简介中找到项目编号。

这不会影响新建的存储分区,因为其默认已设置为允许 Firebase 访问。这是一项临时措施,将来会自动执行。

使用自定义 Firebase 应用

如果您要使用自定义 FirebaseApp 构建更复杂的应用,可以创建使用该应用初始化的 FirebaseStorage 实例:

Java

// Get the default bucket from a custom FirebaseApp
FirebaseStorage storage = FirebaseStorage.getInstance(customApp);

// Get a non-default bucket from a custom FirebaseApp
FirebaseStorage customStorage = FirebaseStorage.getInstance(customApp, "gs://my-custom-bucket");

Kotlin+KTX

// Get the default bucket from a custom FirebaseApp
val storage = Firebase.storage(customApp!!)

// Get a non-default bucket from a custom FirebaseApp
val customStorage = Firebase.storage(customApp, "gs://my-custom-bucket")

后续步骤