このページでは、Firebaseの使用時に発生する可能性のあるUnity固有の問題のヒントとトラブルシューティングを提供します。
他の課題がありますか、または以下に概説されている問題が表示されませんか?より多くの汎Firebaseまたは製品固有のFAQについては、メインのFirebaseFAQを確認してください。
Unity2017.x以降を使用する場合の.NETの互換性
Firebaseは、Unity2017以降の実験的なビルドオプションとして.NET4.xをサポートしています。 Firebaseプラグインは、 Parse SDKのコンポーネントを使用して、以前のバージョンの.NETでいくつかの.NET4.xクラスを提供します。
したがって、Firebase Unity SDKバージョン5.4.0
以降では、FirebaseUnitySDKのdotnet3
およびdotnet4
ディレクトリにある.NET3.xまたは.NET4.xのいずれかと互換性のあるプラグインが提供されます。
プロジェクトで有効になっている.NETバージョンと互換性のないFirebaseプラグインをインポートすると、ParseSDKによって実装されている.NETFrameworkの一部のタイプからのコンパイルエラーが表示されます。
.NET 3.xを使用している場合、コンパイルエラーを解決するには:
- すべてのプラットフォームで次のDLLを削除または無効にします。
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- すべてのプラットフォームで次のDLLを有効にします。
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
.NET 4.xを使用している場合、コンパイルエラーを解決するには:
- すべてのプラットフォームで次のDLLを削除または無効にします。
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- すべてのプラットフォームで次のDLLを有効にします。
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
別のFirebaseプラグインをインポートする場合:
- Unityプロジェクトで、[アセット]>[ Playサービスリゾルバー]>[バージョンハンドラー] >[更新]に移動して、プロジェクトの正しいDLLを有効にします。
Unity 2017.1.NET4.xプロジェクトでのIL2CPPコンパイル
Firebaseは、Unity2017以降の実験的なビルドオプションとして.NET4.xをサポートしています。 Firebaseプラグインは、 Parse SDKのコンポーネントを使用して、以前のバージョンの.NETでいくつかの.NET4.xクラスを提供します。
したがって、Firebase Unity SDKバージョン5.4.0以降では、型を解析する型転送DLL(たとえば、 System.Threading.Tasks.Task
の解析実装)を.NETFrameworkに転送します。残念ながら、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>
現在、Unity2017.1で.NET4.x IL2CPPビルドエラーに利用できる回避策はありません。そのため、IL2CPPでコンパイルされたプロジェクトで.NET 4.xを使用するには、Unity2017.2以降にアップグレードする必要があります。
Unity2017.2ネットワーキング
Firebase Realtime Databaseは、.NETネットワークスタックを使用してTLSネットワーク接続を作成します。 Unity2017.2で.NET4.6を使用するとTLS機能が壊れ、RealtimeDatabaseプラグインがエディターとデスクトップで失敗します。
この問題の回避策はないため、バージョン2017.1や2017.3などの別のバージョンのUnityを使用する必要があります。
Unity2020にFirebaseAndroid設定ファイルがありません
Gradleビルドをカスタマイズする機能を持たないバージョンのUnityをサポートするために、Firebaseエディターツールは、にパッケージ化されるAndroidリソースとしてAssets/Plugins/Android/Firebase/res/values/google-services.xml
を生成します。 Androidビルド。これにより、FirebaseSDKはこれを使用してデフォルトのFirebaseAppインスタンスを初期化できます。
Unity 2020では、すべてのAndroidリソースが.androidlib
サフィックスの付いたディレクトリにある必要があります。プロジェクトでAssets/Plugins/Android/Firebase
ディレクトリを生成するFirebaseSDKを使用している場合は、名前をAssets/Plugins/Android/Firebase.androidlib
に変更します。 AndroidManifest.xml
、 project.properties
、 res/values/google-services.xml
が含まれていることを確認してください。
Androidアプリの構築中のシングルデックスの問題
Androidアプリのビルド中に、単一のdexファイルを持つことに関連するビルドエラーが発生する場合があります。プロジェクトがGradleビルドシステムを使用するように構成されている場合、エラーメッセージは次のようになります。
Cannot fit requested classes in a single dex file.
Dalvik Executable( .dex
)ファイルは、Androidアプリケーション( .apk
)のクラス定義とそれに関連する付属データのセットを保持するために使用されます。単一のdexファイルは、65,536個のメソッドへの参照に制限されています。プロジェクト内のすべてのAndroidライブラリのメソッドの総数がこの制限を超えると、ビルドは失敗します。
Unityは2017.2でMinificationを導入しました。これは、Proguard(またはUnityの一部のバージョンでは他のツール)を使用して未使用のコードを取り除き、単一のdexファイルで参照されるメソッドの総数を減らすことができます。このオプションは、 [プレーヤーの設定]>[Android]>[公開の設定]>[縮小]にあります。 Unityのバージョンによってオプションが異なる場合があるため、Unityの公式ドキュメントを参照してください。
参照されるメソッドの数がまだ制限を超えている場合、別のオプションはmultidex
を有効にすることです。 Unityでこれを実現する方法は複数あります。
-
Player Settings
の[Custom Gradle Template
]が有効になっている場合は、mainTemplate.gradle
を変更します。 - Android Studioを使用してエクスポートされたプロジェクトをビルドする場合は、モジュールレベルの
build.gradle
ファイルを変更します。
詳細については、multidexユーザーガイドをご覧ください。
Unity2017およびUnity2018(Firebase Unity SDK 8.0.0以降)でのAndroidビルドのJava8サポートと脱糖
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
この変更は、Unity2017およびUnity2018のAndroidビルドにのみ影響します。 Unityの新しいバージョンでは、デフォルトでcompileOptions
ブロックがgradleビルドファイルに追加されます。 Unity2017およびUnity2018でこのビルドエラーを修正するには、次のいずれかを実行します。
compileOptions
ブロックをgradleテンプレートに追加します。- ビルドシステムとして
Gradle
を使用します。 -
Player Settings
でCustom Gradle Template
を有効にします。 mainTemplate.gradle
(またはAndroid Studio用のプロジェクトをエクスポートする場合はモジュールレベルのbuild.gradle
)に次の行を追加します。android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- ビルドシステムとして
または、AndroidプロジェクトのminSdkVersionを26以上に増やします。
Androidのトラブルシューティング-ビルドの失敗の脱糖も参照してください。
Cocoapodsを使用してiOS用にビルドする際の問題
iOS用にビルドする場合、Cocoapodのインストールが失敗し、言語ロケールまたはUTF-8エンコーディングに関するエラーが発生する場合があります。現在、この問題を回避する方法はいくつかあります。
ターミナルから、
pod install
を直接実行し、結果のxcworkspaceファイルを開きます。Cocoapodsのバージョンを1.10.2にダウングレードします。この問題は、バージョン1.11以降でのみ発生します。
~/.bash_profile
または同等のものに、export LANG=en_US.UTF-8
を追加します
FirebaseUnitySDKのバージョンを更新する方法
Firebase Unity SDKのバージョンを更新するプロセスは、最初にインポートされた方法によって異なります。 2つの代替インポート方法は次のとおりです。
- プロジェクトの
Assets/
ディレクトリの下に.unitypackage
ファイルをインポートする - Unity Package Manager (UPM)を使用したインポート
- これは、Unity2018.4以降でパッケージを管理するための推奨される方法です。
- この方法を使用すると、将来のバージョンの更新が簡単になり、
Assets/
ディレクトリがよりクリーンになります。
Unityプロジェクトでは、すべてのFirebaseパッケージを管理するために1つのインポート方法のみを使用する必要があります。以下の手順は、個々のパッケージのバージョンを更新するだけでなく、必要に応じて、パッケージ管理をUPM(推奨されるインポート方法)に移行するためにも使用できます。
FirebaseパッケージがAssets/
ディレクトリにある場合、SDKバージョンを更新するための2つのオプションがあります。
オプション1 (推奨) :UPMを使用するように移行します(Unity 2018.4以降で利用可能)
- Firebaseが提供する手順に従って、パッケージ管理をUPMに移行します。
- この方法では、
.unitypackage
ワークフローを引き続き使用するよりも多くの初期設定が必要ですが、その後のSDKバージョンの更新が容易になります。
オプション2 :引き続き
.unitypackage
ファイルを使用してAssets/
ディレクトリにインポートします更新されたバージョンの各パッケージをインポートします。
Firebase Webサイトからfirebase_unity_sdk.zipをダウンロードする場合は、すべての
.unitypackages
を正しいdotnet
フォルダーからインポートしてください。- Unity 2019以降を使用している場合は、
dotnet4
フォルダーからインポートします。 - それ以外の場合は、プレーヤー設定で[スクリプトランタイムバージョン]を選択し、「。NET 3.x」に設定されている場合は、
dotnet3
フォルダーからインポートします。
- Unity 2019以降を使用している場合は、
以前にインポートされたパッケージバージョンの上書きは、External Dependency Manager(Firebase
.unitypackages
をインポートすると自動的に含まれる)によって自動的に処理される必要があります。ただし、この自動プロセスが失敗した場合にのみ、次のフォルダを手動で削除してから、上記のインポート手順を再試行する必要があります。
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
FirebaseパッケージがUPMによって管理されている場合は、新しいSDKバージョンを.tgz
としてインポートします。このインポートにより、以前のバージョンが自動的に上書きされます。