Cloud Storage for Firebase を使用して画像や動画などのユーザー作成コンテンツをアップロードして共有し、リッチメディア コンテンツをアプリに組み込むことができます。データは Google Cloud Storage バケットに格納されます。これはエクサバイト規模のオブジェクト ストレージ ソリューションで、高い可用性とグローバルな冗長性を備えています。Cloud Storage for Firebase を使うと、モバイル デバイスやウェブブラウザから直接ファイルを安全にアップロードでき、不安定なネットワークでも安心して行えます。
前提条件
- Firebase SDK をインストールします。
- Firebase コンソールでアプリを Firebase プロジェクトに追加します。
デフォルトの Cloud Storage バケットを作成する
Firebase コンソールのナビゲーション パネルで [Storage] を選択し、[始める] をクリックします。
セキュリティ ルールを使用した Cloud Storage データの保護に関するメッセージを確認します。開発時に公開アクセスルールの設定を考慮してください。
デフォルトの Cloud Storage バケットのロケーションを選択します。
このロケーション設定が、プロジェクトのデフォルトの Google Cloud Platform(GCP)リソース ロケーションになります。なお、このロケーションは、プロジェクト内のロケーション設定が必要な GCP サービスで使用されます。具体例としては、Cloud Firestore データベースや App Engine アプリ(Cloud Scheduler を使用する場合に必要)などがあります。
ロケーションを選択できない場合は、プロジェクトにデフォルトの GCP リソース ロケーションがすでに設定されています。このロケーションは、プロジェクトの作成時か、ロケーション設定を必要とする別のサービスの設定時に設定されたものです。
Blaze プランをご利用の場合は、それぞれ独自のロケーションを使用する複数のバケットを作成できます。
[完了] をクリックします。
公開アクセスの設定
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 ライブラリを選択します。
- ターゲットのビルド設定の [Other Linker Flags] セクションに
-ObjC
フラグを追加します。 - 上記の作業が完了すると、Xcode は依存関係の解決とバックグラウンドでのダウンロードを自動的に開始します。
https://github.com/firebase/firebase-ios-sdk.git
Cloud Storage を設定する
Firebase の参照を作成または使用する前に、Firebase を初期化する必要があります。他の Firebase 機能ですでに初期化を行っている場合は、この手順をスキップできます。
UIApplicationDelegate
にFirebaseCore
モジュールと、アプリのデリゲートが使用する他の Firebase モジュールをインポートします。たとえば、Cloud Firestore と Authentication を使用するには、次のようにします。SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @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() } } } }
-
デフォルトの Firebase アプリを使用して、Cloud Storage サービスへの参照を取得します。
Swift
let storage = Storage.storage()
Objective-C
FIRStorage *storage = [FIRStorage storage];
これで Cloud Storage が使えるようになりました。
まず、Cloud Storage 参照を作成する方法を学びましょう。
高度な設定
次のようないくつかの使用例では、追加の設定が必要です。
- 複数の地理的リージョンで Cloud Storage バケットを使用する
- さまざまなストレージ クラスで Cloud Storage バケットを使用する
- 複数の認証ユーザーが同一アプリ内で Cloud Storage バケットを使用する
最初の使用例は、ユーザーが世界中に存在し、それぞれのユーザーの近くにデータを保存したい場合に最適です。たとえば、レイテンシを短縮するため、米国、ヨーロッパ、アジアの各リージョンでバケットを作成して、各リージョンのユーザーのデータをそこに保存するといったことができます。
2 番目の使用例は、アクセス パターンの異なるデータがある場合に役立ちます。たとえば、写真などの頻繁にアクセスされるコンテンツを格納するためにはマルチリージョンまたはリージョン バケットを、またユーザー バックアップなどのアクセス頻度の低いコンテンツを格納するためには Nearline または Coldline バケットをそれぞれ設定できます。
上述のどちらの場合も、複数の Cloud Storage バケットを使用します。
3 番目の使用例は、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://<your-cloud-storage-bucket>
プロジェクト番号を確認する方法については、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 Console でプロジェクトの予算アラートを設定する。
Firebase コンソールの [使用量と請求額] ダッシュボードをモニタリングして、複数の Firebase サービスにまたがるプロジェクトの全体的な使用状況を確認する。使用量の詳しい情報を確認するには、Cloud Storage の [Usage] ダッシュボードをご利用ください。
Firebase リリース チェックリストを確認する。