استكشاف الأخطاء وإصلاحها & الأسئلة الشائعة حول Unity وFirebase

تقدم هذه الصفحة نصائح واستكشاف الأخطاء وإصلاحها للمشكلات الخاصة بـ Unity التي قد تواجهها عند استخدام Firebase.

هل تواجه تحديات أخرى أو لا ترى مشكلتك الموضحة أدناه؟ تأكد من مراجعة الأسئلة الشائعة الرئيسية لـ Firebase للحصول على مزيد من الأسئلة الشائعة حول Firebase أو الأسئلة الشائعة الخاصة بالمنتج.

توافق .NET عند استخدام Unity 2017.x والإصدارات الأحدث

يدعم Firebase .NET 4.x كخيار إنشاء تجريبي في Unity 2017 والإصدارات الأحدث. تستخدم مكونات Firebase الإضافية مكونات Parse SDK لتوفير بعض فئات .NET 4.x في الإصدارات السابقة من .NET.

لذلك، يوفر الإصدار 5.4.0 من Firebase Unity SDK والإصدارات الأحدث مكونات إضافية متوافقة مع .NET 3.x أو .NET 4.x في دلائل dotnet3 و dotnet4 الخاصة بحزمة Firebase Unity SDK.

إذا قمت باستيراد مكون إضافي لـ Firebase غير متوافق مع إصدار .NET الممكّن في مشروعك، فسترى أخطاء الترجمة من بعض الأنواع في إطار عمل .NET الذي يتم تنفيذه بواسطة 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 الخاص بك، انتقل إلى الأصول > Play Services Resolver > Version Handler > Update لتمكين ملفات DLL الصحيحة لمشروعك.

تجميع Unity 2017.1 IL2CPP في مشاريع .NET 4.x

يدعم Firebase .NET 4.x كخيار إنشاء تجريبي في Unity 2017 والإصدارات الأحدث. تستخدم مكونات Firebase الإضافية مكونات Parse SDK لتوفير بعض فئات .NET 4.x في الإصدارات السابقة من .NET.

لذلك، يوفر الإصدار 5.4.0 من Firebase Unity SDK والإصدارات الأحدث مكتبات الارتباط الديناميكي (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، لذا يجب عليك الترقية إلى Unity 2017.2 أو إصدار أحدث لاستخدام .NET 4.x في المشاريع المجمعة باستخدام IL2CPP.

الوحدة 2017.2 الشبكات

تقوم قاعدة بيانات Firebase Realtime بإنشاء اتصالات شبكة TLS باستخدام مكدس شبكة .NET. تم تعطيل وظيفة TLS في Unity 2017.2 عند استخدام .NET 4.6 مما تسبب في فشل المكون الإضافي لقاعدة بيانات Realtime في برامج التحرير وعلى سطح المكتب.

لا يوجد حل بديل لهذه المشكلة، لذا يجب عليك استخدام إصدار مختلف من Unity، على سبيل المثال الإصدار 2017.1 أو 2017.3.

ملف تكوين Firebase Android مفقود في Unity 2020

من أجل دعم إصدارات Unity التي لا تتمتع بالقدرة على تخصيص بنية Gradle، تقوم أداة محرر Firebase بإنشاء Assets/Plugins/Android/Firebase/res/values/google-services.xml كمورد Android ليتم تعبئته في إصدار Android، بحيث يمكن لـ Firebase SDK استخدامه لتهيئة مثيل FirebaseApp الافتراضي.

في Unity 2020، يجب أن تكون جميع موارد Android في أدلة ذات لاحقة .androidlib . إذا كان مشروعك يستخدم Firebase SDK الذي ينشئ دليل Assets/Plugins/Android/Firebase ، فأعد تسميته إلى Assets/Plugins/Android/Firebase.androidlib . تأكد من أنه يحتوي على AndroidManifest.xml و project.properties و res/values/google-services.xml .

مشكلة في Single dex أثناء إنشاء تطبيق Android

أثناء إنشاء تطبيق Android، قد تواجه فشلًا في البناء يتعلق بوجود ملف dex واحد. تبدو رسالة الخطأ مشابهة لما يلي، إذا تم تكوين مشروعك لاستخدام نظام إنشاء Gradle.

Cannot fit requested classes in a single dex file.

يتم استخدام ملفات Dalvik القابلة للتنفيذ ( .dex ) للاحتفاظ بمجموعة من تعريفات الفئات والبيانات المساعدة المرتبطة بها لتطبيقات Android ( .apk ). يقتصر ملف dex واحد على 65.536 طريقة. ستفشل عملية الإنشاء إذا تجاوز العدد الإجمالي للطرق من جميع مكتبات Android في مشروعك هذا الحد.

قدمت Unity عملية Minification في 2017.2، والتي تستخدم Proguard (أو أدوات أخرى في بعض إصدارات Unity) لإزالة التعليمات البرمجية غير المستخدمة، مما قد يقلل العدد الإجمالي للطرق المشار إليها في ملف dex واحد. يمكن العثور على هذا الخيار في إعدادات المشغل > Android > إعدادات النشر > تصغير . قد تختلف الخيارات في إصدار مختلف من Unity، لذا راجع وثائق Unity الرسمية.

إذا كان عدد الطرق المرجعية لا يزال يتجاوز الحد المسموح به، فهناك خيار آخر وهو تمكين multidex . هناك عدة طرق لتحقيق ذلك في Unity:

  • إذا تم تمكين Custom Gradle Template ضمن Player Settings ، فقم بتعديل mainTemplate.gradle .
  • إذا كنت تستخدم Android Studio لإنشاء المشروع الذي تم تصديره، فقم بتعديل ملف build.gradle على مستوى الوحدة.

يمكن العثور على مزيد من التفاصيل في دليل مستخدم multidex .

دعم Java 8 وإلغاء تثبيته لإصدارات Android في Unity 2017 وUnity 2018 (Firebase Unity SDK 8.0.0 والإصدارات الأحدث)

في مايو 2021 (Firebase BoM v28.0.0)، قام Firebase بتعطيل إلغاء السكر لجميع مكتبات Android الخاصة به (راجع ملاحظة الإصدار ). عند إنشاء تطبيق 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

يؤثر هذا التغيير على إصدارات Android في Unity 2017 وUnity 2018 فقط. تضيف الإصدارات الأحدث من Unity كتلة compileOptions افتراضيًا في ملفات بناء Gradle. لإصلاح خطأ البناء هذا في Unity 2017 وUnity 2018، قم بأحد الإجراءات التالية:

  • أضف كتلة compileOptions إلى قالب Gradle الخاص بك:

    1. استخدم Gradle كنظام البناء.
    2. تمكين Custom Gradle Template ضمن Player Settings .
    3. أضف الأسطر التالية إلى mainTemplate.gradle (أو build.gradle على مستوى الوحدة في حالة تصدير مشروع لـ Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • وبدلاً من ذلك، قم بزيادة minSdkVersion لمشروع Android الخاص بك إلى 26 أو أعلى.

راجع أيضًا استكشاف أخطاء Android وإصلاحها - فشل عملية إزالة السكر في البناء .

مشكلات عند إنشاء نظام iOS باستخدام Cocoapods

عند إنشاء نظام التشغيل iOS، قد يفشل تثبيت Cocoapod بسبب وجود خطأ حول لغة اللغة أو ترميز UTF-8. توجد حاليًا عدة طرق مختلفة لحل هذه المشكلة.

  • من الوحدة الطرفية، قم بتشغيل pod install مباشرةً، وافتح ملف xcworkspace الناتج.

  • قم بتخفيض إصدار Cocoapods إلى 1.10.2. المشكلة موجودة فقط في الإصدار 1.11 والأحدث.

  • في ~/.bash_profile الخاص بك أو ما يعادله، أضف export LANG=en_US.UTF-8

كيفية تحديث إصدار Firebase Unity SDKs

تعتمد عملية تحديث إصدارات Firebase Unity SDK على كيفية استيرادها في البداية. فيما يلي طريقتان بديلتان للاستيراد:

  • استيراد ملفات .unitypackage ضمن دليل Assets/ الخاص بمشروعك
  • الاستيراد باستخدام Unity Package Manager (UPM)
    • هذه هي الطريقة الموصى بها لإدارة الحزم في Unity 2018.4+.
    • استخدم هذه الطريقة لتسهيل تحديثات الإصدار المستقبلي وتنظيف Assets/ الأصول لديك.

في مشروع Unity الخاص بك، يجب عليك استخدام طريقة استيراد واحدة فقط لإدارة جميع حزم Firebase الخاصة بك. يمكن استخدام الإرشادات الواردة أدناه ليس فقط لتحديث إصدار الحزم الفردية، ولكن أيضًا، إذا لزم الأمر، لترحيل إدارة الحزم إلى UPM (طريقة الاستيراد الموصى بها).