2022 年 10 月 18 日に開催される Firebase Summit に、直接会場で、またはオンラインでご参加ください。Firebase を使用してアプリ開発を加速させ、自信を持ってアプリをリリースし、簡単にスケールする方法をご紹介します。 今すぐ申し込む

UnityとFirebaseのトラブルシューティングとFAQ

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

他の課題がありますか、または以下に概説されている問題が表示されませんか? Firebase 全般または製品固有の FAQ については、メインの Firebase FAQを確認してください。

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

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

したがって、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 でいくつかの .NET 4.x クラスを提供します。

そのため、Firebase Unity SDK バージョン 5.4.0 以降では、Parse 型 ( System.Threading.Tasks.Taskの Parse 実装など) を .NET フレームワークに転送する型転送 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 ビルド エラーに対する回避策はありません。そのため、IL2CPP でコンパイルされたプロジェクトで .NET 4.x を使用するには、Unity 2017.2 以降にアップグレードする必要があります。

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 Executable ( .dex ) ファイルは、一連のクラス定義とそれに関連する Android アプリケーション ( .apk ) の付属データを保持するために使用されます。 1 つの dex ファイルは、65,536 メソッドの参照に制限されています。プロジェクト内のすべての Android ライブラリのメソッドの合計数がこの制限を超えると、ビルドは失敗します。

Unity は 2017.2 でMinificationを導入しました。これは、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)、Firebase はすべての Android ライブラリの脱糖を無効にしました (リリース ノートを参照)。 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 のトラブルシューティング - desugar ビルドの失敗も参照してください。

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

iOS 用にビルドする場合、言語ロケールまたは UTF-8 エンコーディングに関するエラーで Cocoapod のインストールが失敗する場合があります。現在、この問題を回避する方法はいくつかあります。

  • ターミナルから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 プロジェクトでは、すべての Firebase パッケージを管理するために 1 つのインポート方法のみを使用する必要があります。以下の手順は、個々のパッケージのバージョンを更新するだけでなく、必要に応じてパッケージ管理を UPM (推奨されるインポート方法) に移行するためにも使用できます。