Cloud Storage for Firebase を使用して画像や動画などのユーザー作成コンテンツをアップロードして共有し、リッチメディア コンテンツをアプリに組み込むことができます。データは Google Cloud Storage バケットに格納されます。これはエクサバイト スケールのオブジェクト ストレージ ソリューションで、高い可用性とグローバルな冗長性を備えています。Cloud Storage を使うと、モバイル端末やウェブブラウザから直接ファイルを安全にアップロードでき、不安定なネットワークも簡単に扱うことができます。
事前準備
- Firebase SDK をインストールします。
- Firebase コンソールでアプリを Firebase プロジェクトに追加します。
公開アクセスの設定
Cloud Storage for Firebase には宣言型のルール言語が用意されているため、データの構造化、インデックスの作成方法、データの書き込みと読み取りのタイミングを定義できます。認証ユーザーのみがデータの読み取りと書き込みを行えるように、Storage への読み書きアクセスはデフォルトで制限されています。Authentication を設定せずに開始するには、公開アクセスルールを設定します。
この場合、アプリを使用しない人を含むあらゆる人々に Storage が公開されるので、認証の設定時に、Storage を再度制限するようにしてください。
Cloud Storage のアプリへの追加
Cloud Storage の依存関係を build.gradle
ファイルに追加します。
compile 'com.google.firebase:firebase-storage:11.8.0'
Cloud Storage の設定
ストレージ バケットにアクセスするための最初の手順は、FirebaseStorage
のインスタンスを作成することです。
FirebaseStorage storage = FirebaseStorage.getInstance();
これで Cloud Storage が使えるようになりました。
まず、Cloud Storage 参照を作成する方法を学びましょう。
高度な設定
次のようないくつかの使用例では、追加の設定が必要です。
- 複数のリージョンでストレージ バケットを使用する
- さまざまなストレージ クラスでストレージ バケットを使用する
- 複数の認証ユーザーが同一アプリ内でストレージ バケットを使用する
最初の使用例は、ユーザーが世界中に存在し、それぞれのユーザーの近くにデータを保存したい場合に最適です。たとえば、レイテンシを短縮するため、米国、ヨーロッパ、アジアの各リージョンでバケットを作成して、各リージョンのユーザーのデータをそこに保存するといったことができます。
2 番目の使用例は、アクセス パターンの異なるデータがある場合に役立ちます。たとえば、写真など、頻繁にアクセスされるコンテンツを格納するためにはマルチリージョンまたはリージョン バケットを、ユーザー バックアップなど、アクセス頻度の低いコンテンツを格納するためには Nearline または Coldline バケットをそれぞれ設定できます。
上記のどちらの場合も、複数のストレージ バケットを使用します。
3 番目の使用例は、Google ドライブのような、ユーザーが複数のログイン アカウント(個人用アカウントや仕事用アカウントなど)を持つことができるアプリを作成する場合に役立ちます。カスタムの Firebase App インスタンスを使用して、追加の各アカウントを認証できます。
複数のストレージ バケットを使用する
上記で提供されているデフォルト以外のストレージ バケットを使用する場合、または単一のアプリで複数のストレージ バケットを使用する場合は、カスタム バケットを参照する FirebaseStorage
のインスタンスを作成できます。
// Get a non-default Storage bucket FirebaseStorage 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");