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 を用意します。
プロジェクトが次の要件を満たしていることを確認します。
API レベル 21(Lollipop)以降を対象としていること
Gradle を使用し、CMake と連携するように構成されていること
実機を設定するか、エミュレータを使用してアプリを実行します。
Google アカウントを使用して Firebase にログインします。
ステップ 2: Firebase プロジェクトを作成する
C++ プロジェクトに接続する Firebase プロジェクトを作成して、C++ プロジェクトに Firebase を追加できるようにします。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。
ステップ 3: アプリを Firebase に登録する
Android アプリで Firebase を使用するには、アプリを Firebase プロジェクトに登録する必要があります。アプリの登録は、プロジェクトへのアプリの「追加」とも呼ばれます。
Firebaseコンソールに移動します。
プロジェクトの概要ページの中央で、Android アイコン(
)または [アプリを追加] をクリックして、設定ワークフローを起動します。[Android パッケージ名] フィールドにアプリのパッケージ名を入力します。
(省略可)その他のアプリ情報(アプリのニックネームとデバッグ用の署名証明書 SHA-1)を入力します。
[アプリの登録] をクリックします。
ステップ 4: Firebase 構成ファイルを追加する
[Download google-services.json] をクリックして、Firebase Android 構成ファイルを入手します。
IDE で C++ プロジェクトを開き、構成ファイルをプロジェクトに追加します。
Gradle ビルドの場合 - 最上位の
build.gradle
ファイルと同じディレクトリに構成ファイルを追加します。その他のビルドシステムの場合 - 以下にあるカスタム ビルドシステムを確認して、Android 文字列リソースを出力します。
(Gradle ビルドの場合のみ)C++ プロジェクトで Firebase サービスを有効にするには、最上位の
build.gradle
ファイルに google-services プラグインを追加します。ルールを追加し、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.2' // Google Services plugin implementation 'com.google.android.gms:18.5.0' } } allprojects { // ... repositories { // Check that you have the following line (if not, add it): google() // Google's Maven repository // ... } }
Google サービス Gradle プラグインを適用します。
apply plugin: 'com.android.application' // Add the following line: apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // ... }
Firebase コンソールでのセットアップ作業はこれで完了です。次の Firebase C++ SDK を追加するに進んでください。
ステップ 5: Firebase C++ SDK を追加する
このセクションの手順は、サポートされている Firebase プロダクトを Firebase C++ プロジェクトに追加する方法の一例です。
Firebase C++ SDK をダウンロードし、適切な場所で解凍します。
Firebase C++ SDK は特定のプラットフォームを必要としませんが、プラットフォーム固有のライブラリが複数収録されています。
プロジェクトの
gradle.properties
ファイルで、解凍した SDK の場所を指定します。systemProp.firebase_cpp_sdk.dir=full-path-to-SDK
プロジェクトの
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"
モジュール(アプリレベル)の Gradle ファイル(通常は
app/build.gradle
)に、以下の内容を追加します。
アプリで使用する Firebase プロダクトのライブラリ依存関係を含めます。Analytics 有効化
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 }
Analytics 無効
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 }
プロジェクトの
CMakeLists.txt
ファイルに、以下の内容を追加します。
アプリで使用する Firebase プロダクトのライブラリを含めます。Analytics 有効化
# 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}")
Analytics 無効
# 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}")
アプリを同期して、すべての依存関係に必要なバージョンがあることを確認します。
Analytics を追加した場合は、アプリを実行して、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 | 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 Analytics を使用している場合、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 | 不要(通常) |
Analytics | 不要 |
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++ SDK のサブセットが用意されています。
デスクトップでのワークフローとして、次の作業を実施します。
- CMake 用に C++ プロジェクトを構成する
- Firebase プロジェクトを作成する
- アプリ(iOS や Android)を Firebase に登録する
- モバイル プラットフォーム用 Firebase 構成ファイルを追加する
デスクトップ版の 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 プロジェクトについて理解するをご覧ください。
Firebase SDK を C++ プロジェクトに追加します。
以下の手順は、サポートされている Firebase プロダクトを C++ プロジェクトに追加する方法の一例です。この例では、Firebase Authentication と Firebase Realtime Database を追加する手順について説明します。
解凍した Firebase C++ SDK の場所を
FIREBASE_CPP_SDK_DIR
環境変数に設定します。プロジェクトの
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}")
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
を定義してください。
次のステップ
Firebase アプリのサンプルを確認する。
GitHub のオープンソース SDK を確認する。
アプリを起動する準備をする。
- Google Cloud コンソールでプロジェクトの予算アラートを設定する。
- Firebase コンソールの [使用量と請求額] ダッシュボードをモニタリングして、複数の Firebase サービスを通じたプロジェクトの全体的な使用状況を確認する。
- Firebase リリース チェックリストを確認する。