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

Firebase SDK 上に C++ インターフェースを提供する Firebase C++ SDK を使用して、C++ ゲームをパワーアップしましょう。

プラットフォーム固有のコードを記述することなく、C++ コードのみで Firebase にアクセスできます。また、Firebase で使用される多くの言語固有のイディオムも、Firebase SDK によって C++ デベロッパーになじみのあるインターフェースに変換されます。

Firebase でゲームをパワーアップする方法の詳細については、Firebase のゲームのページをご覧ください。

C++ プロジェクトに Firebase を追加済みの場合は、Firebase C++ SDK の最新バージョンを使用していることを確認します。

前提条件

  • Android Studio や IntelliJ、VS Code など、お好みのエディタまたは IDE をインストールします。

  • Android SDK を用意します。

  • プロジェクトが次の要件を満たしていることを確認します。

  • 実機を設定するか、エミュレータを使用してアプリを実行します。

    • エミュレータでは Google Play を含むエミュレータ イメージを使用する必要があります。

    • C++ ライブラリを動作させるために、クライアント デバイスで Google Play 開発者サービスが必要になる場合があります。このページにあるリストをご確認ください。

  • Google アカウントを使用して Firebase にログインします。

ステップ 2: Firebase プロジェクトを作成する

C++ プロジェクトに接続する Firebase プロジェクトを作成して、C++ プロジェクトに Firebase を追加できるようにします。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。

ステップ 3: アプリを Firebase に登録する

Android アプリで Firebase を使用するには、アプリを Firebase プロジェクトに登録する必要があります。アプリの登録は、プロジェクトへのアプリの「追加」とも呼ばれます。

  1. Firebase コンソールに移動します。

  2. プロジェクトの概要ページの中央で、Android アイコン()または [アプリを追加] をクリックして、設定ワークフローを起動します。

  3. [Android パッケージ名] フィールドにアプリのパッケージ名を入力します。

  4. (省略可)その他のアプリ情報(アプリのニックネームデバッグ用の署名証明書 SHA-1)を入力します。

  5. [アプリを登録] をクリックします。

ステップ 4: Firebase 構成ファイルを追加する

  1. [Download google-services.json] をクリックして、Firebase Android 構成ファイルを入手します。

  2. IDE で C++ プロジェクトを開き、構成ファイルをプロジェクトに追加します。

  3. (Gradle ビルドの場合のみ)C++ プロジェクトで Firebase サービスを有効にするには、最上位の build.gradle ファイルに google-services プラグインを追加します。

    1. ルールを追加し、Google サービス Gradle プラグインを指定します。Google の Maven リポジトリがあることも確認してください。

        buildscript {
      
          repositories {
            // Check that you have the following line (if not, add it):
            google()  // Google's Maven repository
          }
      
          dependencies {
            // ...
      
            // Add the following lines:
            classpath 'com.google.gms:google-services:4.4.1'  // Google Services plugin
            implementation 'com.google.android.gms:18.3.0'
          }
        }
      
        allprojects {
          // ...
      
          repositories {
            // Check that you have the following line (if not, add it):
            google()  // Google's Maven repository
            // ...
          }
        }
      
    2. Google サービス Gradle プラグインを適用します。

        apply plugin: 'com.android.application'
        // Add the following line:
        apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
        android {
          // ...
        }
      
  4. Firebase コンソールでのセットアップ作業はこれで完了です。次の Firebase C++ SDK を追加するに進んでください。

ステップ 5: Firebase C++ SDK を追加する

このセクションの手順は、サポートされている Firebase プロダクトを Firebase C++ プロジェクトに追加する方法の一例です。

  1. Firebase C++ SDK をダウンロードし、適切な場所で解凍します。

    Firebase C++ SDK は特定のプラットフォームを必要としませんが、プラットフォーム固有のライブラリが複数収録されています。

  2. プロジェクトの gradle.properties ファイルで、解凍した SDK の場所を指定します。

    systemProp.firebase_cpp_sdk.dir=full-path-to-SDK
    
  3. プロジェクトの settings.gradle ファイルに、以下の内容を追加します。

    def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir')
    
    gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir"
    includeBuild "$firebase_cpp_sdk_dir"
    
  4. モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle)に、以下の内容を追加します。
    アプリで使用する Firebase プロダクトのライブラリ依存関係を含めます。

    アナリティクスが有効な場合

    android.defaultConfig.externalNativeBuild.cmake {
    arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
    }
    
    # Add the dependencies for the Firebase products you want to use in your app
    # For example, to use Analytics, Firebase Authentication, and Firebase Realtime Database
    apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
    firebaseCpp.dependencies {
      analytics
      auth
      database
    }
    

    アナリティクスが無効な場合

    android.defaultConfig.externalNativeBuild.cmake {
    arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
    }
    
    # Add the dependencies for the Firebase products you want to use in your app
    # For example, to use Firebase Authentication and Firebase Realtime Database
    apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
    firebaseCpp.dependencies {
      auth
      database
    }
    
  5. プロジェクトの CMakeLists.txt ファイルに、以下の内容を追加します。
    アプリで使用する Firebase プロダクトのライブラリを含めます。

    アナリティクスが有効な場合

    # Add Firebase libraries to the target using the function from the SDK.
    add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
    
    # The Firebase C++ library `firebase_app` is required,
    # and it must always be listed last.
    
    # Add the Firebase SDKs for the products you want to use in your app
    # For example, to use Analytics, Firebase Authentication, and Firebase Realtime Database
    set(firebase_libs
      firebase_analytics
      firebase_auth
      firebase_database
      firebase_app
    )
    target_link_libraries(${target_name} "${firebase_libs}")
    

    アナリティクスが無効な場合

    # Add Firebase libraries to the target using the function from the SDK.
    add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
    
    # The Firebase C++ library `firebase_app` is required,
    # and it must always be listed last.
    
    # Add the Firebase SDKs for the products you want to use in your app
    # For example, to use Firebase Authentication and Firebase Realtime Database
    set(firebase_libs
      firebase_auth
      firebase_database
      firebase_app
    )
    target_link_libraries(${target_name} "${firebase_libs}")
    
  6. アプリを同期して、すべての依存関係に必要なバージョンがあることを確認します。

  7. アナリティクスを追加した場合は、アプリを実行して、Firebase の統合に成功したという確認を Firebase に送信します。それ以外の場合は、この確認手順をスキップできます。

    デバイスログには、初期化が完了したという Firebase の確認が表示されます。ネットワークへのアクセスが有効なエミュレータでアプリを実行した場合、Firebase コンソールによってアプリの接続完了が通知されます。

これで設定は完了です。C++ アプリは Firebase サービスを使用するように登録され、構成されました。

使用可能なライブラリ

C++ Firebase ライブラリの詳細については、リファレンス ドキュメントGitHub のオープンソース SDK リリースをご覧ください。

Android で使用可能なライブラリ(CMake を使用した場合)

Apple プラットフォーム用の C++ ライブラリは、この設定ページの Apple プラットフォーム(iOS+)バージョンで確認できます。

Firebase プロダクト ライブラリ リファレンス
firebaseCpp.dependencies:
build.gradle ファイル用)
ライブラリ リファレンス
firebase_libs:
CMakeLists.txt ファイル用)
AdMob admob firebase_admob
(必須)firebase_analytics
(必須)firebase_app
アナリティクス analytics firebase_analytics
(必須)firebase_app
App Check appCheck firebase_app_check
(必須)firebase_app
Authentication auth firebase_auth
(必須)firebase_app
Cloud Firestore firestore firebase_firestore
(必須)firebase_auth
(必須)firebase_app
Cloud Functions functions firebase_functions
(必須)firebase_app
Cloud Messaging messaging firebase_messaging
(推奨)firebase_analytics
(必須)firebase_app
Cloud Storage storage firebase_storage
(必須)firebase_app
Dynamic Links dynamicLinks firebase_dynamic_links
(推奨)firebase_analytics
(必須)firebase_app
Realtime Database database firebase_database
(必須)firebase_app
Remote Config remoteConfig firebase_remote_config
(推奨)firebase_analytics
(必須)firebase_app

モバイル設定に関するその他の情報

NDK クラッシュ レポートを取得する

Firebase Crashlytics は、Android のネイティブ ライブラリを使用するアプリのクラッシュ レポートをサポートしています。詳細については、Android NDK のクラッシュ レポートの取得をご覧ください。

カスタム ビルドシステム

Firebase では、google-services.json をプロジェクトに含めることのできる .xml リソースに変換するためのスクリプト generate_xml_from_google_services_json.py が用意されています。このスクリプトでは、Google Play 開発者サービスの Gradle プラグインが Android アプリをビルドする際に実行するものと同じ変換が適用されます。

ビルドの際に Gradle を使わない場合(たとえば、ndk-build、makefile、Visual Studio などを使用する場合)には、このスクリプトを使用して、Android 文字列リソースの出力を自動化できます。

ProGuard

多くの Android ビルドシステムでは、リリースモードでのビルドに ProGuard を使用して、アプリサイズの縮小や Java ソースコードの保護を行います。

ProGuard を使用する場合、ProGuard の構成で使用している Firebase C++ ライブラリに対応する libs/android/*.pro にファイルを追加する必要があります。

たとえば、Gradle と Google アナリティクスを使用している場合、build.gradle ファイルの内容は次のようになります。

android {
  // ...
  buildTypes {
    release {
      minifyEnabled true
      proguardFile getDefaultProguardFile('your-project-proguard-config.txt')
      proguardFile file(project.ext.your_local_firebase_sdk_dir + "/libs/android/app.pro")
      proguardFile file(project.ext.your_local_firebase_sdk_dir + "/libs/android/analytics.pro")
      // ...  and so on, for each Firebase C++ library that you're using
    }
  }
}

Google Play 開発者サービスの要件

ほとんどの Firebase C++ ライブラリで、クライアントの Android デバイス上に Google Play 開発者サービスが必要です。Firebase C++ ライブラリが初期化時に kInitResultFailedMissingDependency を返す場合は、クライアント デバイスで Google Play 開発者サービスが利用できないことを意味します(したがって、更新、再有効化、権限の修正などが必要となります)。Firebase ライブラリは、クライアント デバイスの状態が正常となるまで使用できません。

google_play_services/availability.h で定義されている関数を使って、Google Play 開発者サービスを利用できない原因を特定し、修正を試みることができます。

次の表に、サポートされている Firebase プロダクトについて、クライアント デバイスで Google Play 開発者サービスが必要となるかどうかを示します。

Firebase C++ ライブラリ クライアント デバイスで Google Play 開発者サービスが必要か?
AdMob 不要(通常)
アナリティクス 不要
Authentication 必須
Cloud Firestore 必須
Cloud Functions 必須
Cloud Messaging 必須
Cloud Storage 必須
Dynamic Links 必須
Realtime Database 必須
Remote Config 必須

AdMob と Google Play 開発者サービス

Google Mobile Ads SDK for Android のほとんどのバージョンでは、Google Play 開発者サービスがクライアント デバイスにない状態でも正常に機能します。ただし、上記の標準の com.google.firebase:firebase-ads 依存関係でなく com.google.android.gms:play-services-ads-lite 依存関係を使用する場合には、Google Play 開発者サービスが必要になります

以下の両方の条件を満たす場合には、AdMob の初期化の際に必ず kInitResultFailedMissingDependency が返されます。

  • クライアント デバイスで、Google Play 開発者サービスが利用不可になっている。
  • com.google.android.gms:play-services-ads-lite を使用している。

デスクトップ ワークフローを設定する(ベータ版

ゲームを作成する場合、通常はまずデスクトップ プラットフォームでゲームをテストしてから、開発中のモバイル デバイスにデプロイしてテストする方が簡単になります。このワークフローをサポートするために、Windows、macOS、Linux、および C++ エディタ内で実行できる Firebase C++ のサブセットが用意されています。

  1. デスクトップでのワークフローとして、次の作業を実施します。

    1. CMake 用に C++ プロジェクトを構成する
    2. Firebase プロジェクトを作成する
    3. アプリ(iOS や Android)を Firebase に登録する
    4. モバイル プラットフォーム用 Firebase 構成ファイルを追加する
  2. デスクトップ版の Firebase 構成ファイルを作成します。

    • Android google-services.json ファイルを追加した場合 - アプリの起動時に、Firebase がモバイル用のファイルの場所を特定し、デスクトップ用の Firebase 構成ファイル(google-services-desktop.json)を自動的に生成します。

    • iOS GoogleService-Info.plist ファイルを追加した場合 - アプリの起動前に、モバイル用のファイルをデスクトップ用の Firebase 構成ファイルに変換する必要があります。ファイルを変換するには、GoogleService-Info.plist ファイルと同じディレクトリで以下のコマンドを実行してください。

      generate_xml_from_google_services_json.py --plist -i GoogleService-Info.plist

    このデスクトップ構成ファイルには、Firebase コンソールの設定ワークフローで入力した C++ プロジェクト ID が含まれています。構成ファイルの詳細については、Firebase プロジェクトについて理解するをご覧ください。

  3. Firebase SDK を C++ プロジェクトに追加します。

    以下の手順は、サポートされている Firebase プロダクトを C++ プロジェクトに追加する方法の一例です。この例では、Firebase Authentication と Firebase Realtime Database を追加する方法を示します。

    1. 解凍した Firebase C++ SDK の場所を FIREBASE_CPP_SDK_DIR 環境変数に設定します。

    2. プロジェクトの CMakeLists.txt ファイルに、使用する Firebase プロダクトのライブラリを含む、以下の内容を追加します。たとえば、Firebase Authentication と Firebase Realtime Database を使用するには、以下を行います。

      # Add Firebase libraries to the target using the function from the SDK.
      add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
      
      # The Firebase C++ library `firebase_app` is required,
      # and it must always be listed last.
      
      # Add the Firebase SDKs for the products you want to use in your app
      # For example, to use Firebase Authentication and Firebase Realtime Database
      set(firebase_libs firebase_auth firebase_database firebase_app)
      target_link_libraries(${target_name} "${firebase_libs}")
      
  4. C++ アプリを実行します。

使用可能なライブラリ(デスクトップ)

Firebase C++ SDK には機能のサブセットに対するデスクトップ ワークフローのサポートが含まれているため、Firebase の特定の部分を Windows、maxOS、Linux のスタンドアロン デスクトップ ビルドで使用できます。

Firebase プロダクト ライブラリ リファレンス(CMake を使用した場合)
App Check firebase_app_check
(必須)firebase_app
Authentication firebase_auth
(必須)firebase_app
Cloud Firestore firebase_firestore
firebase_auth
firebase_app
Cloud Functions firebase_functions
(必須)firebase_app
Cloud Storage firebase_storage
(必須)firebase_app
Realtime Database firebase_database
(必須)firebase_app
Remote Config firebase_remote_config
(必須)firebase_app

Firebase では残りのデスクトップ ライブラリはスタブ(非機能的)実装であり、Windows、macOS、Linux 向けのビルドを便利にするために提供されています。このため、デスクトップを対象としてコードを条件付きでコンパイルする必要はありません。

Realtime Database デスクトップ

デスクトップ用 Realtime Database SDK では、データベースに対するアクセスに REST が利用されます。このため、デスクトップで Query::OrderByChild() を使って、使用するインデックスを宣言する必要があります。宣言がないとリスナーは失敗します。

デスクトップ設定に関するその他の情報

Windows のライブラリ

Windows の場合、以下の事項に対応するライブラリ バージョンが用意されています。

  • ビルド プラットフォーム: 32 ビット(x86)モード、64 ビット(x64)モード
  • Windows のランタイム環境: マルチスレッド / MT、マルチスレッド DLL / MD
  • ターゲット: リリース、デバッグ

以下のライブラリは、Visual Studio 2015 および 2017 を使用してテストされている点に留意してください。

Windows で C++ デスクトップ アプリをビルドする際は、以下の Windows SDK ライブラリをプロジェクトにリンクしてください。詳しくは、コンパイラのドキュメントを参照してください。

Firebase C++ ライブラリ Windows SDK ライブラリの依存関係
App Check advapi32, ws2_32, crypt32
Authentication advapi32, ws2_32, crypt32
Cloud Firestore advapi32, ws2_32, crypt32, rpcrt4, ole32, shell32
Cloud Functions advapi32, ws2_32, crypt32, rpcrt4, ole32
Cloud Storage advapi32, ws2_32, crypt32
Realtime Database advapi32, ws2_32, crypt32, iphlpapi, psapi, userenv
Remote Config advapi32, ws2_32, crypt32, rpcrt4, ole32

macOS のライブラリ

macOS(Darwin)の場合、用意されているライブラリ バージョンは 64 ビット(x86_64)プラットフォームに対応したものになります。利便性のためにフレームワークも用意されています。

これらの macOS ライブラリは Xcode 13.3.1 を使ってテストされています。

macOS で C++ デスクトップ アプリをビルドする際は、プロジェクトに以下をリンクしてください。

  • pthread システム ライブラリ
  • CoreFoundation macOS システム フレームワーク
  • Foundation macOS システム フレームワーク
  • Security macOS システム フレームワーク
  • GSS macOS システム フレームワーク
  • Kerberos macOS システム フレームワーク
  • SystemConfiguration macOS システム フレームワーク

詳しくは、コンパイラのドキュメントを参照してください。

Linux のライブラリ

Linux の場合、32 ビット(i386)および 64 ビット(x86_64)のプラットフォームに対応するバージョンのライブラリが用意されています。

これらの Linux ライブラリは、GCC 4.8.0、GCC 7.2.0、および Clang 5.0 を使用し Ubuntu 上でテストされていることに留意してください。

Linux で C++ デスクトップ アプリをビルドする際は、プロジェクトに pthread システム ライブラリをリンクしてください。詳しくは、コンパイラのドキュメントを参照してください。GCC 5 以降でビルドする場合は、-D_GLIBCXX_USE_CXX11_ABI=0 を定義してください。

次のステップ