Cloud Storage for Firebaseを使用すると、画像や動画などのユーザー生成コンテンツをアップロードして共有できます。これにより、アプリにリッチメディアコンテンツを組み込むことができます。データはGoogleCloudStorageバケットに保存されます。これは、高可用性とグローバルな冗長性を備えたエクサバイト規模のオブジェクトストレージソリューションです。 Cloud Storage for Firebaseを使用すると、これらのファイルをモバイルデバイスやウェブブラウザから直接安全にアップロードして、むらのあるネットワークを簡単に処理できます。
前提条件
まだ行っていない場合は、Flutter用のFirebaseSDKをインストールして初期化します。
デフォルトのCloudStorageバケットを作成します
Firebaseコンソールのナビゲーションペインで[ストレージ]を選択し、[開始]をクリックします。
セキュリティルールを使用してクラウドストレージデータを保護することに関するメッセージを確認します。開発中は、パブリックアクセスのルールを設定することを検討してください。
デフォルトのCloudStorageバケットの場所を選択します。
この場所の設定は、プロジェクトのデフォルトのGoogle Cloud Platform(GCP)リソースの場所です。この場所は、場所の設定が必要なプロジェクトのGCPサービス、具体的にはCloudFirestoreデータベースとAppEngineアプリ(Cloud Schedulerを使用する場合に必要)に使用されることに注意してください。
場所を選択できない場合、プロジェクトにはすでにデフォルトのGCPリソースの場所があります。プロジェクトの作成時、または場所の設定が必要な別のサービスの設定時に設定されました。
Blazeプランを使用している場合は、それぞれが独自の場所を持つ複数のバケットを作成できます。
[完了]をクリックします。
パブリックアクセスを設定する
Cloud Storage for Firebaseは、データの構造化方法、インデックス作成方法、データの読み取りと書き込みのタイミングを定義できる宣言型ルール言語を提供します。デフォルトでは、Cloud Storageへの読み取りおよび書き込みアクセスが制限されているため、認証されたユーザーのみがデータの読み取りまたは書き込みを行うことができます。 Firebase認証を設定せずに開始するには、パブリックアクセスのルールを設定できます。
これにより、Cloud Storageは、アプリを使用していない人も含め、誰でも利用できるようになります。そのため、認証を設定するときは、CloudStorageを再度制限してください。
CloudStorageSDKをアプリに追加します
Flutterプロジェクトのルートから、次のコマンドを実行してプラグインをインストールします。
flutter pub add firebase_storage
完了したら、Flutterアプリケーションを再構築します。
flutter run
Dartコードにプラグインをインポートします。
import 'package:firebase_storage/firebase_storage.dart';
クラウドストレージをセットアップする
Cloud Storageバケットにアクセスするための最初のステップは、 FirebaseStorage
のインスタンスを作成することです。
final storage = FirebaseStorage.instance;
これで、CloudStorageの使用を開始する準備が整いました。
まず、 CloudStorageリファレンスを作成する方法を学びましょう。
詳細設定
追加のセットアップが必要なユースケースがいくつかあります。
- 複数の地理的地域でのCloudStorageバケットの使用
- さまざまなストレージクラスでのCloudStorageバケットの使用
- 同じアプリで複数の認証済みユーザーとCloudStorageバケットを使用する
最初のユースケースは、世界中にユーザーがいて、その近くにデータを保存したい場合に最適です。たとえば、米国、ヨーロッパ、アジアでバケットを作成して、これらの地域のユーザーのデータを保存し、レイテンシを短縮できます。
2番目のユースケースは、アクセスパターンが異なるデータがある場合に役立ちます。たとえば、写真やその他の頻繁にアクセスされるコンテンツを保存するマルチリージョンまたはリージョナルバケットと、ユーザーのバックアップやその他の頻繁にアクセスされないコンテンツを保存するニアラインまたはコールドラインバケットを設定できます。
これらのユースケースのいずれでも、複数のCloudStorageバケットを使用する必要があります。
3番目の使用例は、ユーザーが複数のログインアカウント(たとえば、個人アカウントと仕事用アカウント)を持つことができるGoogleドライブなどのアプリを構築している場合に役立ちます。カスタムFirebaseアプリインスタンスを使用して、追加の各アカウントを認証できます。
複数のCloudStorageバケットを使用する
上記のデフォルト以外のCloudStorageバケットを使用する場合、または単一のアプリで複数のCloud Storageバケットを使用する場合は、カスタムバケットを参照するFirebaseStorage
のインスタンスを作成できます。
// Get a non-default Storage bucket
final storage = FirebaseStorage.instanceFor(bucket: "gs://my-custom-bucket");
インポートされたバケットの操作
既存のCloudStorageバケットをFirebaseにインポートする場合、 GoogleCloudSDKに含まれている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
を使用してより複雑なアプリを構築している場合は、そのアプリで初期化されたFirebaseStorage
のインスタンスを作成できます。
// Use a non-default App
final storage = FirebaseStorage.instanceFor(app: customApp);
次のステップ
- アプリを起動する準備をします。
- アプリチェックを有効にして、アプリのみがストレージバケットにアクセスできるようにします。
- GoogleCloudConsoleでプロジェクトの予算アラートを設定します。
- Firebaseコンソールで使用状況と課金のダッシュボードを監視して、複数のFirebaseサービスにわたるプロジェクトの使用状況の全体像を把握します。使用状況の詳細については、 CloudStorageの使用状況ダッシュボードにアクセスすることもできます。
- Firebaseの起動チェックリストを確認します。