使用 Cloud Storage for Firebase,您可以上传和共享用户生成的内容(如图片和视频),以便将富媒体内容融入您的应用。您的数据存储在 Google Cloud Storage 存储桶中,这是一个 EB 级对象存储解决方案,具备高可用性和全局冗余性。借助 Cloud Storage for Firebase,您可以直接从移动设备和网络浏览器安全地上传这些文件,轻松应对质量不稳定的网络。
准备工作
请确保您已完成 Apple 平台应用入门指南(如果尚未完成)。其中包括:
创建 Firebase 项目。
在项目中注册 Apple 平台应用,并向应用添加 Firebase 库和 Firebase 配置文件 (
GoogleService-Info.plist
) 以将应用与 Firebase 相关联。
确保您的 Firebase 项目采用的是随用随付 Blaze 定价方案。如果您是 Firebase 和 Google Cloud 新手,请确认您是否有资格获得 $300 赠金。
创建默认的 Cloud Storage 存储桶
在 Firebase 控制台的导航窗格中,选择 Storage。
如果您的项目尚未采用随用随付 Blaze 定价方案,系统会提示您升级项目。
点击开始使用。
选择一个位置作为您的默认存储桶。
、US-CENTRAL1
和US-EAST1
中的存储桶可以利用“始终免费”层级来存储 Google Cloud Storage。所有其他位置的存储桶都遵循 Google Cloud Storage 价格和用量。US-WEST1
如果您愿意,稍后可以创建多个存储桶,每个存储桶都有自己的位置。
为默认存储桶配置 Firebase Security Rules。在开发过程中,请考虑设置公开访问规则。
点击完成。
您现在可以在 Firebase 控制台的“Cloud Storage 文件”标签页中查看存储桶。默认存储桶名称的格式为 PROJECT_ID.firebasestorage.app
设置公开访问权限
Cloud Storage for Firebase 提供了声明式规则语言,可用于定义数据的结构、将数据编入索引的方式,以及何时可以在其中读取和写入数据。默认情况下,对 Cloud Storage 的读写权限是受限的,只有通过身份验证的用户才能读写数据。如需在未设置 Authentication 的情况下开始使用数据库,您可以将您的规则配置为允许公开访问。
这会使得 Cloud Storage 向所有人开放,包括不使用您的应用的用户,因此在设置身份验证时,请务必重新限制对 Cloud Storage 的访问。
将 Cloud Storage 添加到您的应用
使用 Swift Package Manager 安装和管理 Firebase 依赖项。
- 在 Xcode 中打开您的应用项目,依次点击 File(文件)> Add Packages(添加软件包)。
- 出现提示时,添加 Firebase Apple 平台 SDK 代码库:
- 选择 Cloud Storage 库。
- 将
-ObjC
标志添加到目标 build 设置的“其他链接器标志”部分。 - 完成之后,Xcode 将会自动开始在后台解析和下载您的依赖项。
https://github.com/firebase/firebase-ios-sdk.git
在应用中设置 Cloud Storage
请先初始化 Firebase,然后才能创建或使用 Firebase 引用。
如果您已设置其他 Firebase 产品,可能已经完成此操作,但您需要确保将
FirebaseStorage
库添加到导入列表中。将
FirebaseCore
模块和FirebaseStorage
模块导入您的UIApplicationDelegate
中。我们还建议添加FirebaseAuth
。SwiftUI
import SwiftUI import FirebaseCore import FirebaseStorage import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseStorage import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseStorage; @import FirebaseAuth; // ...
在应用委托的
application(_:didFinishLaunchingWithOptions:)
方法中配置一个FirebaseApp
共享实例:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
(仅限 SwiftUI)创建应用委托并使用
UIApplicationDelegateAdaptor
或NSApplicationDelegateAdaptor
将其关联到App
结构体。您还必须停用应用委托调配。如需了解详情,请参阅 SwiftUI 说明。SwiftUI
@main struct YourApp: App { // Register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
使用默认的 Cloud Storage 应用获取指向存储服务的引用。
确保应用代码库中的 Firebase 配置文件 (
GoogleService-Info.plist
) 已更新为默认 Cloud Storage 存储桶的名称。使用此下载的配置文件替换 Xcode 项目根目录中现有的
GoogleService-Info.plist
文件。如果出现提示,请选择将配置文件添加到所有目标。确保您的应用中只有此最新下载的配置文件,并且其文件名未附加额外字符,如
(2)
。
使用默认的 Cloud Storage 应用获取指向存储服务的引用:
Swift
let storage = Storage.storage()
// Alternatively, explicitly specify the bucket name URL. storage = Storage.storage(url:"gs://BUCKET_NAME")
Objective-C
FIRStorage *storage = [FIRStorage storage];
// Alternatively, explicitly specify the bucket name URL. // FIRStorage storage = [FIRStorage storageWithURL:@"gs://BUCKET_NAME"];
现在可以开始使用 Cloud Storage 了!
后续步骤:了解如何创建 Cloud Storage 引用。
高级设置
以下几种使用情形需要进行额外的设置:
如果您的用户遍布世界各地,并且您希望将他们的数据存储在各自所在地附近,则非常符合第一种使用情形。例如,您可以在美国、欧洲和亚洲分别创建存储桶,为这些区域的用户存储数据,以减少延迟时间。
如果您的数据有多种不同的访问模式,则符合第二种使用情形。 例如,您可以设置一个多地区或单地区存储分区来存储照片或其他经常访问的内容,并设置一个 Nearline 或 Coldline 存储分区以存储用户备份或其他不常访问的内容。
在这两种使用情形下,您都需要使用多个 Cloud Storage 存储桶。
如果您要构建一个允许用户登录多个账号(例如,一个个人账号和一个工作账号)的应用(例如 Google 云端硬盘),则适合第三种使用情形。您可以使用自定义 Firebase 应用实例来对每个额外的账号进行身份验证。
使用多个 Cloud Storage 存储桶
如果需要使用上文所述的默认存储桶以外的 Cloud Storage 存储桶,或在单个应用中使用多个 Cloud Storage 存储桶,则可以创建一个引用您的自定义存储桶的 FIRStorage
实例:
Swift
// Get a non-default Cloud Storage bucket storage = Storage.storage(url:"gs://my-custom-bucket")
Objective-C
// 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
实例:
Swift
// 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")
Objective-C
// 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"];
后续步骤
准备启动您的应用:
启用 App Check,以便确保只有您的应用可以访问您的存储桶。
在 Google Cloud 控制台中为您的项目设置预算提醒。
在 Firebase 控制台中监控“用量和结算”信息中心,以全面了解您的项目在多个 Firebase 服务中的用量信息。您还可以访问 Cloud Storage 使用量信息中心,以了解更详细的使用情况信息。
查看 Firebase 发布核对清单。