适用于 Unity 的 Cloud Storage 使用入门

使用 Cloud Storage for Firebase,您可以上传和共享用户生成的内容(如图片和视频),以便将富媒体内容融入到您的应用中。您的数据存储在 Google Cloud Storage 存储分区中,这是一种 EB 级对象存储解决方案,不仅可用性高,还能实现全局冗余。使用 Cloud Storage,您可以直接从移动设备和网络浏览器安全上传这些文件,轻松应对网络时好时坏的问题。

开始之前

您必须先创建一个 Firebase 项目,并将 Firebase Unity SDK 软件包添加到您的 Unity 项目中,然后才能使用 Cloud Storage

设置:

前提条件

Android

  • Unity 5.0 或更高版本
  • Android NDK 版本 10d 或更高版本

iOS

  • Unity 5.0 或更高版本
  • Xcode 8.0 或更高版本

如果您还没有 Unity 项目,可以下载一个快速入门示例,试用一下特定的 Firebase 功能。如果使用快速入门示例,请不要忘记从项目设置中获取软件包标识符,下一步中会用到该标识符。

在 Firebase 控制台中设置您的应用

要将 Firebase 添加到您的应用,您需要有一个 Firebase 项目以及适用于您的应用的 Firebase 配置文件。

如果您还没有 Firebase 项目,请在 Firebase 控制台中创建一个。如果您已经有与自己的移动应用相关联的现有 Google 项目,请点击导入 Google 项目。如果没有,请点击添加项目

Android

  1. 点击将 Firebase 添加到您的 Android 应用,然后按设置步骤操作。如果您是导入现有 Google 项目,系统可能会自动执行这些操作,您只需下载配置文件即可。
  2. 出现提示时,输入应用的软件包名称。请务必输入应用在使用的软件包名称;只有在将应用添加到 Firebase 项目时您才能进行此设置。
  3. 按照说明下载 google-services.json 文件。您随时可以再重新下载此文件
  4. 将此文件复制到项目的资源文件夹内的任意位置。

iOS

  1. 点击将 Firebase 添加到您的 iOS 应用,然后按设置步骤操作。如果您是导入现有 Google 项目,系统可能会自动执行这些操作,您只需下载配置文件即可。
  2. 出现提示时,输入应用的软件包 ID。请务必输入应用在使用的软件包 ID;只有在将应用添加到 Firebase 项目时您才能进行此设置。
  3. 按照说明下载 GoogleService-Info.plist 文件。您随时可以再重新下载此文件
  4. GoogleService-Info.plist 文件添加到项目中。

    • 将从 Firebase 控制台下载的 GoogleService-Info.plist 拖动到 Unity 项目中的任意文件夹内。

将 Firebase Unity SDK 添加到您的应用

  1. 下载 Firebase Unity SDK
  2. 依次选择 Assets > Import Package > Custom Package 菜单项。
  3. 从之前下载的 Firebase Unity SDK 导入 FirebaseStorage.unitypackage 软件包。
  4. 当出现 Import Unity Package 窗口时,点击 Import 按钮。

初始化 SDK

Firebase Unity SDK (Android) 需要使用 Google Play 服务。必须先将 Google Play 服务更新为最新版本,然后才能使用该 SDK。您应在应用开头处添加以下代码,以便检查 Google Play 服务版本是否符合 Firebase Unity SDK 的要求,并视情况将其更新为相应版本,然后再调用 SDK 中的任何其他方法。

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Set a flag here indiciating that Firebase is ready to use by your
    // application.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

编译您的应用

Android

  1. 依次选择 File > Build Settings 菜单选项。
  2. 选择 Platform 列表中的 Android
  3. 点击 Switch Platform,选择 Android 作为目标平台。
  4. 等待 Unity 状态栏右下角的旋转进度条(正在编译)图标停止旋转。
  5. 点击 Build and Run

iOS

  1. 依次选择 File > Build Settings 菜单选项。
  2. 选择 Platform 列表中的 iOS
  3. 点击 Switch Platform,选择 iOS 作为目标平台。
  4. 等待 Unity 状态栏右下角的旋转进度条(正在编译)图标停止旋转。
  5. 点击 Build and Run

设置公共访问

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

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

访问 FirebaseStorage

Firebase.Storage.FirebaseStorage 是 Cloud Storage Unity SDK 的入口点。

// Get a reference to the storage service, using the default Firebase App
FirebaseStorage storage = FirebaseStorage.DefaultInstance;

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

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

高级设置

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

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

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

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

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

使用多个存储分区

如果要使用除上文介绍的默认存储分区以外的其他存储分区,或在单个应用中使用多个存储分区,您可以创建一个引用您的自定义存储分区的 FirebaseStorage 实例:

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

使用导入的存储分区

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

gsutil -m acl ch -r -u firebase-storage@system.gserviceaccount.com:O gs://<your-cloud-storage-bucket>

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

使用自定义 Firebase 应用

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

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

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

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面