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

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

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

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

تتوافق Firebase مع ‎.NET 4.x كخيار لإصدار تجريبي في Unity 2017 والإصدارات اللاحقة. تستخدِم مكوّنات Firebase الإضافية مكونات حزمة تطوير البرامج (SDK) من Parse لتوفير بعض فئات ‎.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. فعِّل ملفات DLL التالية لجميع المنصات:
    • 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 > معالج الإصدار > تحديث لتفعيل مكتبات الربط الديناميكي الصحيحة لمشروعك.

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

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

لذلك، يقدّم الإصدار 5.4.0 من حزمة تطوير البرامج (SDK) لنظام التشغيل Firebase Unity والإصدارات الأحدث مكتبات DLL لإعادة توجيه الأنواع التي تعيد توجيه أنواع Parse (على سبيل المثال، تنفيذ Parse لملف 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 Realtime Database اتصالات شبكة بروتوكول أمان طبقة النقل (TLS) باستخدام بنية برمجة التطبيقات .NET لشبكات الكمبيوتر. لا تعمل وظيفة بروتوكول أمان طبقة النقل (TLS) في Unity 2017.2 عند استخدام ‎.NET 4.6، ما يؤدي إلى تعطُّل مكوّن Realtime Database الإضافي في المحرّرات وعلى أجهزة الكمبيوتر المكتبي.

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

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

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

Cannot fit requested classes in a single dex file.

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

طرحت Unity نموذج Minification في العام 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 (حزمة تطوير البرامج (SDK) لـ Firebase Unity‏ 8.0.0 والإصدارات الأحدث)

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

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

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

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