Pemecahan Masalah & FAQ untuk Unity dan Firebase

Halaman ini menawarkan tips dan pemecahan masalah untuk masalah khusus Unity yang mungkin Anda alami saat menggunakan Firebase.

Ada kesulitan lain atau masalah yang Anda alami tidak dijelaskan di bawah ini? Pastikan Anda membaca FAQ Firebase utama untuk mengetahui lebih lanjut FAQ lintas Firebase atau khusus produk.

Kompatibilitas .NET saat menggunakan Unity 2017.x dan yang lebih baru

Firebase mendukung .NET 4.x sebagai opsi build eksperimental pada Unity 2017 dan yang lebih baru. Plugin Firebase menggunakan komponen Parse SDK untuk menyediakan beberapa class .NET 4.x pada .NET versi sebelumnya.

Oleh sebab itu, Firebase Unity SDK versi 5.4.0 dan yang lebih baru menyediakan plugin yang kompatibel dengan .NET 3.x atau .NET 4.x dalam direktori dotnet3 serta dotnet4 dari Firebase Unity SDK.

Jika Anda mengimpor plugin Firebase yang tidak kompatibel dengan versi .NET yang diaktifkan di project Anda, Anda akan menemukan error kompilasi dari beberapa jenis di framework .NET yang diimplementasikan oleh Parse SDK.

Untuk mengatasi error kompilasi, jika Anda menggunakan .NET 3.x:

  1. Hapus atau nonaktifkan DLL berikut untuk semua platform:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Aktifkan DLL berikut untuk semua platform:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Untuk mengatasi error kompilasi, jika Anda menggunakan .NET 4.x:

  1. Hapus atau nonaktifkan DLL berikut untuk semua platform:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Aktifkan DLL berikut untuk semua platform:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Jika Anda mengimpor plugin Firebase lain:

  • Di project Unity Anda, buka Assets > Play Services Resolver > Version Handler > Update untuk mengaktifkan DLL yang benar untuk project Anda.

Kompilasi IL2CPP Unity 2017.1 di project .NET 4.x

Firebase mendukung .NET 4.x sebagai opsi build eksperimental pada Unity 2017 dan yang lebih baru. Plugin Firebase menggunakan komponen Parse SDK untuk menyediakan beberapa class .NET 4.x pada .NET versi sebelumnya.

Oleh sebab itu, Firebase Unity SDK versi 5.4.0 dan yang lebih baru menyediakan DLL penerusan jenis yang meneruskan jenis Parse (misalnya, penerapan Parse dari System.Threading.Tasks.Task) ke framework .NET. Sayangnya, IL2CPP (transpiler yang mengonversi C# menjadi C++) yang disertakan di Unity 2017.1.x tidak memproses secara benar DLL penerusan jenis, sehingga menghasilkan error build yang menyerupai berikut ini:

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

Saat ini, tidak tersedia solusi untuk error build IL2CPP .NET 4.x di Unity 2017.1, jadi Anda harus mengupgrade ke Unity 2017.2 atau yang lebih baru untuk menggunakan .NET 4.x dalam project yang dikompilasi dengan IL2CPP.

Networking Unity 2017.2

Firebase Realtime Database membuat koneksi jaringan TLS menggunakan stack networking .NET. Fungsionalitas TLS akan rusak di Unity 2017.2 jika menggunakan .NET 4.6, yang menyebabkan kegagalan plugin Realtime Database di editor dan di desktop.

Masalah ini belum ada solusinya, jadi Anda harus menggunakan Unity versi berbeda, misalnya versi 2017.1 atau 2017.3.

File konfigurasi Android Firebase tidak ada di Unity 2020

Untuk mendukung versi Unity yang tidak memiliki kemampuan untuk menyesuaikan build Gradle, alat editor Firebase menghasilkan Assets/Plugins/Android/Firebase/res/values/google-services.xml sebagai resource Android yang akan dikemas dalam build Android. Jadi, Firebase SDK dapat menggunakannya untuk menginisialisasi instance FirebaseApp default.

Di Unity 2020, semua resource Android harus berada di direktori dengan akhiran .androidlib. Jika project Anda menggunakan Firebase SDK yang menghasilkan direktori Assets/Plugins/Android/Firebase, ganti namanya menjadi Assets/Plugins/Android/Firebase.androidlib. Pastikan file tersebut berisi AndroidManifest.xml, project.properties, dan res/values/google-services.xml.

Masalah dengan dex tunggal saat mem-build aplikasi Android

Saat mem-build aplikasi Android, Anda mungkin mengalami kegagalan build yang terkait dengan file dex tunggal. Pesan error akan terlihat seperti berikut, jika project Anda dikonfigurasi untuk menggunakan sistem build Gradle.

Cannot fit requested classes in a single dex file.

File Dalvik Executable (.dex) digunakan untuk menyimpan sekumpulan definisi class dan data tambahan yang terkait untuk aplikasi Android (.apk). File dex tunggal dibatasi untuk merujuk ke maksimal 65.536 metode. Build akan gagal jika jumlah total metode dari semua library Android di project Anda melampaui batas ini.

Unity memperkenalkan Minifikasi pada versi 2017.2, yang menggunakan Proguard (atau alat lain di beberapa versi Unity) untuk menghapus kode yang tidak terpakai, yang dapat mengurangi jumlah total metode yang dirujuk dalam file dex tunggal. Opsi ini dapat ditemukan di Player Settings > Android > Publishing Settings > Minify. Opsinya mungkin berbeda pada versi Unity yang berbeda. Karena itu, baca dokumentasi resmi Unity.

Jika jumlah metode yang direferensikan masih melebihi batas, opsi lainnya adalah mengaktifkan multidex. Ada beberapa cara untuk melakukan ini di Unity:

  • Jika Custom Gradle Template dalam Player Settings diaktifkan, ubah mainTemplate.gradle.
  • Jika Anda menggunakan Android Studio untuk mem-build project yang diekspor, ubah file build.gradle level modul.

Detail selengkapnya dapat ditemukan di panduan pengguna multidex.

Dukungan dan desugaring Java 8 untuk build Android pada Unity 2017 dan Unity 2018 (Firebase Unity SDK 8.0.0 dan yang lebih tinggi)

Pada bulan Mei 2021 (Firebase BoM v28.0.0), Firebase menonaktifkan desugaring untuk semua library Android-nya (lihat catatan rilis). Saat mem-build aplikasi Android dengan Firebase Unity SDK (8.0.0 dan yang lebih tinggi), Anda mungkin melihat error build berikut:

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

Perubahan ini hanya memengaruhi build Android pada Unity 2017 dan Unity 2018. Versi Unity yang lebih baru menambahkan blok compileOptions secara default dalam file build gradle. Untuk memperbaiki error build ini pada Unity 2017 dan Unity 2018, lakukan salah satu langkah berikut:

  • Tambahkan blok compileOptions ke template gradle Anda:

    1. Gunakan Gradle sebagai sistem build.
    2. Aktifkan Custom Gradle Template di bagian Player Settings.
    3. Tambahkan baris berikut ke mainTemplate.gradle (atau build.gradle level modul jika mengekspor project untuk Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Atau, tingkatkan minSdkVersion untuk project Android Anda menjadi 26 atau lebih tinggi.

Selain itu, lihat Pemecahan masalah Android - kegagalan build desugaring.

Masalah saat mem-build untuk iOS dengan Cocoapods

Saat mem-build untuk iOS, penginstalan Cocoapod mungkin gagal dengan error tentang lokalitas bahasa, atau encoding UTF-8. Saat ini ada beberapa cara berbeda untuk mengatasi masalah ini.

  • Dari terminal, jalankan pod install secara langsung, lalu buka file xcworkspace yang dihasilkan.

  • Downgrade versi Cocoapods ke 1.10.2. Masalah ini hanya ada di versi 1.11 dan yang lebih baru.

  • Di ~/.bash_profile atau yang setara, tambahkan export LANG=en_US.UTF-8

Cara mengupdate versi Firebase Unity SDK

Proses untuk mengupdate versi Firebase Unity SDK bergantung pada bagaimana versi tersebut pertama kali diimpor. Berikut adalah dua metode impor alternatif:

  • Mengimpor file .unitypackage di direktori Assets/ project Anda
  • Mengimpor menggunakan Pengelola Paket Unity (UPM)
    • Ini adalah cara yang direkomendasikan untuk mengelola paket di Unity 2018.4+.
    • Gunakan metode ini untuk memudahkan update versi mendatang dan membuat direktori Assets/ lebih bersih.

Dalam project Unity, Anda hanya boleh menggunakan satu metode impor untuk mengelola semua paket Firebase. Petunjuk di bawah ini dapat digunakan tidak hanya untuk mengupdate versi masing-masing paket, tetapi juga, jika diperlukan, untuk memigrasi pengelolaan paket ke UPM (metode impor yang direkomendasikan).