تحديد المشاكل وحلّها الأسئلة الشائعة حول 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. أزِل ملفات 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 الصحيحة لمشروعك.

تجميع 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++) المضمّنة في الإصدار 2017.1.x من Unity بشكل صحيح ملفات 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.

الاتصال بالشبكات في 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

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

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

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

Cannot fit requested classes in a single dex file.

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

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

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

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

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

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

في أيار (مايو) 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 وحلّها - أخطاء الإنشاء في إزالة الترميز البرمجي المتوافق مع لغة Java القديمة.

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

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

  • من نافذة Terminal، يمكنك تشغيل 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)
    • هذه هي الطريقة المُقترَحة لإدارة الحِزم في الإصدار 2018.4 من Unity والإصدارات الأحدث.
    • استخدِم هذه الطريقة لتسهيل تحديثات الإصدارات المستقبلية وجعل Assets/ الدليل أكثر وضوحًا.

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