Firebase is back at Google I/O on May 10! Register now

開始在 Apple 平台上使用雲存儲

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

Cloud Storage for Firebase 讓您可以上傳和共享用戶生成的內容,例如圖像和視頻,從而讓您可以在應用中構建富媒體內容。您的數據存儲在Google Cloud Storage 存儲桶中——一種具有高可用性和全局冗餘的 EB 級對象存儲解決方案。 Cloud Storage for Firebase 讓您可以直接從移動設備和 Web 瀏覽器安全地上傳這些文件,輕鬆處理不穩定的網絡。

先決條件

  1. 安裝 Firebase SDK
  2. Firebase 控制台中將您的應用程序添加到您的 Firebase 項目。

創建默認 Cloud Storage 存儲桶

  1. Firebase 控制台的導航窗格中,選擇Storage ,然後單擊Get started

  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 的讀寫訪問受到限制,因此只有經過身份驗證的用戶才能讀取或寫入數據。要在不設置身份驗證的情況下開始,您可以配置公共訪問規則

這確實使雲存儲對任何人開放,甚至是不使用您的應用程序的人,因此請務必在設置身份驗證時再次限制您的雲存儲。

將雲存儲添加到您的應用

使用 Swift Package Manager 安裝和管理 Firebase 依賴項。

  1. 在 Xcode 中,打開您的應用程序項目,導航至File > Add Packages
  2. 出現提示時,添加 Firebase Apple 平台 SDK 存儲庫:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. 選擇雲存儲庫。
  5. 完成後,Xcode 將自動開始在後台解析和下載您的依賴項。

設置雲存儲

在創建或使用任何 Firebase 引用之前,您必須初始化 Firebase。如果您已經為另一個 Firebase 功能完成了此操作,則可以跳過此步驟。

  1. 在您的UIApplicationDelegate中導入FirebaseCore模塊,以及您的應用委託使用的任何其他Firebase 模塊。例如,要使用 Cloud Firestore 和身份驗證:

    斯威夫特用戶界面

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    目標-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 在您的應用委託的application(_:didFinishLaunchingWithOptions:)方法中配置一個FirebaseApp共享實例:

    斯威夫特用戶界面

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    迅速

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    目標-C

    // 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()
          }
        }
      }
    }
          
  4. 使用默認的 Firebase 應用獲取對雲存儲服務的引用:

    迅速

    let storage = Storage.storage()
    

    目標-C

    FIRStorage *storage = [FIRStorage storage];
    

您可以開始使用 Cloud Storage 了!

首先,讓我們了解如何創建 Cloud Storage 引用

高級設置

有一些用例需要額外的設置:

  • 多個地理區域使用 Cloud Storage 存儲桶
  • 不同的存儲類別中使用 Cloud Storage 存儲桶
  • 在同一應用中將 Cloud Storage 存儲桶與多個經過身份驗證的用戶一起使用

如果您的用戶遍布世界各地,並且希望將他們的數據存儲在他們附近,那麼第一個用例是完美的。例如,您可以在美國、歐洲和亞洲創建存儲桶,為這些地區的用戶存儲數據以減少延遲。

如果您的數據具有不同的訪問模式,則第二個用例會很有幫助。例如:您可以設置一個多區域或區域存儲桶來存儲圖片或其他經常訪問的內容,以及一個近線或冷線存儲桶來存儲用戶備份或其他不經常訪問的內容。

在這兩種用例中的任何一種情況下,您都需要使用多個 Cloud Storage 存儲桶

如果您正在構建一個應用程序(如 Google Drive),第三個用例很有用,它允許用戶擁有多個登錄帳戶(例如,個人帳戶和工作帳戶)。您可以使用自定義 Firebase 應用程序實例來驗證每個額外的帳戶。

使用多個 Cloud Storage 存儲桶

如果您想使用上面提供的默認存儲桶以外的 Cloud Storage 存儲桶,或者在單個應用程序中使用多個 Cloud Storage 存儲桶,您可以創建一個引用您的自定義存儲桶的FIRStorage實例:

迅速

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

目標-C

// Get a non-default Cloud Storage bucket
FIRStorage storage = [FIRStorage storageWithURL:@"gs://my-custom-bucket"];
    

使用導入的桶

將現有的 Cloud Storage 存儲桶導入 Firebase 時,您必須授予 Firebase 使用gsutil工具訪問這些文件的能力,該工具包含在Google Cloud SDK中:

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

您可以按照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")
    

目標-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"];
    

下一步