تحديد المشاكل وحلّها الأسئلة الشائعة حول Unity وFirebase

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

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

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

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

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

في حال استيراد مكوّن إضافي من 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 الإضافية مكونات تحليل حزمة 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 أو إصدار أحدث لاستخدام .NET 4.x في باستخدام IL2CPP.

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

ينشئ Firebase Realtime Database اتصالات شبكة بروتوكول أمان طبقة النقل (TLS) باستخدام شبكات .NET حزمة. تعطّل وظيفة بروتوكول أمان طبقة النقل (TLS) في Unity 2017.2 عند استخدام الإصدار NET 4.6 مما يتسبّب في تعذُّر المكوّن الإضافي Realtime Database في المحرِّرين وعلى أجهزة الكمبيوتر المكتبي.

لا يتوفر حل لهذه المشكلة، لذا يجب استخدام إصدار مختلف من 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. إذا كان مشروعك يستخدِم حزمة تطوير برامج (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 هو التخفيف من الصعوبات في 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

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

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

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