ইউনিটি এবং ফায়ারবেসের জন্য সমস্যা সমাধান এবং প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

এই পৃষ্ঠাটি ইউনিটি-নির্দিষ্ট সমস্যাগুলির জন্য টিপস এবং সমস্যা সমাধানের প্রস্তাব দেয় যা আপনি Firebase ব্যবহার করার সময় সম্মুখীন হতে পারেন।

অন্যান্য চ্যালেঞ্জ আছে বা নীচের রূপরেখা আপনার সমস্যা দেখতে পাচ্ছেন না? আরও প্যান-ফায়ারবেস বা পণ্য-নির্দিষ্ট প্রায়শই জিজ্ঞাসিত প্রশ্নগুলির জন্য প্রধান ফায়ারবেস প্রায়শই জিজ্ঞাসিত প্রশ্নগুলি পরীক্ষা করে দেখুন৷

Unity 2017.x এবং পরবর্তী ব্যবহার করার সময় .NET সামঞ্জস্য

Unity 2017 এবং পরবর্তীতে একটি পরীক্ষামূলক বিল্ড বিকল্প হিসাবে Firebase .NET 4.x সমর্থন করে। ফায়ারবেস প্লাগইনগুলি .NET-এর পূর্ববর্তী সংস্করণগুলিতে কিছু .NET 4.x ক্লাস প্রদান করতে পার্স SDK- এর উপাদানগুলি ব্যবহার করে৷

তাই, Firebase Unity SDK সংস্করণ 5.4.0 এবং পরবর্তীতে এমন প্লাগইনগুলি প্রদান করে যা Firebase Unity SDK-এর dotnet3 এবং dotnet4 ডিরেক্টরিতে .NET 3.x বা .NET 4.x-এর সাথে সামঞ্জস্যপূর্ণ।

আপনি যদি একটি Firebase প্লাগইন আমদানি করেন যা আপনার প্রকল্পে সক্রিয় করা .NET সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয়, আপনি .NET ফ্রেমওয়ার্কের কিছু প্রকার থেকে কম্পাইল ত্রুটি দেখতে পাবেন যা পার্স 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

আপনি যদি অন্য ফায়ারবেস প্লাগইন আমদানি করেন:

  • আপনার ইউনিটি প্রজেক্টে, আপনার প্রোজেক্টের জন্য সঠিক ডিএলএল সক্ষম করতে অ্যাসেটস > প্লে সার্ভিসেস রিসোলভার > সংস্করণ হ্যান্ডলার > আপডেটে নেভিগেট করুন।

ইউনিটি 2017.1 .NET 4.x প্রকল্পগুলিতে IL2CPP সংকলন

Unity 2017 এবং পরবর্তীতে একটি পরীক্ষামূলক বিল্ড বিকল্প হিসাবে Firebase .NET 4.x সমর্থন করে। ফায়ারবেস প্লাগইনগুলি .NET-এর পূর্ববর্তী সংস্করণগুলিতে কিছু .NET 4.x ক্লাস প্রদান করতে পার্স SDK- এর উপাদানগুলি ব্যবহার করে৷

তাই, ফায়ারবেস ইউনিটি SDK সংস্করণ 5.4.0 এবং পরবর্তীতে টাইপ ফরওয়ার্ডিং DLL প্রদান করে যা পার্সের ধরনগুলিকে (উদাহরণস্বরূপ, System.Threading.Tasks.Task এর পার্স বাস্তবায়ন) .NET ফ্রেমওয়ার্কে ফরোয়ার্ড করে। দুর্ভাগ্যবশত, IL2CPP (একটি ট্রান্সপাইলার যা C# তে C++ রূপান্তরিত করে) যা ইউনিটি 2017.1.x এ পাঠানো হয়েছে তা সঠিকভাবে টাইপ ফরওয়ার্ডিং DLL প্রক্রিয়া করে না যার ফলে নিম্নলিখিতগুলির মতো বিল্ড ত্রুটি দেখা দেয়:

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

ইউনিটি 2017.1-এ .NET 4.x IL2CPP বিল্ড ত্রুটিগুলির জন্য বর্তমানে কোনও সমাধান উপলব্ধ নেই, তাই IL2CPP-এর সাথে সংকলিত প্রকল্পগুলিতে .NET 4.x ব্যবহার করতে আপনাকে অবশ্যই ইউনিটি 2017.2 বা তার পরে আপগ্রেড করতে হবে৷

ইউনিটি 2017.2 নেটওয়ার্কিং

ফায়ারবেস রিয়েলটাইম ডেটাবেস .NET নেটওয়ার্কিং স্ট্যাক ব্যবহার করে TLS নেটওয়ার্ক সংযোগ তৈরি করে। .NET 4.6 ব্যবহার করার সময় ইউনিটি 2017.2-এ TLS কার্যকারিতা ভেঙে গেছে যার ফলে সম্পাদক এবং ডেস্কটপে রিয়েলটাইম ডেটাবেস প্লাগইন ব্যর্থ হয়।

এই সমস্যার জন্য কোন সমাধান নেই, তাই আপনাকে ইউনিটির একটি ভিন্ন সংস্করণ ব্যবহার করতে হবে, উদাহরণস্বরূপ সংস্করণ 2017.1 বা 2017.3।

Unity 2020-এ Firebase Android কনফিগার ফাইল নেই

গ্রেডল বিল্ড কাস্টমাইজ করার ক্ষমতা নেই এমন ইউনিটির সংস্করণগুলিকে সমর্থন করার জন্য, ফায়ারবেস এডিটর টুলটি Assets/Plugins/Android/Firebase/res/values/google-services.xml তৈরি করে একটি অ্যান্ড্রয়েড রিসোর্স হিসাবে প্যাকেজ করা 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 রয়েছে।

অ্যান্ড্রয়েড অ্যাপ তৈরি করার সময় একক ডেক্সের সমস্যা

অ্যান্ড্রয়েড অ্যাপ তৈরি করার সময়, আপনি একটি একক ডেক্স ফাইল থাকার সাথে সম্পর্কিত একটি বিল্ড ব্যর্থতার সম্মুখীন হতে পারেন। ত্রুটি বার্তাটি নীচের মত দেখায়, যদি আপনার প্রকল্পটি Gradle বিল্ড সিস্টেম ব্যবহার করার জন্য কনফিগার করা হয়।

Cannot fit requested classes in a single dex file.

ডালভিক এক্সিকিউটেবল ( .dex ) ফাইলগুলি অ্যান্ড্রয়েড অ্যাপ্লিকেশন ( .apk ) এর জন্য ক্লাসের সংজ্ঞা এবং তাদের সম্পর্কিত সহায়ক ডেটা রাখার জন্য ব্যবহৃত হয়। একটি একক ডেক্স ফাইল 65,536 পদ্ধতির রেফারেন্সে সীমাবদ্ধ। আপনার প্রোজেক্টের সমস্ত অ্যান্ড্রয়েড লাইব্রেরি থেকে মোট পদ্ধতির সংখ্যা এই সীমা ছাড়িয়ে গেলে বিল্ডটি ব্যর্থ হবে৷

ইউনিটি 2017.2 সালে মিনিফিকেশন চালু করেছে, যা অব্যবহৃত কোড বের করে দিতে প্রোগার্ড (বা ইউনিটির কিছু সংস্করণে অন্যান্য সরঞ্জাম) ব্যবহার করে, যা একটি একক ডেক্স ফাইলে উল্লেখ করা পদ্ধতির মোট সংখ্যা কমাতে পারে। প্লেয়ার সেটিংস > Android > প্রকাশনা সেটিংস > Minify- এ বিকল্পটি পাওয়া যাবে। ইউনিটির বিভিন্ন সংস্করণে বিকল্পগুলি আলাদা হতে পারে তাই অফিসিয়াল ইউনিটি ডকুমেন্টেশন দেখুন।

রেফারেন্সকৃত পদ্ধতির সংখ্যা এখনও সীমা ছাড়িয়ে গেলে, আরেকটি বিকল্প হল multidex সক্ষম করা। ইউনিটিতে এটি অর্জন করার একাধিক উপায় রয়েছে:

  • Player Settings অধীনে Custom Gradle Template সক্ষম থাকলে, mainTemplate.gradle সংশোধন করুন।
  • আপনি যদি রপ্তানি করা প্রকল্প তৈরি করতে অ্যান্ড্রয়েড স্টুডিও ব্যবহার করেন, মডিউল-স্তরের build.gradle ফাইলটি পরিবর্তন করুন।

মাল্টিডেক্স ব্যবহারকারী গাইডে আরও বিশদ পাওয়া যাবে।

ইউনিটি 2017 এবং ইউনিটি 2018 (ফায়ারবেস ইউনিটি SDK 8.0.0 এবং উচ্চতর) এ Android বিল্ডের জন্য Java 8 সমর্থন এবং ডিসুগারিং

2021 সালের মে মাসে (Firebase BoM v28.0.0), Firebase তার সমস্ত অ্যান্ড্রয়েড লাইব্রেরির জন্য ডিসুগারিং অক্ষম করে ( রিলিজ নোট দেখুন)। Firebase Unity SDK (8.0.0 এবং উচ্চতর) দিয়ে একটি Android অ্যাপ তৈরি করার সময়, আপনি নিম্নলিখিত বিল্ড ত্রুটি দেখতে পারেন:

> Error while dexing.
 The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle

এই পরিবর্তনটি শুধুমাত্র Unity 2017 এবং Unity 2018-এ Android বিল্ডগুলিকে প্রভাবিত করে৷ ইউনিটির নতুন সংস্করণ গ্রেডল বিল্ড ফাইলে ডিফল্টরূপে compileOptions ব্লক যোগ করে। ইউনিটি 2017 এবং ইউনিটি 2018-এ এই বিল্ড ত্রুটি ঠিক করতে, নিম্নলিখিতগুলির মধ্যে একটি করুন:

  • আপনার compileOptions টেমপ্লেটে একটি কম্পাইল অপশন ব্লক যোগ করুন:

    1. বিল্ড সিস্টেম হিসাবে Gradle ব্যবহার করুন।
    2. Player Settings অধীনে Custom Gradle Template সক্ষম করুন৷
    3. mainTemplate.gradle (অথবা মডিউল লেভেল build.gradle যদি অ্যান্ড্রয়েড স্টুডিওর জন্য একটি প্রকল্প রপ্তানি করা হয়) এ নিম্নলিখিত লাইনগুলি যোগ করুন:

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • বিকল্পভাবে, আপনার Android প্রকল্পের জন্য minSdkVersion বাড়িয়ে 26 বা তার বেশি করুন।

এছাড়াও দেখুন অ্যান্ড্রয়েড সমস্যা সমাধান - ডিসুগারিং বিল্ড ব্যর্থতা

Cocoapods-এর সাথে iOS-এর জন্য তৈরি করার সময় সমস্যা

iOS-এর জন্য তৈরি করার সময়, ভাষা লোকেল বা UTF-8 এনকোডিং সম্পর্কে একটি ত্রুটির সাথে Cocoapod ইনস্টলেশন ব্যর্থ হতে পারে। বর্তমানে সমস্যাটির চারপাশে কাজ করার বিভিন্ন উপায় রয়েছে।

  • টার্মিনাল থেকে, সরাসরি pod install চালান এবং ফলস্বরূপ xcworkspace ফাইলটি খুলুন।

  • Cocoapods-এর সংস্করণ 1.10.2-এ ডাউনগ্রেড করুন। সমস্যাটি শুধুমাত্র 1.11 এবং নতুন সংস্করণে বিদ্যমান।

  • আপনার ~/.bash_profile বা সমতুল্য, export LANG=en_US.UTF-8

Firebase Unity SDK-এর সংস্করণ কীভাবে আপডেট করবেন

Firebase Unity SDK-এর সংস্করণগুলি আপডেট করার প্রক্রিয়া প্রাথমিকভাবে কীভাবে আমদানি করা হয়েছিল তার উপর নির্ভর করে। এখানে দুটি বিকল্প আমদানি পদ্ধতি রয়েছে:

  • আপনার প্রকল্পের Assets/ ডিরেক্টরির অধীনে .unitypackage ফাইল আমদানি করা হচ্ছে
  • ইউনিটি প্যাকেজ ম্যানেজার (UPM) ব্যবহার করে আমদানি করা হচ্ছে
    • ইউনিটি 2018.4+ এ প্যাকেজগুলি পরিচালনা করার জন্য এটি প্রস্তাবিত উপায়।
    • ভবিষ্যৎ সংস্করণ আপডেট সহজতর করতে এবং আপনার Assets/ ডিরেক্টরি ক্লিনার করতে এই পদ্ধতিটি ব্যবহার করুন।

আপনার ইউনিটি প্রজেক্টে, আপনার সমস্ত ফায়ারবেস প্যাকেজ পরিচালনা করার জন্য আপনার শুধুমাত্র একটি আমদানি পদ্ধতি ব্যবহার করা উচিত। নীচের নির্দেশাবলী শুধুমাত্র পৃথক প্যাকেজের সংস্করণ আপডেট করতেই নয়, প্রয়োজনে, প্যাকেজ ব্যবস্থাপনাকে UPM (প্রস্তাবিত আমদানি পদ্ধতি) এ স্থানান্তর করতেও ব্যবহার করা যেতে পারে।