Firebase Realtime Database for C++ を使ってみる

Firebase Realtime Database は NoSQL クラウド データベースを使用してデータの保管と同期を行います。データはすべてのクライアントにわたってリアルタイムで同期され、アプリがオフラインになっても利用可能な状態が維持されます。

始める前に

Firebase Realtime Database を使用するには、事前に次の作業を行っておく必要があります。

  • C++ プロジェクトを登録して Firebase を使用するように構成します。

    C++ プロジェクトですでに Firebase を使用している場合、この登録と構成はすでに行われています。

  • プロジェクト レベルの build.gradle ファイルの buildscript セクションと allprojects セクションの両方に Google の Maven リポジトリを組み込む。

  • Firebase C++ SDK を C++ プロジェクトに追加する。

Firebase を C++ プロジェクトに追加するには、Firebase コンソールと開いている C++ プロジェクトの両方でこのタスクを行う必要があります(コンソールから Firebase 構成ファイルをダウンロードして C++ プロジェクトに移動するなど)。

データベースを作成する

  1. まだ Firebase プロジェクトを作成していない場合は作成します。Firebase コンソールで [プロジェクトを追加] をクリックし、画面の指示に沿って、Firebase プロジェクトを作成するか、既存の GCP プロジェクトに Firebase サービスを追加します。

  2. Firebase コンソールの [Realtime Database] セクションに移動します。既存の Firebase プロジェクトを選択するよう求められます。データベース作成ワークフローに従います。

  3. Firebase セキュリティ ルールの開始モードを選択します。

    テストモード

    モバイルおよびウェブ クライアント ライブラリを使用する場合に適していますが、すべてのユーザーがデータを読み書きできます。テストが終わったら、Firebase Realtime Database ルールについてを確認してください。

    ウェブ、iOS、Android SDK を使用する場合は、テストモードを選択します。

    ロックモード

    モバイルおよびウェブ クライアントからのすべての読み書きを拒否します。認証されたアプリケーション サーバーは引き続きデータベースにアクセスできます。

  4. [完了] をクリックします。

Realtime Database を有効にすると、Cloud API Manager で API も有効になります。

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

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

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

#include "firebase/app.h"

Android

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

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"), jni_env, activity);

iOS

firebase::App を作成します。

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"));

firebase::database::Database クラスにアクセスする

firebase::database::Database は、Firebase Realtime Database C++ SDK のエントリ ポイントです。

::firebase::database::Database *database = ::firebase::database::Database::GetInstance(app);

公開アクセスルールを使用することにした場合は、データの保存と取得に関するセクションに進むことができます。

アクセス制限を設定する

公開アクセスを使用しない場合、アプリに Firebase Authentication を追加して、データベースに対するアクセスを制御できます。

次のステップ

既知の問題

  • デスクトップ プラットフォーム(Windows、Mac、Linux)では、Firebase C++ SDK は、REST を使用してデータベースにアクセスします。そのため、デスクトップの Query::OrderByChild() と合わせて使用するインデックスを宣言する必要があります。宣言しないとリスナーが失敗します。
  • Realtime Database のデスクトップ ワークフロー バージョンでは、オフラインや永続性はサポートされていません。