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

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

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

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

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

  • Xcode 9.4.1 以降をインストールします。

  • CocoaPods 1.4.0 以降をインストールします。

  • Xcode で C++ プロジェクトを開きます。

    • アプリのターゲットは iOS 8 以降に設定してください。
  • アプリを実行するためのデバイスまたはエミュレータを設定します。

    • Cloud Messaging を使用する場合は、以下のものが必要となります。
      • 実物の iOS デバイス
      • プッシュ通知を有効にした APNs 証明書
  • Google アカウントを使用して Firebase にログインします。

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

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

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

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

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

  1. Firebase コンソールの [Project Overview] ページの中央にある iOS アイコンをクリックして設定ワークフローを起動します。

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

  2. アプリのバンドル ID を [iOS バンドル ID] に入力します。

    • XCode 内で開いたプロジェクトからバンドル ID を見つけます。左側にあるプロジェクト ナビゲータ内のトップにあるアプリを選択して [全般] タブを表示します。[バンドル ID] の値が iOS バンドル ID です(例: com.yourcompany.ios-app-name)。
  3. (省略可)設定ワークフローの指示に従って他のアプリ情報を入力します。

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

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

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

  1. [Download GoogleService-Info.plist] をクリックして、Firebase iOS 構成ファイルを入手します。

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

  2. IDE で C++ プロジェクトを開き、構成ファイルを C++ プロジェクトのルートにドラッグします。

  3. メッセージが表示されたら、構成ファイルをすべてのターゲットに追加するオプションを選択します。

  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. 解凍した SDK から、Firebase ポッドを追加します。

    1. Podfile がない場合は作成します。

      cd your-app-directory
      pod init

    2. 使用したい Firebase プロダクトのポッドを、Podfile に追加します。アナリティクスの場合は、次のコマンドを実行します。

      pod 'Firebase/Core', '5.12.0'

    3. ポッドをインストールし、Xcode で .xcworkspace ファイルを開きます。

      pod install
      open your-app.xcworkspace

  3. 解凍した SDK から Firebase フレームワークを追加します。

    通常は、Finder ウィンドウから Xcode のプロジェクト ナビゲータ ペイン(デフォルトでは一番左側のペイン。Xcode の左上にあるファイル アイコンのクリックでも表示できます)に直接するドラッグする方法が、最も簡単です。

    1. Firebase プロダクトの使用に必要なコア Firebase フレームワーク(firebase.framework)を追加します。

    2. 使用する各 Firebase プロダクト用のフレームワークを追加します。アナリティクスの場合は、firebase_analytics.framework を追加します。

  4. Firebase コンソールの設定ワークフローに戻り、[次へ] をクリックします。

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

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

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

使用可能なライブラリ

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

iOS で使用可能なライブラリ

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

Firebase プロダクトでは、依存関係がそれぞれ異なります。必要な Firebase プロダクトについて、リストに記されているすべての依存関係を Podfile と C++ プロジェクトへ追加してください。

Firebase プロダクト フレームワークとポッド
Firebase core(必須)

firebase.framework
  pod 'Firebase/Core', '5.20.2'
AdMob

firebase.framework
  firebase_admob.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/AdMob', '5.20.2'
アナリティクス

firebase.framework
  firebase_analytics.framework
  pod 'Firebase/Core', '5.20.2'
Authentication

firebase.framework
  firebase_auth.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/Auth', '5.20.2'
Cloud Functions

firebase.framework
  firebase_functions.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/Functions', '5.20.2'
Cloud Messaging

firebase.framework
  firebase_messaging.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/Messaging', '5.20.2'
Cloud Storage

firebase.framework
  firebase_storage.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/Storage', '5.20.2'
Dynamic Links

firebase.framework
  firebase_dynamic_links.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/DynamicLinks', '5.20.2'
Realtime Database

firebase.framework
  firebase_database.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/Database', '5.20.2'
Remote Config

firebase.framework
  firebase_remote_config.framework
  pod 'Firebase/Core', '5.20.2'
  pod 'Firebase/RemoteConfig', '5.20.2'
  

既知の問題

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

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

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

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

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

メソッドの実装入れ替え

iOS では、特定のメソッドを実装するためにアプリケーション デリゲートを必要とするアプリケーション イベント(URL を開く、通知を受信するなど)があります。たとえば、通知を受信するには、application:didReceiveRemoteNotification: を実装するためのアプリケーション デリゲートが必要になる場合があります。iOS アプリケーションにはそれぞれ独自のアプリ デリゲートがあるため、Firebase はメソッドの実装入れ替えを使用します。これを使用することで、あるメソッドを別のメソッドと置き換えて、実装した任意のハンドラに加えて独自のハンドラをアタッチできます。

Firebase Invites、Dynamic Links、Cloud Messaging ライブラリは、メソッドの実装入れ替えを使用してアプリケーション デリゲートにハンドラをアタッチする必要があります。これらの Firebase プロダクトのうちいずれかを使用している場合、読み込みの際に Firebase は AppDelegate クラスを識別し、そのクラスに必要なメソッドを入れ替え、コールバックを既存のメソッド実装に連結します。

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

ゲームを作成する場合、通常はまずデスクトップ プラットフォームでゲームをテストしてから、開発中のモバイル デバイスにデプロイしてテストする方が簡単になります。このワークフローをサポートするために、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 を定義してください。