این صفحه نکات و عیبیابی برای مشکلات خاص Unity را ارائه میدهد که ممکن است هنگام استفاده از Firebase با آن مواجه شوید.
چالش های دیگری دارید یا مشکل خود را در زیر نمی بینید؟ حتماً سؤالات متداول اصلی Firebase را برای سؤالات متداول pan-Firebase یا محصول خاص بررسی کنید.
سازگاری دات نت هنگام استفاده از Unity 2017.x و جدیدتر
Firebase از .NET 4.x به عنوان یک گزینه ساخت آزمایشی در Unity 2017 به بعد پشتیبانی می کند. افزونه های Firebase از اجزای SDK Parse برای ارائه برخی کلاس های NET 4.x در نسخه های قبلی دات نت استفاده می کنند.
بنابراین، Firebase Unity SDK نسخه 5.4.0
و جدیدتر افزونههایی را ارائه میکند که با NET 3.x یا NET 4.x در فهرستهای dotnet3
و dotnet4
Firebase Unity SDK سازگار هستند.
اگر افزونه Firebase را وارد کنید که با نسخه دات نت فعال شده در پروژه شما ناسازگار است، خطاهای کامپایل برخی از انواع در چارچوب دات نت را مشاهده خواهید کرد که توسط Parse SDK پیاده سازی شده اند.
برای رفع خطای کامپایل، اگر از .NET 3.x استفاده می کنید:
- DLL های زیر را برای همه پلتفرم ها حذف یا غیرفعال کنید:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- DLL های زیر را برای همه پلتفرم ها فعال کنید:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
برای رفع خطای کامپایل، اگر از .NET 4.x استفاده می کنید:
- DLL های زیر را برای همه پلتفرم ها حذف یا غیرفعال کنید:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- DLL های زیر را برای همه پلتفرم ها فعال کنید:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
اگر افزونه Firebase دیگری وارد کنید:
- در پروژه Unity خود، به Assets > Play Services Resolver > Version Handler > Update بروید تا DLL های صحیح را برای پروژه خود فعال کنید.
کامپایل Unity 2017.1 IL2CPP در پروژه های NET 4.x
Firebase از .NET 4.x به عنوان یک گزینه ساخت آزمایشی در Unity 2017 به بعد پشتیبانی می کند. افزونه های Firebase از اجزای SDK Parse برای ارائه برخی کلاس های NET 4.x در نسخه های قبلی دات نت استفاده می کنند.
بنابراین، Firebase Unity SDK نسخه 5.4.0 و نسخههای بعدی DLLهای ارسالی نوع را ارائه میکند که انواع Parse (به عنوان مثال، اجرای تجزیه System.Threading.Tasks.Task
) را به چارچوب .NET ارسال میکند. متأسفانه، IL2CPP (ترنسپایلری که C# را به C++ تبدیل میکند) که در Unity 2017.1.x ارسال شده است، DLLهای ارسال نوع ارسال را به درستی پردازش نمیکند که منجر به خطاهای ساختی شبیه موارد زیر میشود:
Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>
در حال حاضر هیچ راه حلی برای خطاهای ساخت .NET 4.x IL2CPP در Unity 2017.1 وجود ندارد، بنابراین برای استفاده از NET 4.x در پروژه های کامپایل شده با IL2CPP، باید به Unity 2017.2 یا جدیدتر ارتقا دهید.
شبکه یونیتی 2017.2
Firebase Realtime Database اتصالات شبکه TLS را با استفاده از پشته شبکه دات نت ایجاد می کند. عملکرد TLS در Unity 2017.2 هنگام استفاده از دات نت 4.6 شکسته شده و باعث می شود افزونه Realtime Database در ویرایشگرها و روی دسکتاپ از کار بیفتد.
هیچ راه حلی برای این مشکل وجود ندارد، بنابراین باید از نسخه دیگری از Unity، به عنوان مثال نسخه 2017.1 یا 2017.3 استفاده کنید.
فایل پیکربندی اندروید Firebase در Unity 2020 وجود ندارد
به منظور پشتیبانی از نسخههایی از Unity که توانایی سفارشیسازی ساخت Gradle را ندارند، ابزار ویرایشگر Firebase Assets/Plugins/Android/Firebase/res/values/google-services.xml
را به عنوان یک منبع Android تولید میکند تا در یک بستهبندی شود. ساخت اندروید، به طوری که Firebase SDK می تواند از آن برای مقداردهی اولیه نمونه FirebaseApp پیش فرض استفاده کند.
در یونیتی 2020، همه منابع اندروید باید در دایرکتوری هایی با پسوند .androidlib
باشند. اگر پروژه شما از Firebase SDK استفاده میکند که فهرست Assets/Plugins/Android/Firebase
ایجاد میکند، نام آن را به Assets/Plugins/Android/Firebase.androidlib
تغییر دهید. مطمئن شوید که حاوی AndroidManifest.xml
، project.properties
و res/values/google-services.xml
باشد.
مشکل تک دکس هنگام ساخت اپلیکیشن اندروید
در حین ساخت اپلیکیشن اندروید، ممکن است با مشکل ساخت مرتبط با داشتن یک فایل dex مواجه شوید. اگر پروژه شما برای استفاده از سیستم ساخت Gradle پیکربندی شده باشد، پیام خطا مشابه شکل زیر است.
Cannot fit requested classes in a single dex file.
فایلهای اجرایی Dalvik ( .dex
) برای نگهداری مجموعهای از تعاریف کلاس و دادههای کمکی مرتبط با آنها برای برنامههای Android ( .apk
) استفاده میشوند. یک فایل dex تنها به 65536 روش محدود می شود. اگر تعداد کل روشها از تمام کتابخانههای Android در پروژه شما از این حد بیشتر شود، ساخت شکست میخورد.
Unity Minification را در سال 2017.2 معرفی کرد که از Proguard (یا ابزارهای دیگر در برخی نسخههای Unity) برای حذف کدهای استفاده نشده استفاده میکند که میتواند تعداد کل روشهای ارجاعشده را در یک فایل dex کاهش دهد. این گزینه را می توان در تنظیمات پخش کننده > Android > تنظیمات انتشار > Minify پیدا کرد. گزینه ها ممکن است در نسخه های مختلف Unity متفاوت باشند، بنابراین به اسناد رسمی Unity مراجعه کنید.
اگر تعداد روشهای ارجاعشده همچنان از حد مجاز فراتر رفت، گزینه دیگری فعال کردن multidex
است. برای رسیدن به این هدف در Unity راه های مختلفی وجود دارد:
- اگر
Custom Gradle Template
درPlayer Settings
فعال است،mainTemplate.gradle
تغییر دهید. - اگر از Android Studio برای ساخت پروژه صادر شده استفاده می کنید، فایل
build.gradle
در سطح ماژول را تغییر دهید.
جزئیات بیشتر را می توان در راهنمای کاربر multidex یافت.
پشتیبانی جاوا 8 و کاهش قند برای بیلدهای اندروید در Unity 2017 و Unity 2018 (Firebase Unity SDK 8.0.0 و بالاتر)
در می 2021 (Firebase BoM v28.0.0)، Firebase شیرین کردن قند را برای همه کتابخانههای Android خود غیرفعال کرد (به یادداشت انتشار مراجعه کنید). هنگام ساخت یک برنامه اندروید با Firebase Unity SDK (8.0.0 و بالاتر)، ممکن است خطای ساخت زیر را مشاهده کنید:
> Error while dexing.
The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle
این تغییر تنها بر بیلدهای اندروید در Unity 2017 و Unity 2018 تأثیر می گذارد. نسخه های جدیدتر Unity بلوک compileOptions
را به طور پیش فرض در فایل های ساخت gradle اضافه می کنند. برای رفع این خطای ساخت در Unity 2017 و Unity 2018 یکی از موارد زیر را انجام دهید:
یک بلوک
compileOptions
به قالب gradle خود اضافه کنید:- از
Gradle
به عنوان سیستم ساخت استفاده کنید. -
Custom Gradle Template
درPlayer Settings
فعال کنید. خطوط زیر را به
mainTemplate.gradle
(یا در صورت صادرات پروژه برای Android Studio)build.gradle
سطح ماژول اضافه کنید:android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- از
از طرف دیگر، minSdkVersion را برای پروژه اندروید خود به 26 یا بالاتر افزایش دهید.
همچنین عیب یابی Android - Desugaring Build Fails را ببینید.
مشکلات هنگام ساخت برای iOS با Cocoapod
هنگام ساخت برای iOS، نصب Cocoapod ممکن است با خطا در مورد زبان محلی یا رمزگذاری UTF-8 شکست بخورد. در حال حاضر چندین راه مختلف برای حل این مشکل وجود دارد.
از ترمینال،
pod install
مستقیماً اجرا کنید و فایل xcworkspace حاصل را باز کنید.نسخه Cocoapods را به 1.10.2 تنزل دهید. این مشکل فقط در نسخه 1.11 و جدیدتر وجود دارد.
در
~/.bash_profile
یا معادل آن،export LANG=en_US.UTF-8
را اضافه کنید
نحوه به روز رسانی نسخه Firebase Unity SDK
فرآیند بهروزرسانی نسخههای Firebase Unity SDK بستگی به نحوه وارد کردن اولیه آنها دارد. در اینجا دو روش جایگزین واردات وجود دارد:
- وارد کردن فایلهای
.unitypackage
در فهرستAssets/
پروژه شما - وارد کردن با استفاده از Unity Package Manager (UPM)
- این روش توصیه شده برای مدیریت بسته ها در Unity 2018.4+ است.
- از این روش برای آسانتر کردن بهروزرسانی نسخههای آینده و پاککننده
Assets/
Directory خود استفاده کنید.
در پروژه یونیتی خود، فقط باید از یک روش واردات برای مدیریت تمام بسته های Firebase خود استفاده کنید. دستورالعملهای زیر را میتوان نه تنها برای بهروزرسانی نسخه بستههای جداگانه، بلکه در صورت نیاز، برای انتقال مدیریت بسته به UPM (روش واردات توصیهشده) استفاده کرد.
اگر بستههای Firebase در فهرست Assets/
قرار دارند، دو گزینه برای بهروزرسانی نسخه SDK دارید:
گزینه 1 (توصیه می شود) : برای استفاده از UPM مهاجرت کنید (موجود در Unity 2018.4+)
- دستورالعمل های ارائه شده توسط Firebase را برای انتقال مدیریت بسته به UPM دنبال کنید.
- در حالی که این روش به نصب اولیه بیشتری نسبت به ادامه استفاده از گردش کار
.unitypackage
نیاز دارد، اما بهروزرسانیهای بعدی نسخه SDK به راحتی جواب میدهد.
گزینه 2 : به استفاده از فایلهای
.unitypackage
برای وارد کردن آنها به فهرستAssets/
ادامه دهید.هر یک از بسته ها را برای نسخه به روز شده وارد کنید.
اگر firebase_unity_sdk.zip را از وبسایت Firebase دانلود میکنید، مطمئن شوید که همه
.unitypackages
از پوشهdotnet
صحیح وارد کردهاید.- اگر از Unity 2019 یا جدیدتر استفاده می کنید، از پوشه
dotnet4
وارد کنید. - در غیر این صورت، Scripting Runtime Version را در Player Settings انتخاب کنید و اگر روی ".NET 3.x" تنظیم شده است، از پوشه
dotnet3
وارد کنید.
- اگر از Unity 2019 یا جدیدتر استفاده می کنید، از پوشه
بازنویسی نسخههای بستهای که قبلاً وارد شدهاند باید بهطور خودکار توسط External Dependency Manager انجام شود (که بهطور خودکار هنگام وارد کردن
.unitypackages
گنجانده میشود).با این حال، اگر و فقط اگر این فرآیند خودکار با شکست مواجه شد، باید پوشه های زیر را به صورت دستی حذف کنید و سپس دوباره مرحله واردات بالا را دوباره امتحان کنید.
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
اگر بستههای Firebase توسط UPM مدیریت میشوند، نسخه جدیدتر SDK را بهعنوان .tgz
. وارد کنید . این واردات به طور خودکار نسخه قبلی را بازنویسی می کند.