Sorun Giderme ve Unity ve Firebase için SSS

Bu sayfada, Firebase'i kullanırken karşılaşabileceğiniz Unity'ye özgü sorunlara yönelik ipuçları ve sorun giderme bilgileri sunulmaktadır.

Başka zorluklar mı yaşıyorsunuz veya sorununuzu aşağıda ana hatlarıyla göremiyor musunuz? Firebase'e yönelik veya ürüne özel daha fazla SSS için ana Firebase SSS'sine göz atmayı unutmayın.

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

Firebase, Unity 2017 ve sonrasında 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ını sağlamak için Parse SDK'nın bileşenlerini kullanır.

Bu nedenle Firebase Unity SDK sürüm 5.4.0 ve üzeri, Firebase Unity SDK'nın dotnet3 ve dotnet4 dizinlerinde .NET 3.x veya .NET 4.x ile uyumlu eklentiler sağlar.

Projenizde etkinleştirilen .NET sürümüyle uyumlu olmayan bir Firebase eklentisini içe aktarırsanız, .NET çerçevesindeki Parse SDK 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 eklentisini içe aktarırsanız:

  • Unity projenizde, projeniz için doğru DLL'leri etkinleştirmek için Varlıklar > Play Hizmetleri Çözümleyicisi > Sürüm İşleyicisi > Güncelle seçeneğine gidin.

.NET 4.x projelerinde Unity 2017.1 IL2CPP derlemesi

Firebase, Unity 2017 ve sonrasında 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ını sağlamak için Parse SDK'nın bileşenlerini kullanır.

Bu nedenle, Firebase Unity SDK sürüm 5.4.0 ve üzeri, Ayrıştırma türlerini (örneğin, System.Threading.Tasks.Task Ayrıştırma uygulaması) .NET çerçevesine ileten tür yönlendirme DLL'leri sağlar. Maalesef Unity 2017.1.x'te gönderilen IL2CPP (C#'ı C++'a dönüştüren bir aktarıcı), tür yönlendirme DLL'lerini doğru şekilde işlemez ve bu da 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'deki .NET 4.x IL2CPP derleme hataları için şu anda geçici bir çözüm mevcut değildir; bu nedenle, IL2CPP ile derlenen projelerde .NET 4.x'i kullanmak için Unity 2017.2 veya sonraki bir sürüme yükseltmeniz gerekir.

Unity 2017.2 ağı

Firebase Gerçek Zamanlı Veritabanı, .NET ağ yığınını kullanarak TLS ağ bağlantıları oluşturur. Unity 2017.2'de .NET 4.6 kullanılırken TLS işlevselliği bozuluyor ve Realtime Database eklentisinin editörlerde ve masaüstünde başarısız olmasına neden oluyor.

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

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

Gradle yapısını özelleştirme yeteneği olmayan Unity sürümlerini desteklemek için Firebase düzenleyici aracı, bir Android kaynağı olarak Assets/Plugins/Android/Firebase/res/values/google-services.xml oluşturur. Firebase SDK'sının varsayılan FirebaseApp örneğini başlatmak için kullanabilmesi için Android derlemesi.

Unity 2020'de tüm Android kaynaklarının .androidlib sonekine sahip dizinlerde olması gerekir. Projeniz Assets/Plugins/Android/Firebase dizini oluşturan bir Firebase SDK kullanıyorsa bunu 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 bir sorun

Android uygulamasını geliştirirken tek bir dex dosyasına sahip olmaktan kaynaklanan 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 yardımcı verileri tutmak için kullanılır. Tek bir dex dosyası 65.536 yönteme referansla sınırlıdır. Projenizdeki tüm Android kitaplıklarındaki yöntemlerin toplam sayısı bu sınırı aşarsa derleme başarısız olur.

Unity, 2017.2'de, kullanılmayan kodu çıkarmak için Proguard'ı (veya Unity'nin bazı sürümlerindeki diğer araçları) kullanan ve tek bir dex dosyasında başvurulan yöntemlerin toplam sayısını azaltabilen Minifikasyon'u tanıttı. Bu seçeneği Oynatıcı Ayarları > Android > Yayınlama Ayarları > Küçült bölümünde bulabilirsiniz. Seçenekler farklı Unity sürümlerine göre farklılık gösterebilir; bu nedenle resmi Unity belgelerine bakın.

Başvurulan yöntemlerin sayısı hala sınırı aşıyorsa başka bir seçenek de multidex etkinleştirmektir. Unity'de bunu başarmanı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 oluşturmak için Android Studio'yu kullanıyorsanız modül düzeyinde build.gradle dosyasını değiştirin.

Daha fazla ayrıntıyı multidex kullanım kılavuzunda bulabilirsiniz.

Unity 2017 ve Unity 2018'deki Android yapıları için Java 8 desteği ve şeker giderme (Firebase Unity SDK 8.0.0 ve üzeri)

Mayıs 2021'de (Firebase BoM v28.0.0), Firebase tüm Android kitaplıklarında şeker gidermeyi devre dışı bıraktı ( sürüm notuna bakın). Firebase Unity SDK (8.0.0 ve üzeri) ile bir 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 sürümlerini etkiler. Unity'nin daha yeni sürümleri, gradle build dosyalarına varsayılan olarak compileOptions bloğunu ekler. Unity 2017 ve Unity 2018'deki 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. mainTemplate.gradle (veya Android Studio için bir projeyi dışa aktarıyorsanız modül düzeyinde build.gradle ) aşağıdaki satırları ekleyin:

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Alternatif olarak, Android projeniz için minSdkVersion değerini 26 veya üstüne yükseltin.

Ayrıca bkz. Android sorun giderme - yapı hatalarının şekerini giderme .

Cocoapod'larla iOS için derleme yaparken karşılaşılan sorunlar

iOS için derleme yaparken Cocoapod kurulumu, dil yerel ayarı veya UTF-8 kodlamasıyla ilgili bir hata nedeniyle başarısız olabilir. Şu anda bu soruna geçici bir çözüm bulmanın birkaç farklı yolu vardır.

  • Terminalden doğrudan pod install çalıştırın ve ortaya çıkan xcworkspace dosyasını açın.

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

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

Firebase Unity SDK'larının sürümü nasıl güncellenir?

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

  • Projenizin Assets/ dizini altına .unitypackage dosyalarını içe aktarma
  • Unity Paket Yöneticisini (UPM) kullanarak içe aktarma
    • Unity 2018.4+ sürümünde paketleri yönetmenin önerilen yolu budur.
    • Gelecekteki sürüm güncellemelerini kolaylaştırmak ve Assets/ dizininizi daha temiz hale getirmek 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 kullanmalısınız. Aşağıdaki talimatlar yalnızca bireysel paketlerin sürümünü güncellemek için değil, aynı zamanda gerekirse paket yönetimini UPM'ye (önerilen içe aktarma yöntemi) geçirmek için de kullanılabilir.