C++ プロジェクトに Firebase を追加する
iOS 向け Firebase および Android 向け Firebase 上に C++ インターフェースを提供する Firebase C++ SDK を使用して、C++ ゲームをパワーアップしましょう。
プラットフォーム固有のコードを記述することなく、C++ コードのみで Firebase にアクセスできます。また、Firebase で使用される多くの言語固有のイディオムも、Firebase SDK によって C++ デベロッパーになじみのあるインターフェースに変換されます。
Firebase でゲームをパワーアップする方法の詳細については、Firebase のゲームのページをご覧ください。
iOS
Android
ステップ 1: 環境を設定する
iOS
Xcode 9.4.1 以降をインストールします。
CocoaPods 1.4.0 以降をインストールします。
Xcode で C++ プロジェクトを開きます。
- アプリのターゲットは iOS 8 以降に設定してください。
アプリを実行するためのデバイスまたはエミュレータを設定します。
- Cloud Messaging を使用する場合は、以下のものが必要となります。
- 実物の iOS デバイス
- プッシュ通知を有効にした APNs 証明書
- Cloud Messaging を使用する場合は、以下のものが必要となります。
Google アカウントを使用して Firebase にログインします。
Android
Android SDK を用意します。
Android Studio や IntelliJ、VS Code など、お好みのエディタまたは IDE をインストールします。
エディタまたは IDE で C++ プロジェクトを開きます。
アプリのターゲットは API レベル 16(Jelly Bean)以降にしてください。
アプリは CMake で構成された Gradle プロジェクトである必要があります。
アプリを実行するためのデバイスまたはエミュレータを設定します。
Google アカウントを使用して Firebase にログインします。
ステップ 2: Firebase プロジェクトを作成する
C++ プロジェクトに接続する Firebase プロジェクトを作成して、Firebase に C++ プロジェクトを追加できるようにします。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。
ステップ 3: アプリを Firebase に登録する
iOS
Firebase プロジェクトに接続するアプリを登録します。複数のアプリを登録することも可能です。
Firebase プロジェクトにアプリを追加するベスト プラクティス、考慮事項(複数のビルド バリエーションの扱い方など)の詳細については、Firebase プロジェクトについて理解するをご覧ください。
Firebase コンソールの [Project Overview] ページの中央にある iOS アイコンをクリックして設定ワークフローを起動します。
すでに Firebase プロジェクトにアプリまたはゲームを追加している場合は、[アプリを追加] をクリックするとプラットフォームのオプションが表示されます。
アプリのバンドル ID を [iOS バンドル ID] に入力します。
- XCode 内で開いたプロジェクトからバンドル ID を見つけます。左側にあるプロジェクト ナビゲータ内のトップにあるアプリを選択して [全般] タブを表示します。[バンドル ID] の値が iOS バンドル ID です(例:
com.yourcompany.ios-app-name)。
- XCode 内で開いたプロジェクトからバンドル ID を見つけます。左側にあるプロジェクト ナビゲータ内のトップにあるアプリを選択して [全般] タブを表示します。[バンドル ID] の値が iOS バンドル ID です(例:
(省略可)設定ワークフローの指示に従って他のアプリ情報を入力します。
ニックネームは内部用の簡便な ID であり、Firebase コンソールでのみ表示されます。
[アプリの登録] をクリックします。
Android
Firebase プロジェクトに接続するアプリを登録します。複数のアプリを登録することも可能です。
Firebase プロジェクトにアプリを追加するベスト プラクティス、考慮事項(複数のビルド バリエーションの扱い方など)の詳細については、Firebase プロジェクトについて理解するをご覧ください。
Firebase コンソールの [Project Overview] ページの中央にある Android アイコンをクリックして設定ワークフローを起動します。
すでに Firebase プロジェクトにアプリまたはゲームを追加している場合は、[アプリを追加] をクリックするとプラットフォームのオプションが表示されます。
アプリケーション ID を [Android パッケージ名] に入力します。
アプリケーション ID はパッケージ名と呼ばれることもあります。
このアプリケーション ID はモジュール(アプリレベル)の Gradle ファイル(通常は
app/build.gradle)内に記載されています(アプリケーション ID の例:com.yourcompany.yourproject)。
(省略可)設定ワークフローの指示に従って他のアプリ情報を入力します。
ニックネームは内部用の簡便な ID であり、Firebase コンソールでのみ表示されます。
[アプリの登録] をクリックします。
ステップ 4: Firebase 構成ファイルを追加する
iOS
[Download GoogleService-Info.plist] をクリックして、Firebase iOS 構成ファイルを入手します。
Firebase iOS 構成ファイルはいつでも再ダウンロードできます。
IDE で C++ プロジェクトを開き、構成ファイルを C++ プロジェクトのルートにドラッグします。
メッセージが表示されたら、構成ファイルをすべてのターゲットに追加するオプションを選択します。
Firebase コンソールでのセットアップ作業はこれで完了です。下記の Firebase C++ SDK を追加するに進んでください。
Android
[Download google-services.json] をクリックして、Firebase Android 構成ファイルを入手します。
Firebase Android 構成ファイルはいつでも再ダウンロードできます。
IDE で C++ プロジェクトを開き、構成ファイルをプロジェクトに追加します。
Gradle ビルドの場合 - 最上位の
build.gradleファイルと同じディレクトリに構成ファイルを追加します。その他のビルドシステムの場合 - 以下にあるカスタムビルド システムを確認して、Android 文字列リソースを出力します。
(Gradle ビルドの場合のみ)C++ プロジェクトで Firebase サービスを有効にするには、最上位の
build.gradleファイルに google-services プラグインを追加します。ルールを追加し、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 // ... } }次の行をファイルの末尾に追加します。
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
Firebase コンソールでのセットアップ作業はこれで完了です。下記の Firebase C++ SDK を追加するに進んでください。
ステップ 5: Firebase C++ SDK を追加する
iOS
このセクションの手順は、サポートされている Firebase プロダクトを Firebase C++ プロジェクトに追加する方法の一例です。この例では、Firebase 向け Google アナリティクスを追加する方法を示します。
Firebase 向け Google アナリティクスを C++ プロジェクトに追加することは任意ですが、追加すると、Firebase とアプリが正常に動作していることの確認が比較的容易になります。また、アナリティクスは開発やデバッグだけでなく、本番環境用アプリの正常性をトラックするのにも非常に役立ちます。
Firebase C++ SDK をダウンロードし、適切な場所で解凍します。
Firebase C++ SDK は特定のプラットフォームを必要としませんが、プラットフォーム固有のライブラリが複数収録されています。
解凍した SDK から、Firebase ポッドを追加します。
Podfile がない場合は作成します。
cd your-app-directory
pod init
使用したい Firebase プロダクトのポッドを、Podfile に追加します。アナリティクスの場合は、次のコマンドを実行します。
pod 'Firebase/Core', '5.12.0'
ポッドをインストールし、Xcode で
.xcworkspaceファイルを開きます。pod install
open your-app.xcworkspace
解凍した SDK から Firebase フレームワークを追加します。
通常は、
Finderウィンドウから Xcode のプロジェクト ナビゲータ ペイン(デフォルトでは一番左側のペイン。Xcode の左上にあるファイル アイコンのクリックでも表示できます)に直接するドラッグする方法が、最も簡単です。Firebase プロダクトの使用に必要なコア Firebase フレームワーク(
firebase.framework)を追加します。使用する各 Firebase プロダクト用のフレームワークを追加します。アナリティクスの場合は、
firebase_analytics.frameworkを追加します。
Firebase コンソールの設定ワークフローに戻り、[次へ] をクリックします。
アプリを実行して、Firebase の統合に成功したという認証を Firebase に送信します。
デバイスログには、初期化が完了したという Firebase の認証が表示されます。ネットワークへのアクセスが有効なエミュレータでアプリを実行した場合、Firebase コンソールによってアプリの接続完了が通知されます。
これで設定は完了です。C++ アプリは Firebase プロダクトを使用するように登録され、構成されました。
Android
このセクションの手順は、サポートされている Firebase プロダクトを Firebase C++ プロジェクトに追加する方法の一例です。この例では、Firebase 向け Google アナリティクスを追加する方法を示します。
Firebase 向け Google アナリティクスを C++ プロジェクトに追加することは任意ですが、追加すると、Firebase とアプリが正常に動作していることの確認が比較的容易になります。また、アナリティクスは開発やデバッグだけでなく、本番環境用アプリの正常性をトラックするのにも非常に役立ちます。
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"プロジェクト レベルの
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 }プロジェクトの
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}")アプリを同期して、すべての依存関係に必要なバージョンがあることを確認します。
アプリを実行して、Firebase の統合に成功したという認証を Firebase に送信します。
デバイスログには、初期化が完了したという Firebase の認証が表示されます。ネットワークへのアクセスが有効なエミュレータでアプリを実行した場合、Firebase コンソールによってアプリの接続完了が通知されます。
これで設定は完了です。C++ アプリは Firebase サービスを使用するように登録され、構成されました。
使用可能なライブラリ
C++ Firebase ライブラリの詳細については、リファレンス ドキュメントと GitHub のオープンソース SDK リリースをご覧ください。
iOS
iOS で使用可能なライブラリ
Android 用の C++ ライブラリは、この設定ページの Android バージョンで確認できます。
Firebase プロダクトでは、依存関係がそれぞれ異なります。必要な Firebase プロダクトについて、リストに記されているすべての依存関係を Podfile と C++ プロジェクトへ追加してください。
| Firebase プロダクト | フレームワークとポッド |
|---|---|
| Firebase core(必須) |
firebase.framework pod 'Firebase/Core', '5.18.0' |
| AdMob |
firebase.framework firebase_admob.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/AdMob', '5.18.0' |
| アナリティクス |
firebase.framework firebase_analytics.framework pod 'Firebase/Core', '5.18.0' |
| Authentication |
firebase.framework firebase_auth.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/Auth', '5.18.0' |
| Cloud Functions |
firebase.framework firebase_functions.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/Functions', '5.18.0' |
| Cloud Messaging |
firebase.framework firebase_messaging.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/Messaging', '5.18.0' |
| Cloud Storage |
firebase.framework firebase_storage.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/Storage', '5.18.0' |
| Dynamic Links |
firebase.framework firebase_dynamic_links.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/DynamicLinks', '5.18.0' |
| Realtime Database |
firebase.framework firebase_database.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/Database', '5.18.0' |
| Remote Config |
firebase.framework firebase_remote_config.framework pod 'Firebase/Core', '5.18.0' pod 'Firebase/RemoteConfig', '5.18.0' |
Android
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 では、特定のメソッドを実装するためにアプリケーション デリゲートを必要とするアプリケーション イベント(URL を開く、通知を受信するなど)があります。たとえば、通知を受信するには、application:didReceiveRemoteNotification: を実装するためのアプリケーション デリゲートが必要になる場合があります。iOS アプリケーションにはそれぞれ独自のアプリ デリゲートがあるため、Firebase はメソッドの実装入れ替えを使用します。これを使用することで、あるメソッドを別のメソッドと置き換えて、実装した任意のハンドラに加えて独自のハンドラをアタッチできます。
Firebase Invites、Dynamic Links、Cloud Messaging ライブラリは、メソッドの実装入れ替えを使用してアプリケーション デリゲートにハンドラをアタッチする必要があります。これらの Firebase プロダクトのうちいずれかを使用している場合、読み込みの際に Firebase は AppDelegate クラスを識別し、そのクラスに必要なメソッドを入れ替え、コールバックを既存のメソッド実装に連結します。
Android
カスタム ビルドシステム
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++ のサブセットが用意されています。
デスクトップでのワークフローとして、次の作業を実施します。
- 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 向け Google アナリティクスを追加する方法を示します。
解凍した Firebase C++ SDK の場所を
FIREBASE_CPP_SDK_DIR環境変数に設定します。プロジェクトの
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}")
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システム ライブラリCoreFoundationOS X システム フレームワークSecurityOS 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 を定義してください。

