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 5.3 以降をインストールします。

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

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

    • iOS の場合 - ターゲットが iOS 8 以降であること
    • 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 を追加する

Unity Package Manager を使用して Unity プロジェクトにサポートされている Firebase プロダクトを追加できます。また、SDK を手動でインストールすることもできます。

Unity Package Manager

Unity 2018.4 以降、および .NET 4.x または .NET Standard 2.0 を使用している場合、Unity Package Manager を使用して Firebase SDK コンポーネントをインストールできます。

  1. Unity プロジェクトに Game Package Registry by Google を追加します。

    • Firebase SDK と EDM4U(旧称 Play Services Resolver)をインポートしたことがない場合は、次のブロックを Packages/manifest.json に手動で追加できます。

      "scopedRegistries": [
        {
          "name": "Game Package Registry by Google",
          "url": "https://unityregistry-pa.googleapis.com",
          "scopes": [
            "com.google"
          ]
        }
      ]
      

      Facebook SDK など、他の SDK の .unitypackage には EDM4U が含まれることがあります。Assets/ExternalDependencyManager または Assets/PlayServicesResolver フォルダが存在するかどうかを確認します。これらのフォルダが存在する場合は、Unity Package Manager で Firebase SDK をインストールする前に、これらのフォルダを削除します。

    • 既存の SDK を移行する場合や、よりインタラクティブな方法を希望する場合は、最新の External Dependency Manager for Unity(EDM4U)をインポートします。

      Unity Package Manager Resolver から、プロジェクトに Game Package Registry by Google を追加するよう求めるメッセージが表示されます。レジストリを選択して、[Add Selected Registries] ボタンをクリックします。

      • EDM4U は、現在の Unity プロジェクト フォルダの Packages/manifest.json にレジストリを追加します。

      • また、[Assets] > [External Dependency Manager] > [Unity Package Manager Resolver] > [Add Registries] または [Window] > [Google] > [Game Package Registry] > [Add To Project] メニュー オプションを使用して、後でこのレジストリを手動で追加することもできます。

  2. .unitypackage からインポートした既存の Firebase パッケージと EDM4U パッケージを Unity Package Manager に移行します。これは、次のいずれかの方法で行えます。

    • レジストリが EDM4U によって追加されると、「Migrating Packages」というタイトルのダイアログが表示されます。このダイアログには、Unity Package Manager でインストール可能なすべてのパッケージが一覧表示されます。すべてのボタンを選択して [Apply] ボタンをクリックすることをおすすめします。

    • [Assets] > [External Dependency Manager] > [Unity Package Manager Resolver] > [Migrate Packages] メニュー オプションを使用して、後でこのダイアログを手動で表示することもできます。

    • 次の手順で、.unitypackage を介してインポートされたすべてのパッケージを手動で移行することもできます。

      1. Assets フォルダから Firebase Unity SDK と EDM4U の両方を削除します。EDM4U では、[Assets] > [External Dependency Manager] > [Version Handler] > [Uninstall Managed Packages] メニュー オプションを使用して、マネージド パッケージをアンインストールできます。[all Firebase SDKs] と [External Dependency Manager] を選択して、[Uninstall Selected Packages] をクリックします。

        • また、[Assets] フォルダから SDK を手動で削除することもできます。
      2. [Window] > [Package Manager] を選択し、「Firebase」を検索して、Unity Package Manager で Firebase Unity SDK コンポーネントをインストールします。Firebase Unity SDK コンポーネントは、このインターフェースを介してインストール、アップグレード、削除できます。

  3. これで、[Window] > [Package Manager] を選択して、Unity Package Manager で任意の Firebase Unity SDK コンポーネントまたは Google パッケージを検索してインストールできるようになりました。これらのコンポーネントはすべて、このインターフェースを介してインストール、アップグレード、削除できます。

手動インストール

  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 が含まれていることを確認します。

Unity Package Manager を使用する場合のインストールの競合

1 つのパッケージは複数のソースからインストールできます。たとえば、External Dependency Manager for Unity(EDM4U、旧称 Play Service Resolver または Unity Jar Resolver)は、次のいずれかの方法でインストールできます。

  • External Dependency Manager .unitypackage をインポートする。
  • .unitypackageEDM4U を含む Firebase SDK や他の SDK をインポートする。
  • Unity Package Manager から External Dependency Manager をインストールする
  • Unity Package Manager から、依存関係として EDM4U を設定する Firebase SDK またはその他の SDK をインストールする。

EDM4U.unitypackageUnity Package Manager によって同時にインストールされると、インストールの競合が発生し、Unity により、GUID の競合またはシンボルの競合に関するエラーが表示される場合があります。EDM4U では現在、こうした状況に対する解決策が提供されていません。その場合は、次の回避策をお試しください。

  • 以前に Firebase と EDM4UUnity Package Manager に移行していて、.unitypackageEDM4U を含む別の SDK(Google 広告や Facebook SDK)をインポートする場合は、Assets/ExternalDependencyManager および / または Assets/PlayServicesResolver フォルダを削除するだけです。
  • 最初に Assets フォルダから削除する前に、Unity Package Manager を介して EDM4U を誤ってインストールした場合は、次の手順で競合を解決します。
    1. Assets/ExternalDependencyManager および / または Assets/PlayServicesResolver フォルダを削除します。
    2. Unity Package Manager からすべての Firebase パッケージと EDM4U パッケージをアンインストールします。
    3. UPM から、必要な Firebase パッケージと EDM4U パッケージをすべて再インストールします。

Unity 2018 の Unity Package Manager を使用してインストールされた Firebase に関する問題

Unity 2018 で Unity Package Manager を介して Firebase をインストールすると、EDM4U が Firebase の Android と iOS のネイティブの依存関係の一部を検出できなくなる場合があります。これは、依存関係としてインストールされたパッケージ内のファイルが Unity の AssetDatabase に登録されていないためです。よくある問題は、DllNotFoundException のために Android で FirebaseApp を作成できないというものです。

たとえば、Realtime DatabaseUnity Package Manager を介してインストールされている場合、AuthFirebase App (Core) の両方が依存関係として自動的にインストールされます。ただし、EDM4U は、Unity 2018 の AssetDatabase に登録されていないため、Android と iOS のネイティブ依存関係を含む AuthDependencies.xmlAppDependencies.xml を検出できません。そのため、Android や iOS のビルドには一部のネイティブ ライブラリが含まれていない場合があります。

この問題を回避するには、すべての Firebase パッケージが Unity Package Manager を介して明示的にインストールされていることを確認します。たとえば、Realtime Database をインストールする場合は、Unity Package Manager から AuthFirebase App (Core)install をクリックします。

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 向けのビルドを便利にするために提供されています。このため、デスクトップを対象としてコードを条件付きでコンパイルする必要はありません。

次のステップ