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:
- 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
- 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:
- 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
- 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ındakiCustom Gradle Template
etkinsemainTemplate.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:- Derleme sistemi olarak
Gradle
kullanın. Player Settings
altındaCustom Gradle Template
özelliğini etkinleştirin.Aşağıdaki satırları
mainTemplate.gradle
öğesine (veya bir projeyi Android Studio için dışa aktarıyorsanız modül düzeyibuild.gradle
) ekleyin:android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- Derleme sistemi olarak
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 ileexport 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, projenizinAssets/
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.