Unity ve Firebase için sorun giderme ve 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 var mı veya sorununuzu aşağıda ana hatlarıyla göremiyor musunuz? 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 bileşenlerini kullanır.

Bu nedenle, Firebase Unity SDK sürümü 5.4.0 ve sonraki sürümleri, dotnet3 içinde .NET 3.x veya .NET 4.x ve Firebase Unity SDK'nın dotnet4 dizinleriyle 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 bazı türlerden Parse SDK tarafından uygulanan derleme hataları görürsünüz.

.NET 3.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/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 eklentisini içe aktarırsanız:

  • Unity projenizde, projenizde doğru DLL'leri etkinleştirmek için Öğeler > Play Hizmetleri Çözümleyici > Sürüm İşleyici > 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 bileşenlerini kullanır.

Bu nedenle, Firebase Unity SDK'nın 5.4.0 ve sonraki sürümleri, Ayrıştırma türlerini (ör. System.Threading.Tasks.Task işlevinin Parse uygulamasını) .NET çerçevesine yönlendiren tür yönlendirme DLL'leri sağlar. Ne yazık ki Unity 2017.1.x sürümünde gönderilen IL2CPP (C# numarasını C++'ya 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>

Şu anda Unity 2017.1'de .NET 4.x IL2CPP derleme hataları için geçici bir çözüm bulunmamaktadır. Bu nedenle, IL2CPP ile derlenen projelerde .NET 4.x'i kullanmak için Unity 2017.2 veya daha yeni bir sürüme geçmeniz gerekir.

Unity 2017.2 ağ iletişimi

Firebase Realtime Database, .NET ağ iletişimi yığınını kullanarak TLS ağ bağlantıları oluşturur. .NET 4 .6 kullanılırken TLS işlevi, Unity 2017.2'de bozularak Realtime Database eklentisinin düzenleyicilerde ve masaüstünde başarısız olmasına neden oluyor.

Bu sorun için geçici bir çözüm bulunmadığından, Unity'nin farklı bir sürümünü (örneğin, 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 imkanı olmayan Unity sürümlerini desteklemek için bir Android kaynağı olarak Assets/Plugins/Android/Firebase/res/values/google-services.xml 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 ekine sahip dizinlerde bulunmalı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şturulurken tek dex ile ilgili bir sorun

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

Cannot fit requested classes in a single dex file.

Dalvik Executable (.dex) dosyaları,Android uygulamaları (.apk) için bir dizi sınıf tanımını ve bunlarla ilişkili yardımcı 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 2017.2'de, kullanılmayan kodları çıkarmak için ProGuard (veya Unity'nin bazı sürümlerindeki diğer araçlar) kullanan Küçültme'yi kullanıma sundu. Bu sayede, tek bir dex dosyasında referans verilen yöntemlerin toplam sayısını azaltabiliyor. Bu seçenek Oynatıcı Ayarları > Android > Yayınlama Ayarları > Küçült'de bulunabilir. Seçenekler Unity'nin farklı sürümlerinde değişiklik gösterebilir. Bu nedenle resmi Unity belgelerini inceleyin.

Başvurulan yöntemlerin sayısı yine de sınırı aşıyorsa başka bir seçenek de multidex özelliğini etkinleştirmektir. 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 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 altını çizme (Firebase Unity SDK 8.0.0 ve üzeri)

Mayıs 2021'de (Firebase BoM v28.0.0) Firebase, tüm Android kitaplıklarında alt düzeye ulaşmayı devre dışı bıraktı (sürüm notunu inceleyin). 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 daha 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 özelliğini 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 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 dil yerel ayarı veya UTF-8 kodlamasıyla ilgili bir hata döndürerek başarısız olabilir. Şu anda bu sorunu çözmek için birkaç farklı yol mevcuttur.

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

  • Cocoapods'un 1.10.2 sürümüne geçin. Bu sorun yalnızca 1.11 ve daha yeni 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, sürümlerin başlangıçta nasıl içe aktarıldığına bağlıdır. İki alternatif içe aktarma yöntemi şunlardır:

  • .unitypackage dosya, projenizin Assets/ dizinine aktarılıyor
  • Unity Paket Yöneticisi (UPM) kullanarak içe aktarma
    • Unity 2018.4 ve sonraki sürümlerde paketleri yönetmenin önerilen yolu budur.
    • Gelecekteki sürüm güncellemelerinizi daha kolay hale getirmek ve Assets/ dizininizi daha 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 kullanmalısınız. 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.