Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

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

Firebase Unity SDK を使用して Unity ゲームをパワーアップさせることができます。

Unity プロジェクトに Firebase を簡単に組み込めることを示すために、サンプルゲーム「MechaHamster」を作成しました。このゲームは、GitHubApp StoreGoogle Play ストアからダウンロードできます。

MechaHamster(GitHub)

MechaHamster(App Store)

MechaHamster(Play ストア)


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

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

前提条件

  • Unity 2017.4 以降をインストールします。これより前のバージョンも互換性がある可能性がありますが、積極的にはサポートされません。

  • (iOS のみ)以下をインストールします。

    • Xcode 9.4.1 以降
    • CocoaPods 1.9.0 以降
  • Unity プロジェクトが次の要件を満たしていることを確認します。

    • iOS の場合 - ターゲットが iOS 10 以降であること
    • Android の場合 - ターゲットが API レベル 16 (Jelly Bean)以降であること
  • 物理デバイスを設定するか、エミュレータを使用してアプリを実行します。

    • iOS の場合 - 物理的 iOS デバイスをセットアップするか、iOS シミュレータを使用します。

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

Unity プロジェクトがまだない方で Firebase プロダクトを試してみたい場合は、クイックスタート サンプルをダウンロードしてください。

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

Unity プロジェクトに Firebase を追加する前に、Unity プロジェクトに接続するための Firebase プロジェクトを作成する必要があります。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。

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

Firebase プロジェクトに接続するアプリやゲームを登録できます。

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

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

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

  3. 登録する Unity プロジェクトのビルド ターゲットを選択するか、両方のターゲットを同時に登録することもできます。

  4. Unity プロジェクトのプラットフォーム固有の ID を入力します。

    • iOS の場合 - Unity プロジェクトの iOS ID を [iOS バンドル ID] に入力します。

    • Android の場合 - Unity プロジェクトの Android ID を [Android パッケージ名] に入力します。「パッケージ名」と「アプリケーション ID」は、しばしば同じ意味で使用されます。

  5. (省略可)Unity プロジェクトのプラットフォーム固有のニックネームを入力します。
    これらのニックネームは内部用の簡便な ID であり、Firebase コンソールにのみ表示されます。

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

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

  1. Firebase コンソールの設定ワークフローでプラットフォーム固有の Firebase 構成ファイルを取得します。

    • iOS の場合 - [GoogleService-Info.plist をダウンロード] をクリックします。

    • Android の場合 - [google-services.json をダウンロード] をクリックします。

  2. Unity プロジェクトで [Project] ウィンドウを開き、構成ファイルを Assets フォルダに移動します。

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

ステップ 4: Firebase Unity SDK を追加する

  1. Firebase コンソールで [Firebase Unity SDK をダウンロード] をクリックし、適切な場所で SDK を解凍します。

    • Firebase Unity SDK はいつでも再ダウンロードできます。

    • Firebase Unity SDK はプラットフォーム固有ではありません。

  2. 開いている Unity プロジェクトで、[Assets] > [Import Package] > [Custom Package] を選択します。

  3. 解凍した SDK から、アプリで使用するサポートされている Firebase プロダクトを選択します。

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

    • Google アナリティクス用の Firebase パッケージを追加: FirebaseAnalytics.unitypackage
    • アプリで使用する Firebase プロダクトのパッケージを追加します。たとえば、Firebase Authentication と Firebase Realtime Database を使用する場合:
      FirebaseAuth.unitypackage および FirebaseDatabase.unitypackage を追加します。

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

    アプリで使用する Firebase プロダクトのパッケージを追加します。たとえば、Firebase Authentication と Firebase Realtime Database を使用する場合:
    FirebaseAuth.unitypackage および FirebaseDatabase.unitypackage を追加します。

  4. [Import Unity Package] ウィンドウで [Import] をクリックします。

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

ステップ 5: Google Play 開発者サービスの要件を確認する

Android 向け Firebase Unity SDK を使用するには、最新の Google Play 開発者サービスが必要です。

アプリケーションの先頭に次のコードを追加します。SDK で他のメソッドを呼び出す前に Google Play 開発者サービスを確認し、必要であれば、Firebase Unity SDK で必要とされるバージョンに更新します。

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Create and hold a reference to your FirebaseApp,
    // where app is a Firebase.FirebaseApp property of your application class.
       app = Firebase.FirebaseApp.DefaultInstance;

    // Set a flag here to indicate whether Firebase is ready to use by your app.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

これで設定は完了です。Unity プロジェクトは Firebase を使用するように登録、構成されました。

既知の問題

Unity 2017.x 以降を使用している場合の .NET 互換性

Firebase では、Unity 2017 以降の実験的ビルド オプションとして .NET 4.x がサポートされています。Firebase のプラグインでは、Parse SDK のコンポーネントを使用して .NET 4.x のクラスを提供していますが、その中の一部のクラスはそれ以前のバージョンの .NET のものです。

したがって、Firebase Unity SDK バージョン 5.4.0 以降では、Firebase Unity SDK の dotnet3 および dotnet4 ディレクトリに .NET 3.x または .NET 4.x と互換性のあるプラグインが提供されています。

プロジェクトで有効な .NET バージョンと互換性がない Firebase プラグインをインポートすると、Parse SDK によって実装された .NET フレームワークの一部の型でコンパイル エラーが発生します。

.NET 3.x を使用している場合に、コンパイル エラーを解決するには次のようにします。

  1. すべてのプラットフォームで次の DLL を削除または無効にします。
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. すべてのプラットフォームで次の DLL を有効にします。
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

.NET 4.x を使用している場合に、コンパイル エラーを解決するには次のようにします。

  1. すべてのプラットフォームで次の DLL を削除または無効にします。
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. すべてのプラットフォームで次の DLL を有効にします。
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

別の Firebase プラグインをインポートする場合:

  • Unity プロジェクトで [Assets] > [Play Services Resolver] > [Version Handler] > [Update] を選択し、プロジェクト用に正しい DLL を有効にします。

.NET 4.x プロジェクトでの Unity 2017.1 IL2CPP のコンパイル

Firebase では、Unity 2017 以降の実験的ビルド オプションとして .NET 4.x がサポートされています。Firebase のプラグインでは、Parse SDK のコンポーネントを使用して .NET 4.x のクラスを提供していますが、その中の一部のクラスはそれ以前のバージョンの .NET のものです。

そのため、Firebase Unity SDK バージョン 5.4.0 以降では、Parse 型(たとえば、System.Threading.Tasks.Task の Parse 実装)を .NET Framework に転送する型転送 DLL が提供されています。残念ながら、Unity 2017.1.x に付属する IL2CPP(C# を C++ に変換するトランスパイラ)は型転送の DLL を適切に処理しないため、以下のようなビルドエラーが発生します。

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

現時点で、Unity 2017.1 における .NET 4.x IL2CPP のビルドエラーを回避できる方法はないため、Unity 2017.2 以降にアップグレードして、IL2CPP でコンパイルされたプロジェクトで .NET 4.x を使用する必要があります。

Unity 2017.2 のネットワーキング

Firebase Realtime Database は .NET ネットワーキング スタックを使用して TLS ネットワーク接続を構築します。.NET 4.6 を使用している場合は、Unity 2017.2 の TLS 機能が正しく動作しないと、エディタとデスクトップで Realtime Database プラグインにおけるエラーが発生します。

この問題を回避できる方法はないため、Unity の別のバージョン(2017.1 や 2017.3 など)を使用する必要があります。

Unity 2020 に Firebase Android 構成ファイルがありません。

Gradle ビルドをカスタマイズする機能を持たない Unity のバージョンをサポートするために、Firebase エディタツールは Assets/Plugins/Android/Firebase/res/values/google-services.xml を Android リソースとして生成し、Android ビルドにパッケージ化します。Firebase SDK はこれを使用して、デフォルトの FirebaseApp インスタンスを初期化できます。

Unity 2020 では、すべての Android リソースは .androidlib の接尾辞が付いたディレクトリに存在する必要があります。プロジェクトで Assets/Plugins/Android/Firebase ディレクトリを生成する Firebase SDK を使用している場合は、ファイル名を Assets/Plugins/Android/Firebase.androidlib に変更します。AndroidManifest.xmlproject.propertiesres/values/google-services.xml が含まれていることを確認します。

Android アプリのビルド時のシングル dex に関する問題

Android アプリのビルド時、シングル dex ファイルに関連するビルドエラーが発生する場合があります。プロジェクトで Gradle ビルドシステムを使用するように構成されている場合は、次のようなエラー メッセージが表示されます。

Cannot fit requested classes in a single dex file.

Dalvik 実行可能ファイル(.dex)は、クラス定義のセットとそれに関連する Android アプリの付属データ(.apk)を保持するために使用されます。1 つのシングル dex ファイルは最大で 65,536 のメソッドを参照できます。プロジェクト内のすべての Android ライブラリのメソッドの総数がこの上限を超えると、ビルドは失敗します。

Unity は 2017.2 で軽量化を導入しました。これは、Proguard(または Unity の一部のバージョンでは他のツール)を使用して未使用のコードを取り除き、シングル dex ファイルで参照されるメソッドの総数を減らすことができるものです。このオプションは [Player Settings] > [Android] > [Publishing Settings] > [Minify] にあります。これらのオプションは Unity のバージョンによって異なる可能性があるため、Unity の公式ドキュメントをご覧ください。

参照されているメソッドの数がこの上限を超えている場合は、multidex を有効にするという方法もあります。Unity でこれを行う方法はいくつかあります。

  • Player SettingsCustom Gradle Template が有効になっている場合は、mainTemplate.gradle を変更します。
  • Android Studio を使用してエクスポートされたプロジェクトをビルドする場合は、モジュール レベルの build.gradle ファイルを変更します。

詳しくは、Multidex ユーザーガイドをご覧ください。

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

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

  1. モバイル プラットフォームの場合と同じ手順に沿って、デスクトップ プラットフォームの Unity プロジェクトを設定します(上記のアプリを Firebase プロジェクトに登録するから開始)。

  2. Unity IDE で Unity プロジェクトを実行するか、デスクトップ用に Unity プロジェクトをビルドします。

  3. (省略可)Unity プロジェクトを編集モードで実行します。

    Firebase Unity SDK は Unity の編集モードでも実行できるため、エディタのプラグインで使用できます。

    1. エディタで使用される FirebaseApp を作成する場合、デフォルトのインスタンスは使用しません。

    2. 代わりに FirebaseApp.Create() 呼び出しに対して一意の名前を指定します。

      Unity IDE で使用されるインスタンスと Unity プロジェクトで使用されるインスタンスの間のオプションの競合を避けるために、この操作は重要です。

サポートされている Firebase プロダクト

Unity Firebase ライブラリの詳細については、リファレンス ドキュメントをご覧ください。

iOS および Android の Firebase Unity SDK では、次の Firebase プロダクトがサポートされています。

Firebase プロダクト Unity パッケージ
AdMob AdMob Unity プラグインで個別に配信
アナリティクス FirebaseAnalytics.unitypackage
Authentication FirebaseAuth.unitypackage
Cloud Firestore(ベータ版) FirebaseFirestore.unitypackage
Cloud Functions FirebaseFunctions.unitypackage
Cloud Messaging FirebaseMessaging.unitypackage
(推奨)FirebaseAnalytics.unitypackage
Cloud Storage FirebaseStorage.unitypackage
Crashlytics FirebaseCrashlytics.unitypackage
(推奨)FirebaseAnalytics.unitypackage
Dynamic Links FirebaseDynamicLinks.unitypackage
(推奨)FirebaseAnalytics.unitypackage
Realtime Database FirebaseDatabase.unitypackage
Remote Config FirebaseRemoteConfig.unitypackage
(推奨)FirebaseAnalytics.unitypackage

サポートされている Firebase プロダクト(デスクトップ)

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

Firebase プロダクト(デスクトップ) Unity パッケージ
Authentication FirebaseAuth.unitypackage
Cloud Functions FirebaseFunctions.unitypackage
Cloud Firestore FirebaseFirestore.unitypackage
Cloud Storage FirebaseStorage.unitypackage
Realtime Database FirebaseDatabase.unitypackage
Remote Config FirebaseRemoteConfig.unitypackage

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

次のステップ