Cloud Storage 使用入门(Apple 平台)

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

准备工作

  1. 请确保您已完成 Apple 平台应用入门指南(如果尚未完成)。其中包括:

    • 创建 Firebase 项目。

    • 在项目中注册 Apple 平台应用,并向应用添加 Firebase 库和 Firebase 配置文件 (GoogleService-Info.plist) 以将应用与 Firebase 相关联。

  2. 确保您的 Firebase 项目采用的是随用随付 Blaze 定价方案。如果您是 Firebase 和 Google Cloud 新手,请确认您是否有资格获得 $300 赠金

创建默认的 Cloud Storage 存储桶

  1. Firebase 控制台的导航窗格中,选择 Storage

    如果您的项目尚未采用随用随付 Blaze 定价方案,系统会提示您升级项目。

  2. 点击开始使用

  3. 选择一个位置作为您的默认存储桶。

  4. 为默认存储桶配置 Firebase Security Rules。在开发过程中,请考虑设置公开访问规则

  5. 点击完成

您现在可以在 Firebase 控制台的Cloud Storage 文件”标签页中查看存储桶。默认存储桶名称的格式为 PROJECT_ID.firebasestorage.app

设置公开访问权限

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

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

Cloud Storage 添加到您的应用

使用 Swift Package Manager 安装和管理 Firebase 依赖项。

  1. 在 Xcode 中打开您的应用项目,依次点击 File(文件)> Add Packages(添加软件包)
  2. 出现提示时,添加 Firebase Apple 平台 SDK 代码库:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. 选择 Cloud Storage 库。
  5. -ObjC 标志添加到目标 build 设置的“其他链接器标志”部分。
  6. 完成之后,Xcode 将会自动开始在后台解析和下载您的依赖项。

在应用中设置 Cloud Storage

  1. 请先初始化 Firebase,然后才能创建或使用 Firebase 引用。

    如果您已设置其他 Firebase 产品,可能已经完成此操作,但您需要确保将 FirebaseStorage 库添加到导入列表中。

    1. FirebaseCore 模块和 FirebaseStorage 模块导入您的 UIApplicationDelegate 中。我们还建议添加 FirebaseAuth

      import SwiftUI
      import FirebaseCore
      import FirebaseStorage
      import FirebaseAuth
      // ...
      
      import FirebaseCore
      import FirebaseStorage
      import FirebaseAuth
      // ...
      
      @import FirebaseCore;
      @import FirebaseStorage;
      @import FirebaseAuth;
      // ...
      
    2. 在应用委托的 application(_:didFinishLaunchingWithOptions:) 方法中配置一个 FirebaseApp 共享实例:

      // Use Firebase library to configure APIs
      FirebaseApp.configure()
      
      // Use Firebase library to configure APIs
      FirebaseApp.configure()
      
      // Use Firebase library to configure APIs
      [FIRApp configure];
      
    3. (仅限 SwiftUI)创建应用委托并使用 UIApplicationDelegateAdaptorNSApplicationDelegateAdaptor 将其关联到 App 结构体。您还必须停用应用委托调配。如需了解详情,请参阅 SwiftUI 说明

      @main
      struct YourApp: App {
        // Register app delegate for Firebase setup
        @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
      
        var body: some Scene {
          WindowGroup {
            NavigationView {
              ContentView()
            }
          }
        }
      }
      
  2. 使用默认的 Cloud Storage 应用获取指向存储服务的引用。

    1. 确保应用代码库中的 Firebase 配置文件 (GoogleService-Info.plist) 已更新为默认 Cloud Storage 存储桶的名称。

      1. 获取更新后的配置文件

      2. 使用此下载的配置文件替换 Xcode 项目根目录中现有的 GoogleService-Info.plist 文件。如果出现提示,请选择将配置文件添加到所有目标。

        确保您的应用中只有此最新下载的配置文件,并且其文件名未附加额外字符,如 (2)

    2. 使用默认的 Cloud Storage 应用获取指向存储服务的引用:

      let storage = Storage.storage()
      // Alternatively, explicitly specify the bucket name URL.
      storage = Storage.storage(url:"gs://BUCKET_NAME")

      FIRStorage *storage = [FIRStorage storage];
      // Alternatively, explicitly specify the bucket name URL.
      // FIRStorage storage = [FIRStorage storageWithURL:@"gs://BUCKET_NAME"];

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

后续步骤:了解如何创建 Cloud Storage 引用

高级设置

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

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

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

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

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

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

使用多个 Cloud Storage 存储桶

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

// Get a non-default Cloud Storage bucket
storage = Storage.storage(url:"gs://my-custom-bucket")
    
// Get a non-default Cloud Storage bucket
FIRStorage storage = [FIRStorage storageWithURL:@"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://BUCKET_NAME

您可以按 Firebase 项目简介中介绍的方法找到项目编号。

这不会影响新建的存储桶,因为其默认已设置为允许 Firebase 访问。这是一个临时的解决方法,将来不需要再手动执行。

使用自定义 Firebase 应用

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

// Get the default bucket from a custom FirebaseApp
storage = Storage.storage(app:customApp)

// Get a non-default bucket from a custom FirebaseApp
storage = Storage.storage(app:customApp, url:"gs://my-custom-bucket")
    
// Get the default bucket from a custom FIRApp
FIRStorage storage = [FIRStorage storageForApp:customApp];

// Get a non-default bucket from a custom FIRApp
FIRStorage storage = [FIRStorage storageForApp:customApp withURL:@"gs://my-custom-bucket"];
    

后续步骤