Unity と Firebase のトラブルシューティングとよくある質問

このページでは、Firebase の使用時に発生する可能性のある Unity 固有の問題に関するヒントとトラブルシューティングについて説明します。

その他の課題がある場合や、該当する問題が以下で見つからない場合は、メインの Firebase のよくある質問で、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 2017 と Unity 2018 での Android ビルドの Java 8 サポートと脱糖(Firebase Unity SDK 8.0.0 以降)

2021 年 5 月(Firebase BoM v28.0.0)、すべての Android ライブラリで Firebase の脱糖が無効になりました(リリースノートをご覧ください)。Firebase Unity SDK(8.0.0 以上)を使用して Android アプリをビルドすると、次のビルドエラーが表示されることがあります。

> Error while dexing.
 The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle

この変更は、Unity 2017 と Unity 2018 の Android ビルドのみに影響します。これより新しいバージョンの Unity では、Gradle ビルドファイルにデフォルトで compileOptions ブロックが追加されます。Unity 2017 と Unity 2018 でこのビルドエラーを修正するには、次のいずれかを行います。

  • Gradle テンプレートに compileOptions ブロックを追加します。

    1. ビルドシステムとして Gradle を使用します。
    2. Player SettingsCustom Gradle Template を有効にします。
    3. mainTemplate.gradle(Android Studio 用のプロジェクトをエクスポートする場合はモジュール レベルの build.gradle)に次の行を追加します。

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • または、Android プロジェクトの minSdkVersion を 26 以上に増やします。

Android のトラブルシューティング - 脱糖のビルドエラーもご覧ください。

CocoaPods を使用して iOS 用にビルドする際の問題

iOS 用にビルドする際、言語ロケールまたは UTF-8 エンコードに関するエラーが発生して CocoaPods のインストールが失敗することがあります。現在、この問題を回避するにはいくつかの方法があります。

  • ターミナルから pod install を直接実行し、出力された xcworkspace ファイルを開く。

  • CocoaPods のバージョンを 1.10.2 にダウングレードする(この問題が発生するバージョンは 1.11 以降のため)。

  • ~/.bash_profile または同等のファイルに、export LANG=en_US.UTF-8 を追加する。

Firebase Unity SDK のバージョンを更新する方法

Firebase Unity SDK のバージョンを更新するプロセスは、最初にインポートされた方法によって異なります。次の 2 つのインポート方法があります。

  • プロジェクトの Assets/ ディレクトリに .unitypackage ファイルをインポートする
  • Unity Package Manager(UPM)を使用してインポートする
    • これは、Unity 2018.4 以降のパッケージを管理する場合に推奨される方法です。
    • この方法を使用すると、今後のバージョンの更新がより簡単になり、Assets/ ディレクトリの内容がすっきりします。

Unity プロジェクトでは、いずれか 1 つのインポート方法だけを使用してすべての Firebase パッケージを管理してください。以下の手順では、個々のパッケージのバージョンを更新する方法に加えて、必要に応じてパッケージ管理を UPM に移行する方法についても説明しています(UPM は推奨されるインポート方法です)。