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

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

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

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

ステップ 1: 環境を設定する

  • Android SDK を用意します。

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

  • エディタまたは IDE で C++ プロジェクトを開きます。

  • アプリを実行するためのデバイスまたはエミュレータを設定します。

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

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

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

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

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

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

Firebase プロジェクトに接続するアプリを登録します。複数のアプリを登録することも可能です。

Firebase プロジェクトにアプリを追加するベスト プラクティス、考慮事項(複数のビルド バリエーションの扱い方など)の詳細については、Firebase プロジェクトについて理解するをご覧ください。

  1. Firebase コンソールでプロジェクトの概要ページの中央にある Android アイコンをクリックして設定ワークフローを起動します。

    すでに Firebase プロジェクトにアプリを追加している場合は、[アプリを追加] をクリックするとプラットフォームのオプションが表示されます。

  2. アプリケーション ID を [Android パッケージ名] に入力します。

    • アプリケーション ID はパッケージ名と呼ばれることもあります。

    • このアプリケーション ID はモジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle)内に記載されています(アプリケーション ID の例: com.yourcompany.yourproject)。

  3. (省略可)設定ワークフローの指示に従って他のアプリ情報を入力します。

    ニックネームは内部用の簡易的な ID であり、Firebase コンソールでのみ表示されます。

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

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

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

    Firebase Android 構成ファイルはいつでも再ダウンロードできます。

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

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

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

        buildscript {
          // ...
          dependencies {
            // ...
            // Add the following line:
            classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
          }
        }
      
        allprojects {
          // ...
          repositories {
            // Check that you have the following line (if not, add it):
            google()  // Google's Maven repository
            // ...
          }
        }
      
    2. 次の行をファイルの末尾に追加します。

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

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

このセクションの手順は、サポートされている Firebase プロダクトを Firebase C++ プロジェクトに追加する方法の一例です。この例では、Firebase 向け Google アナリティクスを追加する方法を示します。

Firebase 向け Google アナリティクスを C++ プロジェクトに追加することは任意ですが、追加すると、Firebase とアプリが正常に動作していることの確認が比較的容易になります。また、アナリティクスは開発やデバッグだけでなく、本番環境用アプリの正常性を追跡するのにも非常に役立ちます。

  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. プロジェクト レベルの build.gradle ファイルに、次の情報を追加します。

       android.defaultConfig.externalNativeBuild.cmake {
         arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
       }

    apply from "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle" firebaseCpp.dependencies { analytics }

  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 core Firebase library (firebase_app) is required to use any Firebase product, # and it must always be listed last. set(firebase_libs firebase_analytics firebase_app) target_link_libraries(${target_name} "${firebase_libs}")

  6. アプリを同期して、すべての依存関係に必要なバージョンがあることを確認します。

  7. アプリを実行して、Firebase の統合に成功したという認証を Firebase に送信します。

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

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

使用可能なライブラリ

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

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

iOS 用の C++ ライブラリはこの設定ページの iOS バージョンで確認できます。

Firebase プロダクト ライブラリ リファレンス(CMake を使用した場合)
Firebase core(必須) firebase_app
AdMob firebase_admob
アナリティクス firebase_analytics
Authentication firebase_auth
Cloud Functions firebase_functions
Cloud Messaging firebase_messaging
Cloud Storage firebase_storage
Dynamic Links firebase_dynamic_links
Realtime Database firebase_database
Remote Config firebase_remote_config

既知の問題

起動時に iOS がクラッシュする

iOS で Firebase を初期化するときにクラッシュする場合があります(ログに +[FIRApp firebaseUserAgent] などが記録されます)。

C ++ SDK でこの問題が発生しないようにするには、Firebase の依存関係に 5.20.0 を使用するように Podfile を更新し、使用する iOS SDK のバージョンを更新します。

詳しくは、GitHub でこの問題をご覧ください。

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

カスタム ビルドシステム

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

たとえば、Gradle と Firebase 向け 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 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、OS X、Linux、および C++ エディタ内で実行できる Firebase C++ のサブセットが用意されています。

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

  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 向け Google アナリティクスを追加する方法を示します。

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

    2. プロジェクトの 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 core Firebase library (firebase_app) is required to use any Firebase product,
      # and it must always be listed last.
      set(firebase_libs firebase_analytics firebase_app)
      target_link_libraries(${target_name} "${firebase_libs}")
      
  4. C++ アプリを実行します。

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

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

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

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

Realtime Database デスクトップ

Realtime Database Desktop 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 ライブラリの依存関係
Authentication advapi32, ws2_32, crypt32
Cloud Functions advapi32, ws2_32, crypt32
Cloud Storage advapi32, ws2_32, crypt32
Realtime Database advapi32, ws2_32, crypt32, iphlpapi, psapi, userenv
Remote Config advapi32, ws2_32, crypt32

OS X のライブラリ

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

これらの OS X ライブラリは Xcode 9.4.1 を使ってテストされている点に留意してください。

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

  • pthread システム ライブラリ
  • CoreFoundation OS X システム フレームワーク
  • Security OS X システム フレームワーク

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

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 を定義してください。