Sorun giderme & Unity ve Firebase ile ilgili SSS

Bu sayfada, Firebase'i kullanırken karşılaşabileceğiniz Unity'ye özgü sorunlarla ilgili ipuçları ve sorun giderme bilgileri yer almaktadır.

Başka sorunlarınız mı var yoksa sorununuzun aşağıda açıklanmadığını mı düşünüyorsunuz? Firebase'e yönelik daha fazla bilgi veya ürüne özel SSS için ana Firebase SSS bölümünü mutlaka inceleyin.

Unity 2017.x ve sonraki sürümleri kullanırken.NET uyumluluğu

Firebase, Unity 2017 ve sonraki sürümlerde deneysel bir derleme seçeneği olarak .NET 4.x'i destekler. Firebase eklentileri, .NET'in önceki sürümlerinde bazı .NET 4.x sınıfları sağlamak için Parse SDK'sının bileşenlerini kullanır.

Bu nedenle, Firebase Unity SDK'sının 5.4.0 ve sonraki sürümleri, dotnet3 içinde .NET 3.x veya .NET 4.x ve Firebase Unity SDK'sının dotnet4 dizinleriyle uyumlu eklentiler sağlar.

Projenizde etkinleştirilen .NET sürümüyle uyumlu olmayan bir Firebase eklentisi içe aktarırsanız .NET çerçevesindeki Parse SDK'sı tarafından uygulanan bazı türlerde derleme hataları görürsünüz.

.NET 3.x kullanıyorsanız derleme hatasını çözmek için:

  1. Tüm platformlar için aşağıdaki DLL'leri kaldırın veya devre dışı bırakın:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Aşağıdaki DLL'leri tüm platformlar için etkinleştirin:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

.NET 4.x kullanıyorsanız derleme hatasını çözmek için:

  1. Aşağıdaki DLL'leri tüm platformlar için kaldırın veya devre dışı bırakın:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Aşağıdaki DLL'leri tüm platformlar için etkinleştirin:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Başka bir Firebase eklentisi içe aktarırsanız:

  • Unity projenizde, projeniz için doğru DLL'leri etkinleştirmek üzere Öğeler > Play Hizmetleri Çözümleyicisi > Sürüm İşleyicisi > Güncelle'ye gidin.

.NET 4.x projelerinde Unity 2017.1 IL2CPP derlemesi

Firebase, Unity 2017 ve sonraki sürümlerde deneysel bir derleme seçeneği olarak .NET 4.x'i destekler. Firebase eklentileri, .NET'in önceki sürümlerinde bazı .NET 4.x sınıfları sağlamak için Parse SDK'sının bileşenlerini kullanır.

Bu nedenle, Firebase Unity SDK'sının 5.4.0 ve sonraki sürümleri, Parse türlerini (örneğin, System.Threading.Tasks.Task için Parse uygulaması) .NET çerçevesine yönlendiren tür yönlendirme DLL'leri sağlar. Maalesef Unity 2017.1.x'te gönderilen IL2CPP (C#'yi C++'ya dönüştüren bir derleyici), tür yönlendirme DLL'lerini doğru şekilde işlemediğinden aşağıdakine benzer derleme hatalarına neden olur:

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

Unity 2017.1'de .NET 4.x IL2CPP derleme hataları için şu anda bir geçici çözüm mevcut değildir. Bu nedenle, IL2CPP ile derlenen projelerde .NET 4.x kullanmak için Unity 2017.2 veya sonraki bir sürüme yükseltmeniz gerekir.

Unity 2017.2 ağ iletişimi

Firebase Realtime Database, .NET ağ yığınını kullanarak TLS ağ bağlantıları oluşturur. .NET 4.6 kullanılırken Unity 2017.2'de TLS işlevi bozulur ve Realtime Database eklentisi düzenleyicilerde ve masaüstünde başarısız olur.

Bu sorun için geçici çözüm olmadığından Unity'nin farklı bir sürümünü (ör. 2017.1 veya 2017.3) kullanmanız gerekir.

Unity 2020'de Firebase Android yapılandırma dosyası eksik

Firebase düzenleyici aracı, Gradle derlemesini özelleştirme özelliğine sahip olmayan Unity sürümlerini desteklemek için Assets/Plugins/Android/Firebase/res/values/google-services.xml'yi Android derlemesine paketlenecek bir Android kaynağı olarak oluşturur. Böylece Firebase SDK'sı, varsayılan FirebaseApp örneğini başlatmak için bu kaynağı kullanabilir.

Unity 2020'de tüm Android kaynakları .androidlib son ekiyle biten dizinlerde olmalıdır. Projeniz, Assets/Plugins/Android/Firebase dizini oluşturan bir Firebase SDK'sı kullanıyorsa projeyi Assets/Plugins/Android/Firebase.androidlib olarak yeniden adlandırın. AndroidManifest.xml, project.properties ve res/values/google-services.xml içerdiğinden emin olun.

Android uygulaması oluştururken tek dex ile ilgili sorun

Android uygulamasını oluştururken tek bir dex dosyasına sahip olmakla ilgili bir derleme hatasıyla karşılaşabilirsiniz. Projeniz Gradle derleme sistemini kullanacak şekilde yapılandırılmışsa hata mesajı aşağıdakine benzer.

Cannot fit requested classes in a single dex file.

Dalvik yürütülebilir (.dex) dosyaları, Android uygulamaları (.apk) için bir dizi sınıf tanımını ve bunlarla ilişkili ek verileri depolamak amacıyla kullanılır. Tek bir dex dosyası, 65.536 yönteme referans vermekle sınırlıdır. Projenizdeki tüm Android kitaplıklarındaki toplam yöntem sayısı bu sınırı aşarsa derleme başarısız olur.

Unity, kullanılmayan kodu kaldırmak için Proguard'ı (veya Unity'nin bazı sürümlerindeki diğer araçları) kullanan küçültme özelliğini 2017.2'de kullanıma sundu. Bu özellik, tek bir dex dosyasında referans verilen yöntemlerin toplam sayısını azaltabilir. Bu seçeneği Oynatıcı Ayarları > Android > Yayınlama Ayarları > Küçük Boyutlu bölümünde bulabilirsiniz. Seçenekler Unity'nin farklı sürümlerinde farklılık gösterebilir. Bu nedenle, resmi Unity belgelerine bakın.

Referans verilen yöntemlerin sayısı yine de sınırı aşıyorsa multidex seçeneğini etkinleştirmek de bir seçenektir. Unity'de bunu yapmanın birden çok yolu vardır:

  • Player Settings altındaki Custom Gradle Template etkinse mainTemplate.gradle ayarını değiştirin.
  • Dışa aktarılan projeyi derlemek için Android Studio'yu kullanıyorsanız modül düzeyindeki build.gradle dosyasını değiştirin.

Daha fazla bilgiyi multidex kullanıcı kılavuzunda bulabilirsiniz.

Unity 2017 ve Unity 2018'de Android derlemeleri için Java 8 desteği ve şekerleme kaldırma (Firebase Unity SDK 8.0.0 ve üzeri)

Firebase, Mayıs 2021'de (Firebase BoM 28.0.0 sürümü) tüm Android kitaplıkları için şeker azaltmayı devre dışı bıraktı (sürüm notuna bakın). Firebase Unity SDK (8.0.0 ve üzeri) ile Android uygulaması oluştururken aşağıdaki derleme hatasını görebilirsiniz:

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

Bu değişiklik yalnızca Unity 2017 ve Unity 2018'deki Android derlemelerini etkiler. Unity'nin yeni sürümleri, gradle derleme dosyalarına varsayılan olarak compileOptions bloğunu ekler. Unity 2017 ve Unity 2018'de bu derleme hatasını düzeltmek için aşağıdakilerden birini yapın:

  • Gradle şablonunuza bir compileOptions bloğu ekleyin:

    1. Derleme sistemi olarak Gradle kullanın.
    2. Player Settings altında Custom Gradle Template'ü etkinleştirin.
    3. Aşağıdaki satırları mainTemplate.gradle öğesine (veya bir projeyi Android Studio için dışa aktarıyorsanız modül düzeyi build.gradle) ekleyin:

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Alternatif olarak, Android projenizin minSdkVersion değerini 26 veya üzerine yükseltin.

Ayrıca Android sorun giderme - şeker çıkarma işlemiyle ilgili derleme hataları başlıklı makaleye de göz atın.

Cocoapods ile iOS için derleme yaparken karşılaşılan sorunlar

iOS için derleme yaparken Cocoapod yükleme işlemi, dil yerel ayarı veya UTF-8 kodlaması ile ilgili bir hatayla başarısız olabilir. Şu anda bu sorunun üstesinden gelmenin birkaç farklı yolu vardır.

  • Terminalden pod install uygulamasını doğrudan çalıştırın ve elde edilen xcworkspace dosyasını açın.

  • Cocoapods sürümünü 1.10.2'ye düşürün. Sorun yalnızca 1.11 ve sonraki sürümlerde mevcuttur.

  • ~/.bash_profile veya eşdeğeri ile export LANG=en_US.UTF-8 ekleyin

Firebase Unity SDK'larının sürümünü güncelleme

Firebase Unity SDK'larının sürümlerini güncelleme işlemi, SDK'ların başlangıçta nasıl içe aktarıldığına bağlıdır. İki alternatif içe aktarma yöntemi aşağıda verilmiştir:

  • Projenizin Assets/ dizinine .unitypackage dosyaları aktarma
  • Unity Paket Yöneticisi'ni (UPM) kullanarak içe aktarma
    • Bu, Unity 2018.4 ve sonraki sürümlerde paketleri yönetmenin önerilen yoludur.
    • Gelecekteki sürüm güncellemelerini kolaylaştırmak ve dizininizi temiz tutmak için bu yöntemi kullanın.

Unity projenizde, tüm Firebase paketlerinizi yönetmek için yalnızca bir içe aktarma yöntemi kullanmanız gerekir. Aşağıdaki talimatlar yalnızca tek tek paketlerin sürümlerini güncellemek için değil, gerekirse paket yönetimini UPM'ye taşımak (önerilen içe aktarma yöntemi) için de kullanılabilir.