Cloud Storage for C++ を使ってみる

Cloud Storage for Firebase を使用して画像や動画などのユーザー作成コンテンツをアップロードして共有し、リッチメディア コンテンツをアプリに組み込むことができます。データは Google Cloud Storage バケットに格納されます。これはエクサバイト スケールのオブジェクト ストレージ ソリューションで、高い可用性とグローバルな冗長性を備えています。Cloud Storage を使うと、モバイル端末やウェブブラウザから直接ファイルを安全にアップロードでき、不安定なネットワークも簡単に扱うことができます。

準備

Android

  1. アプリを Firebase プロジェクトに接続していない場合は、Firebase コンソールで接続します。
  2. Firebase を Android プロジェクトに追加します
  3. Cloud Storage への依存関係をアプリレベルの build.gradle ファイルに追加します。
    dependencies {
     implementation 'com.google.firebase:firebase-storage:16.0.3'
    }
  4. C++ SDK の静的ライブラリ libapp.alibstorage.a をリンクします。

iOS

  1. アプリを Firebase プロジェクトに接続していない場合は、Firebase コンソールで接続します。
  2. Firebase を iOS プロジェクトに追加します
  3. Podfile で次のポッドをインクルードします。
    pod 'Firebase/Storage'
  4. pod install を実行します。
  5. C++ SDKfirebase.frameworkfirebase_storage.framework を Xcode プロジェクトに追加します。

公開アクセスの設定

Cloud Storage for Firebase には宣言型のルール言語が用意されているため、データの構造化、インデックスの作成方法、データの書き込みと読み取りのタイミングを定義できます。認証ユーザーのみがデータの読み取りと書き込みを行えるように、Storage への読み書きアクセスはデフォルトで制限されています。Authentication を設定せずに開始するには、公開アクセスルールを構成します。

この場合、アプリを使用しない人を含むあらゆる人々に Storage が公開されるため、認証を設定するときに必ず Storage へのアクセス制限を再設定してください。

firebase::App を作成して初期化する

Storage にアクセスするには、その前に firebase::App を作成して初期化する必要があります。

firebase::App のヘッダー ファイルを追加します。

#include "firebase/app.h"

Android

firebase::App を作成し、引数として JNI 環境と jobject 参照を Java アクティビティに渡します。

app = App::Create(AppOptions(), jni_env, activity);

iOS

firebase::App を作成します。

app = App::Create(AppOptions());

firebase::storage::Storage クラスにアクセスする

firebase::storage::Storage クラスは、Cloud Storage C++ SDK のエントリ ポイントです。

Storage* storage = Storage::GetInstance(app);

これで Cloud Storage が使えるようになりました。

まず、Cloud Storage 参照を作成する方法を学びましょう。

高度な設定

次のようないくつかの使用例では、追加の設定が必要です。

最初の使用例は、ユーザーが世界中に存在し、それぞれのユーザーの近くにデータを保存したい場合に最適です。たとえば、レイテンシを短縮するため、米国、ヨーロッパ、アジアの各リージョンでバケットを作成して、各リージョンのユーザーのデータをそこに保存するといったことができます。

2 番目の使用例は、アクセス パターンの異なるデータがある場合に役立ちます。たとえば、写真など、頻繁にアクセスされるコンテンツを格納するためにはマルチリージョンまたはリージョン バケットを、ユーザー バックアップなど、アクセス頻度の低いコンテンツを格納するためには Nearline または Coldline バケットをそれぞれ設定できます。

上記のどちらの場合も、複数のストレージ バケットを使用します。

3 番目の使用例は、Google ドライブのような、ユーザーが複数のログイン アカウント(個人用アカウントや仕事用アカウントなど)を持つことができるアプリを作成する場合に役立ちます。カスタムの Firebase アプリ インスタンスを使用して、追加の各アカウントを認証できます。

複数のストレージ バケットを使用する

上記で提供されているデフォルト以外のストレージ バケットを使用する場合、または単一のアプリで複数のストレージ バケットを使用する場合は、カスタム バケットを参照する firebase::storage::Storage のインスタンスを作成できます。

// Get a non-default Storage bucket
Storage* storage = Storage::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 アプリの使用

カスタム firebase::App を使用してより複雑なアプリを作成する場合には、このアプリで初期化される firebase::storage::Storage のインスタンスを作成できます。

// Get the default bucket from a custom firebase::App
Storage* storage = Storage::GetInstance(customApp);

// Get a non-default bucket from a custom firebase::App
Storage* storage = Storage::GetInstance(customApp, "gs://my-custom-bucket");

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。