Sorun giderme & Unity ve Firebase ile ilgili SSS

Bu sayfada Unity'ye özgü sorunlar için ipuçları ve sorun giderme adımları yer almaktadır karşılaşabileceğiniz bazı yaygın durumlardır.

Başka sorunlarınız mı var yoksa sorununuzun aşağıda açıklanmadığını mı düşünüyorsunuz? Tüm ayarları kontrol edin Firebase'i kullanmaya yönelik daha fazla bilgi için ana Firebase SSS SSS bölümüne bakın.

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 Ayrıştırarak .NET'in önceki sürümlerindeki.NET 4 .x sınıfları.

Bu nedenle, Firebase Unity SDK'sının 5.4.0 ve sonraki sürümleri, dotnet3 ve dotnet4 tarayıcılarında .NET 3.x veya .NET 4.x ile uyumludur Firebase Unity SDK'sının dizinleri.

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. Tüm platformlar için aşağıdaki DLL'leri 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. Tüm platformlar için aşağıdaki DLL'leri kaldırın veya devre dışı bırakın:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Tüm platformlar için aşağıdaki DLL'leri 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 Ayrıştırarak .NET'in önceki sürümlerindeki.NET 4 .x sınıfları.

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, IL2CPP Unity 2017.1.x'te gönderilen bir aktarıcı (C# değerini C++ biçimine dönüştüren bir aktarıcı) yönlendirme DLL'lerini doğru şekilde işlemeyebilir. Bu da, şuna benzememesi gerekir:

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

Şu anda Unity 2017.1 olduğundan.NET 4 .x'i kullanmak için Unity 2017.2 veya daha yeni bir sürüme IL2CPP ile derlenen projelere odaklanacağız.

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. Bu da Realtime Database eklentisinin düzenleyicilerde ve masaüstünde başarısız olmasına neden 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

Unity'nin Gradle derlemesini özelleştirdiğinizde, Firebase düzenleyici aracı Android olarak Assets/Plugins/Android/Firebase/res/values/google-services.xml Firebase SDK'sının kullanabilmesi için bir Android derlemesi olarak paketlenecek kaynak varsayılan FirebaseApp örneğini başlatmak için kullanılır.

Unity 2020'de tüm Android kaynakları .androidlib son eki Projeniz, Assets/Plugins/Android/Firebase dizini, şu şekilde yeniden adlandır: Assets/Plugins/Android/Firebase.androidlib. AndroidManifest.xml, project.properties ve res/values/google-services.xml içerdiğinden emin olun.

Android uygulaması oluşturulurken tek dex ile ilgili bir sorun

Android uygulaması geliştirirken, indirme işlemi sırasında tek bir dex dosyası. 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 tutmak amacıyla kullanılır. Tek bir dex dosyası, 65.536 yönteme referansla 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 şurada bulabilirsiniz: Oynatıcı Ayarları > Android > Yayınlama Ayarları > Küçült. 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ı sınırı aşmaya devam ediyorsa başka bir seçenek de multidex seçeneğini etkinleştirin. Unity'de bunu yapmanın birden fazla yolu vardır:

  • Player Settings altında Custom Gradle Template etkinse mainTemplate.gradle öğesini 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 ayrıntılı bilgiyi multidex kullanıcı kılavuzunda bulabilirsiniz.

Unity 2017 ve Unity 2018'de Android derlemeleri için Java 8 desteği ve şeker kaldırma (Firebase Unity SDK 8.0.0 ve sonraki sürümler)

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'sı (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 (veya Android Studio için bir projeyi dışa aktarıyorsanız modül düzeyinde build.gradle) dosyasına ekleyin:

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

Ayrıca bkz. Android sorun giderme - derleme hatalarını çözümleme.

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

iOS için geliştirme yaparken, Cocoapod yüklemesi başarısız olabilir ve yerel dil ayarını veya UTF-8 kodlamasını kullanabilirsiniz. Şu an için DMAIC ve PDCA gibi adımları da atmanız gerekir.

  • Terminalde doğrudan pod install dosyasını çalıştırın ve oluşturulan xcworkspace dosyasını açın.

  • Cocoapods sürümünü 1.10.2'ye düşürün. Sorun şurada mevcut: Sürüm 1.11 veya daha yeni bir sürüme sahip olmanız gerekir.

  • ~/.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, bu SDK'ların ilk başta içe aktarıldı. İki alternatif içe aktarma yöntemi şunlardır:

  • 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 paketlerin sürümünü güncellemek için değil, gerekirse paket yönetimini UPM'ye (önerilen içe aktarma yöntemi) taşımak için de kullanılabilir.