عیب یابی & سوالات متداول برای Unity و Firebase

این صفحه نکات و عیب‌یابی برای مشکلات خاص 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 استفاده می کنید:

  1. DLL های زیر را برای همه پلتفرم ها حذف یا غیرفعال کنید:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. DLL های زیر را برای همه پلتفرم ها فعال کنید:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

برای رفع خطای کامپایل، اگر از .NET 4.x استفاده می کنید:

  1. DLL های زیر را برای همه پلتفرم ها حذف یا غیرفعال کنید:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. 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های ارسالی نوع را ارائه می‌کند که انواع تجزیه را (مثلاً پیاده‌سازی System.Threading.Tasks.Task ) را به چارچوب دات نت ارسال می‌کند. متأسفانه، 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 اتصالات شبکه 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 خود اضافه کنید:

    1. از Gradle به عنوان سیستم ساخت استفاده کنید.
    2. Custom Gradle Template در Player Settings فعال کنید.
    3. خطوط زیر را به 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 (روش واردات توصیه‌شده) استفاده کرد.