تحديد المشاكل وحلّها والأسئلة الشائعة حول 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 من حزمة تطوير البرامج (SDK) لمنصّة Firebase Unity والإصدارات الأحدث مكوّنات إضافية متوافقة مع .NET 3.x أو .NET 4.x في dotnet3 وdotnet4 من دليل Firebase Unity SDK.

إذا استوردت مكوّنًا إضافيًا من Firebase غير متوافق مع إصدار .NET الذي تمّ تفعيله في مشروعك، ستظهر لك أخطاء في التجميع من بعض الأنواع في إطار عمل .NET التي يتمّ تنفيذها بواسطة Parse SDK.

لحلّ خطأ التحويل البرمجي، في حال استخدام .NET 3.x:

  1. إزالة مكتبات الربط الديناميكي التالية أو إيقافها على جميع الأنظمة الأساسية:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. تفعيل مكتبات الربط الديناميكي التالية لجميع الأنظمة الأساسية:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

لحلّ خطأ التحويل البرمجي، في حال استخدام .NET 4.x:

  1. إزالة مكتبات الربط الديناميكي التالية أو إيقافها على جميع الأنظمة الأساسية:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. تفعيل مكتبات الربط الديناميكي التالية لجميع الأنظمة الأساسية:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

في حال استيراد مكوّن إضافي آخر من Firebase:

  • في مشروع Unity، انتقِل إلى مواد العرض > أداة حل خدمات Play > معالج الإصدار > تحديث لتفعيل مكتبات الربط الديناميكي الصحيحة لمشروعك.

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

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

وبالتالي، يوفّر الإصدار 5.4.0 والإصدارات الأحدث من حزمة تطوير البرامج (SDK) لمنصّة Firebase Unity إصدارات من مكتبة الربط الديناميكي من نوع لإعادة توجيه أنواع التحليل (على سبيل المثال، تحليل تنفيذ System.Threading.Tasks.Task) إلى إطار عمل .NET. للأسف، لا تعالج IL2CPP (مترجم يحوّل C# إلى C++ ) الذي تم شحنه في Unity 2017.1.x مكتبات الربط الديناميكي الخاصة بنوع إعادة التوجيه بشكل صحيح، ما يؤدي إلى إنشاء أخطاء تشبه ما يلي:

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.

إنشاء الشبكات في Unity 2017.2

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

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

ملف إعداد Firebase Android غير متوفّر في Unity 2020

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

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

مشكلة في دليل المستندات الفردي أثناء إنشاء تطبيق Android

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

Cannot fit requested classes in a single dex file.

تُستخدَم ملفات Dalvik التنفيذية (.dex) للاحتفاظ بمجموعة من تعريفات الفئات والبيانات المرتبطة بها لتطبيقات Android (.apk)، علمًا أنّ ملف dex واحد يقتصر على 65,536 طريقة. سيتعذر التصميم إذا تجاوز إجمالي عدد الطرق من جميع مكتبات Android في مشروعك هذا الحدّ.

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

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

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

يمكن الاطّلاع على مزيد من التفاصيل في دليل مستخدم Multidex.

دعم Java 8 وإزالة التعقيد عنه لإصدارات Android في Unity 2017 وUnity 2018 (الإصدار 8.0.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) لمنصّة Firebase)

في أيار (مايو) 2021 (الإصدار 28.0.0 من Firebase BoM)، أوقف Firebase ميزة إزالة الأخطاء في جميع مكتبات Android (اطّلِع على ملاحظة الإصدار). عند إنشاء تطبيق Android باستخدام حزمة تطوير البرامج (SDK) Unity من Firebase (الإصدار 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"):

      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.

طريقة تحديث إصدار حِزم تطوير البرامج (SDK) لمنصة Firebase Unity

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

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

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