উন্নত ক্র্যাশলাইটিক্স বৈশিষ্ট্যগুলি ব্যবহার করে একটি ইউনিটি গেমের ক্র্যাশগুলি বুঝুন৷

1. ভূমিকা

এই কোডল্যাবে, আপনি শিখবেন কিভাবে Crashlytics এর উন্নত বৈশিষ্ট্যগুলি ব্যবহার করতে হয় যা আপনাকে ক্র্যাশ এবং এর কারণ হতে পারে এমন পরিস্থিতি সম্পর্কে আরও ভাল দৃশ্যমানতা দেবে।

আপনি একটি নমুনা গেম, MechaHamster: Level Up with Firebase Edition- এ নতুন কার্যকারিতা যোগ করবেন। এই নমুনা গেমটি ক্লাসিক Firebase গেম MechaHamster-এর একটি নতুন সংস্করণ যা এর বেশিরভাগ অন্তর্নির্মিত Firebase কার্যকারিতা সরিয়ে দেয়, যা আপনাকে তাদের জায়গায় Firebase-এর নতুন ব্যবহার বাস্তবায়নের সুযোগ দেয়।

আপনি গেমটিতে একটি ডিবাগ মেনু যোগ করবেন। এই ডিবাগ মেনু আপনার তৈরি করা পদ্ধতিগুলিকে কল করে এবং আপনাকে Crashlytics-এর বিভিন্ন কার্যকারিতা অনুশীলন করতে দেয়। এই পদ্ধতিগুলি আপনাকে দেখাবে কিভাবে কাস্টম কী, কাস্টম লগ, নন-ফ্যাটাল ত্রুটি এবং আরও অনেক কিছু ব্যবহার করে আপনার স্বয়ংক্রিয় ক্র্যাশ রিপোর্টগুলি টীকা করতে হয়।

গেমটি তৈরি করার পরে, আপনি ডিবাগ মেনু ব্যবহার করবেন এবং ফলাফলগুলি পরীক্ষা করে দেখবেন যে তারা আপনার গেমটি কীভাবে চলে তার অনন্য দৃশ্যটি কীভাবে প্রদান করে।

তুমি কি শিখবে

  • ক্র্যাশলিটিক্স স্বয়ংক্রিয়ভাবে যে ধরণের ত্রুটি ধরে ফেলে।
  • অতিরিক্ত ত্রুটি যা উদ্দেশ্যমূলকভাবে রেকর্ড করা যেতে পারে।
  • এই ত্রুটিগুলি বোঝা সহজ করার জন্য কীভাবে আরও তথ্য যোগ করা যায়।

তোমার যা লাগবে

  • ইউনিটি (ন্যূনতম প্রস্তাবিত সংস্করণ ২০১৯+) নিম্নলিখিত যেকোনো একটি বা উভয়ের সাথে:
    • iOS বিল্ড সাপোর্ট
    • অ্যান্ড্রয়েড বিল্ড সাপোর্ট
  • (শুধুমাত্র অ্যান্ড্রয়েডের জন্য) ফায়ারবেস সিএলআই (ক্র্যাশ রিপোর্টের জন্য প্রতীক আপলোড করতে ব্যবহৃত)

2. আপনার উন্নয়ন পরিবেশ সেট আপ করুন

নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে কিভাবে লেভেল আপ উইথ ফায়ারবেস কোড ডাউনলোড করতে হয় এবং ইউনিটিতে এটি খুলতে হয়।

মনে রাখবেন যে এই লেভেল আপ উইথ ফায়ারবেস স্যাম্পল গেমটি আরও বেশ কয়েকটি ফায়ারবেস + ইউনিটি কোডল্যাব ব্যবহার করে, তাই আপনি হয়তো ইতিমধ্যেই এই বিভাগের কাজগুলি সম্পন্ন করেছেন। যদি তাই হয়, তাহলে আপনি সরাসরি এই পৃষ্ঠার শেষ ধাপে যেতে পারেন: "অ্যাড ফায়ারবেস SDKs ফর ইউনিটি"।

কোডটি ডাউনলোড করুন

কমান্ড লাইন থেকে এই কোডল্যাবের GitHub রিপোজিটরিটি ক্লোন করুন:

git clone https://github.com/firebase/level-up-with-firebase.git

বিকল্পভাবে, যদি আপনার গিট ইনস্টল না থাকে, তাহলে আপনি রিপোজিটরিটি একটি জিপ ফাইল হিসেবে ডাউনলোড করতে পারেন।

ইউনিটি এডিটরে Firebase দিয়ে লেভেল আপ খুলুন

  1. ইউনিটি হাব চালু করুন এবং প্রজেক্টস ট্যাব থেকে, Open এর পাশের ড্রপডাউন তীরটিতে ক্লিক করুন।
  2. "ডিস্ক থেকে প্রকল্প যোগ করুন" এ ক্লিক করুন।
  3. কোডটি ধারণকারী ডিরেক্টরিতে নেভিগেট করুন, এবং তারপর OK ক্লিক করুন।
  4. যদি অনুরোধ করা হয়, তাহলে ব্যবহার করার জন্য একটি ইউনিটি এডিটর সংস্করণ এবং আপনার লক্ষ্য প্ল্যাটফর্ম (অ্যান্ড্রয়েড বা iOS) নির্বাচন করুন।
  5. প্রকল্পের নাম, level-up-with-firebase এ ক্লিক করুন, এবং প্রকল্পটি ইউনিটি এডিটরে খুলবে।
  6. যদি আপনার এডিটর স্বয়ংক্রিয়ভাবে এটি না খোলে, তাহলে ইউনিটি এডিটরের প্রজেক্ট ট্যাবে Assets > Hamster-MainGameScene খুলুন।
    ff4ea3f3c0d29379.png দ্বারা পোস্ট করা 1 অনুবাদ, বিস্তারিত সব অনুবাদ

ইউনিটি ইনস্টল এবং ব্যবহার সম্পর্কে আরও তথ্যের জন্য, ওয়ার্কিং ইন ইউনিটি দেখুন।

৩. আপনার ইউনিটি প্রজেক্টে ফায়ারবেস যোগ করুন

একটি ফায়ারবেস প্রকল্প তৈরি করুন

  1. আপনার গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেস কনসোলে সাইন ইন করুন।
  2. একটি নতুন প্রকল্প তৈরি করতে বোতামটি ক্লিক করুন, এবং তারপর একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ, Mechahamster Codelab )।
  3. চালিয়ে যান ক্লিক করুন।
  4. যদি অনুরোধ করা হয়, তাহলে Firebase শর্তাবলী পর্যালোচনা করুন এবং গ্রহণ করুন, এবং তারপর Continue এ ক্লিক করুন।
  5. (ঐচ্ছিক) Firebase কনসোলে ("Gemini in Firebase" নামে পরিচিত) AI সহায়তা সক্ষম করুন।
  6. এই কোডল্যাবের জন্য, Firebase পণ্যগুলি সর্বোত্তমভাবে ব্যবহার করার জন্য আপনার Google Analytics প্রয়োজন, তাই Google Analytics বিকল্পের জন্য টগল চালু রাখুন। Google Analytics সেট আপ করতে অন-স্ক্রিন নির্দেশাবলী অনুসরণ করুন।
  7. Create project এ ক্লিক করুন, আপনার province করার জন্য অপেক্ষা করুন, এবং তারপর Continue এ ক্লিক করুন।

Firebase-এ আপনার অ্যাপ নিবন্ধন করুন

  1. এখনও Firebase কনসোলে , প্রকল্পের ওভারভিউ পৃষ্ঠার কেন্দ্র থেকে, সেটআপ ওয়ার্কফ্লো চালু করতে ইউনিটি আইকনে ক্লিক করুন অথবা, যদি আপনি ইতিমধ্যেই আপনার Firebase প্রকল্পে একটি অ্যাপ যোগ করে থাকেন, তাহলে প্ল্যাটফর্ম বিকল্পগুলি প্রদর্শন করতে অ্যাপ যোগ করুন ক্লিক করুন।
  2. অ্যাপল (iOS) এবং অ্যান্ড্রয়েড বিল্ড টার্গেট উভয়ই নিবন্ধন করতে নির্বাচন করুন।
  3. আপনার ইউনিটি প্রজেক্টের প্ল্যাটফর্ম-নির্দিষ্ট আইডি(গুলি) লিখুন। এই কোডল্যাবের জন্য, নিম্নলিখিতগুলি লিখুন:
  4. (ঐচ্ছিক) আপনার ইউনিটি প্রজেক্টের প্ল্যাটফর্ম-নির্দিষ্ট ডাকনাম(গুলি) লিখুন।
  5. রেজিস্টার অ্যাপে ক্লিক করুন, এবং তারপর ডাউনলোড কনফিগারেশন ফাইল বিভাগে যান।

ফায়ারবেস কনফিগারেশন ফাইল যোগ করুন

Register app এ ক্লিক করার পর, আপনাকে দুটি কনফিগারেশন ফাইল ডাউনলোড করতে বলা হবে (প্রতিটি বিল্ড টার্গেটের জন্য একটি কনফিগারেশন ফাইল)। Firebase এর সাথে সংযোগ স্থাপনের জন্য আপনার Unity প্রকল্পের এই ফাইলগুলিতে Firebase মেটাডেটা প্রয়োজন।

  1. উপলব্ধ উভয় কনফিগারেশন ফাইল ডাউনলোড করুন:
    • অ্যাপল (iOS)-এর জন্য : GoogleService-Info.plist ডাউনলোড করুন।
    • অ্যান্ড্রয়েডের জন্য : google-services.json ডাউনলোড করুন।
  2. আপনার ইউনিটি প্রজেক্টের প্রজেক্ট উইন্ডোটি খুলুন, তারপর উভয় কনফিগারেশন ফাইলই অ্যাসেটস ফোল্ডারে সরান।
  3. ফায়ারবেস কনসোলে ফিরে, সেটআপ ওয়ার্কফ্লোতে, পরবর্তী ক্লিক করুন এবং ইউনিটির জন্য ফায়ারবেস SDK যোগ করুন।

ইউনিটির জন্য ফায়ারবেস SDK যোগ করুন

  1. Firebase কনসোলে Firebase Unity SDK ডাউনলোড করুন -এ ক্লিক করুন।
  2. সুবিধাজনক কোথাও SDK আনজিপ করুন।
  3. আপনার ওপেন ইউনিটি প্রজেক্টে, Assets > Import Package > Custom Package এ নেভিগেট করুন।
  4. প্যাকেজ আমদানি করুন ডায়ালগে, আনজিপ করা SDK ধারণকারী ডিরেক্টরিতে যান, FirebaseAnalytics.unitypackage নির্বাচন করুন, এবং তারপর Open এ ক্লিক করুন।
  5. প্রদর্শিত ইমপোর্ট ইউনিটি প্যাকেজ ডায়ালগ থেকে, ইমপোর্ট এ ক্লিক করুন।
  6. FirebaseCrashlytics.unitypackage আমদানি করতে পূর্ববর্তী পদক্ষেপগুলি পুনরাবৃত্তি করুন।
  7. Firebase কনসোলে ফিরে যান এবং সেটআপ ওয়ার্কফ্লোতে, Next এ ক্লিক করুন।

ইউনিটি প্রকল্পে ফায়ারবেস SDK যোগ করার বিষয়ে আরও তথ্যের জন্য, অতিরিক্ত ইউনিটি ইনস্টলেশন বিকল্পগুলি দেখুন।

৪. আপনার ইউনিটি প্রজেক্টে ক্র্যাশলিটিক্স সেট আপ করুন

ইউনিটি প্রোজেক্টে Crashlytics ব্যবহার করার জন্য, আপনাকে আরও কয়েকটি সেটআপ ধাপ অনুসরণ করতে হবে। অবশ্যই, আপনাকে SDK চালু করতে হবে। তবে, আপনাকে আপনার প্রতীকগুলি আপলোড করতে হবে যাতে আপনি Firebase কনসোলে প্রতীকী স্ট্যাকট্রেস দেখতে পারেন, এবং Firebase আপনার ক্র্যাশ ইভেন্টগুলি পাচ্ছে কিনা তা নিশ্চিত করার জন্য আপনাকে একটি পরীক্ষামূলক ক্র্যাশ করতে হবে।

ক্র্যাশলিটিক্স SDK আরম্ভ করুন

  1. Assets/Hamster/Scripts/MainGame.cs এ, নিম্নলিখিত using বিবৃতি যোগ করুন:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    
    প্রথম মডিউলটি আপনাকে Crashlytics SDK থেকে পদ্ধতি ব্যবহার করার অনুমতি দেয় এবং দ্বিতীয়টিতে C# Tasks API এর কিছু এক্সটেনশন রয়েছে। উভয় স্টেটমেন্ট using না করে নিম্নলিখিত কোডটি কাজ করবে না।
  2. এখনও MainGame.cs এ আছে, InitializeFirebaseAndStartGame() কল করে বিদ্যমান Start() পদ্ধতিতে Firebase initialization যোগ করুন:
    void Start()
    {
      Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
      InitializeFirebaseAndStartGame();
    }
    
  3. এবং আবার, MainGame.cs তে, InitializeFirebaseAndStartGame() খুঁজুন, একটি অ্যাপ ভেরিয়েবল ঘোষণা করুন, এবং তারপর পদ্ধতির বাস্তবায়নটি এভাবে ওভাররাইট করুন:
    public Firebase.FirebaseApp app = null;
    
    // Begins the firebase initialization process and afterwards, opens the main menu.
    private void InitializeFirebaseAndStartGame()
    {
      Firebase.FirebaseApp.CheckAndFixDependenciesAsync()
      .ContinueWithOnMainThread(
        previousTask => 
        {
          var dependencyStatus = previousTask.Result;
          if (dependencyStatus == Firebase.DependencyStatus.Available) {
            // Create and hold a reference to your FirebaseApp,
            app = Firebase.FirebaseApp.DefaultInstance;
            // Set the recommended Crashlytics uncaught exception behavior.
            Crashlytics.ReportUncaughtExceptionsAsFatal = true;
            InitializeCommonDataAndStartGame();
          } else {
            UnityEngine.Debug.LogError(
              $"Could not resolve all Firebase dependencies: {dependencyStatus}\n" +
              "Firebase Unity SDK is not safe to use here");
          }
        });
    }
    

এখানে ইনিশিয়ালাইজেশন লজিক স্থাপন করলে ফায়ারবেস নির্ভরতা শুরু হওয়ার আগে প্লেয়ারের ইন্টারঅ্যাকশন বাধাগ্রস্ত হয়।

অপ্রয়োজনীয় ব্যতিক্রমগুলিকে মারাত্মক হিসাবে রিপোর্ট করার সুবিধা এবং প্রভাবগুলি Crashlytics FAQ- এ আলোচনা করা হয়েছে।

আপনার প্রকল্প তৈরি করুন এবং প্রতীক আপলোড করুন

iOS এবং Android অ্যাপের জন্য প্রতীক তৈরি এবং আপলোড করার ধাপগুলি আলাদা।

iOS+ (অ্যাপল প্ল্যাটফর্ম)

  1. বিল্ড সেটিংস ডায়ালগ থেকে, আপনার প্রকল্পটি একটি Xcode ওয়ার্কস্পেসে রপ্তানি করুন।
  2. আপনার অ্যাপ তৈরি করুন।
    অ্যাপল প্ল্যাটফর্মের জন্য, ফায়ারবেস ইউনিটি এডিটর প্লাগইন স্বয়ংক্রিয়ভাবে আপনার এক্সকোড প্রকল্পটি কনফিগার করে প্রতিটি বিল্ডের জন্য ফায়ারবেস সার্ভারে একটি ক্র্যাশলিটিক্স-সামঞ্জস্যপূর্ণ প্রতীক ফাইল তৈরি এবং আপলোড করার জন্য। ক্র্যাশলিটিক্স ড্যাশবোর্ডে প্রতীকী স্ট্যাক ট্রেস দেখতে এই প্রতীক তথ্য প্রয়োজন।

অ্যান্ড্রয়েড

  1. (শুধুমাত্র প্রাথমিক সেটআপের সময়, প্রতিটি বিল্ডের জন্য নয়) আপনার বিল্ড সেট আপ করুন:
    1. আপনার প্রোজেক্ট ডিরেক্টরির রুটে Builds নামে একটি নতুন ফোল্ডার তৈরি করুন (অর্থাৎ, আপনার Assets ডিরেক্টরির একটি ভাইবোন হিসেবে), এবং তারপর Android নামে একটি সাব-ফোল্ডার তৈরি করুন।
    2. ফাইল > বিল্ড সেটিংস > প্লেয়ার সেটিংস > কনফিগারেশনে , স্ক্রিপ্টিং ব্যাকএন্ডকে IL2CPP তে সেট করুন।
      • IL2CPP সাধারণত বিল্ডগুলিকে ছোট করে এবং উন্নত কর্মক্ষমতা প্রদান করে।
      • IL2CPP হল iOS-এ একমাত্র উপলব্ধ বিকল্প এবং এখানে এটি নির্বাচন করলে দুটি প্ল্যাটফর্ম আরও ভাল সমতায় থাকবে এবং দুটির মধ্যে ডিবাগিং পার্থক্য (যদি আপনি উভয়ই তৈরি করতে চান) সহজ করে তুলবে।
  2. আপনার অ্যাপ তৈরি করুন। ফাইল > বিল্ড সেটিংসে , নিম্নলিখিতগুলি সম্পূর্ণ করুন:
    1. নিশ্চিত করুন যে Create symbols.zip চেক করা আছে (অথবা যদি ড্রপডাউন সহ প্রদর্শিত হয়, তাহলে Debugging নির্বাচন করুন)।
    2. ইউনিটি এডিটর থেকে সরাসরি আপনার তৈরি করা Builds/Android সাব-ফোল্ডারে আপনার APK তৈরি করুন।
  3. আপনার বিল্ড শেষ হয়ে গেলে, আপনাকে একটি Crashlytics-সামঞ্জস্যপূর্ণ প্রতীক ফাইল তৈরি করতে হবে এবং এটি Firebase সার্ভারে আপলোড করতে হবে। Crashlytics ড্যাশবোর্ডে নেটিভ লাইব্রেরি ক্র্যাশের জন্য প্রতীকী স্ট্যাক ট্রেস দেখতে এই প্রতীক তথ্য প্রয়োজন।

    নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে এই প্রতীক ফাইলটি তৈরি এবং আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
    • FIREBASE_APP_ID : আপনার Firebase Android অ্যাপ আইডি (আপনার প্যাকেজের নাম নয়)। এই মানটি google-services.json ফাইলে খুঁজুন যা আপনি আগে ডাউনলোড করেছিলেন। এটি mobilesdk_app_id মান।
      উদাহরণ Firebase Android অ্যাপ আইডি: 1:567383003300:android:17104a2ced0c9b9b
    • PATH/TO/SYMBOLS : আপনার বিল্ড শেষ হওয়ার পরে Builds/Android ডিরেক্টরিতে তৈরি জিপ করা প্রতীক ফাইলের পথ (উদাহরণস্বরূপ: Builds/Android/myapp-1.0-v100.symbols.zip )।

সেটআপ শেষ করতে জোর করে একটি পরীক্ষামূলক ক্র্যাশ করুন

Crashlytics সেট আপ করা শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে, আপনাকে একটি পরীক্ষামূলক ক্র্যাশ জোর করে করতে হবে।

  1. MainGameScene-EmptyObject GameObject এডিটর Hierarchy- তে খুঁজুন, এতে নিম্নলিখিত স্ক্রিপ্টটি যোগ করুন এবং তারপর দৃশ্যটি সংরক্ষণ করুন। আপনার অ্যাপটি চালানোর কয়েক সেকেন্ড পরে এই স্ক্রিপ্টটি একটি পরীক্ষামূলক ক্র্যাশ ঘটাবে।
    using System;
    using UnityEngine;
    
    public class CrashlyticsTester : MonoBehaviour {
        // Update is called once per frame
        void Update()
        {
            // Tests your Crashlytics implementation by
            // throwing an exception every 60 frames.
            // You should see reports in the Firebase console
            // a few minutes after running your app with this method.
            if(Time.frameCount >0 && (Time.frameCount%60) == 0)
            {
                throw new System.Exception("Test exception; please ignore");
            }
        }
    }
    
  2. আপনার অ্যাপ তৈরি করুন এবং বিল্ড শেষ হওয়ার পর প্রতীক তথ্য আপলোড করুন।
    • iOS : Firebase Unity Editor প্লাগইন স্বয়ংক্রিয়ভাবে আপনার Xcode প্রকল্পটিকে আপনার প্রতীক ফাইল আপলোড করার জন্য কনফিগার করে।
    • অ্যান্ড্রয়েড : আপনার প্রতীক ফাইল আপলোড করতে Firebase CLI crashlytics:symbols:upload কমান্ডটি চালান।
  3. আপনার অ্যাপটি চালান। আপনার অ্যাপটি চালু হয়ে গেলে, ডিভাইস লগটি দেখুন এবং CrashlyticsTester থেকে ব্যতিক্রমটি ট্রিগার হওয়ার জন্য অপেক্ষা করুন।
    • iOS : Xcode এর নিচের অংশে লগ দেখুন।
    • অ্যান্ড্রয়েড : টার্মিনালে নিম্নলিখিত কমান্ডটি চালিয়ে লগগুলি দেখুন: adb logcat
  4. ব্যতিক্রমটি দেখতে Crashlytics ড্যাশবোর্ডে যান! ড্যাশবোর্ডের নীচের দিকে সমস্যা সারণীতে আপনি এটি দেখতে পাবেন। কোডল্যাবে পরে, আপনি এই প্রতিবেদনগুলি কীভাবে অন্বেষণ করবেন সে সম্পর্কে আরও শিখবেন।
  5. ইভেন্টটি Crashlytics-এ আপলোড করা হয়েছে কিনা তা নিশ্চিত হয়ে গেলে, আপনি যে EmptyObject GameObject এর সাথে এটি সংযুক্ত করেছেন সেটি নির্বাচন করুন, শুধুমাত্র CrashlyticsTester উপাদানটি সরিয়ে ফেলুন এবং তারপর দৃশ্যটিকে তার আসল অবস্থায় ফিরিয়ে আনতে সংরক্ষণ করুন।

৫. ডিবাগ মেনু সক্ষম করুন এবং বুঝুন

এখন পর্যন্ত, আপনি আপনার ইউনিটি প্রজেক্টে Crashlytics যোগ করেছেন, সেটআপ সম্পন্ন করেছেন এবং নিশ্চিত করেছেন যে Crashlytics SDK Firebase-এ ইভেন্ট আপলোড করছে। আপনি এখন আপনার ইউনিটি প্রজেক্টে একটি মেনু তৈরি করবেন যা আপনার গেমে আরও উন্নত Crashlytics কার্যকারিতা কীভাবে ব্যবহার করবেন তা প্রদর্শন করবে। Level Up with Firebase Unity প্রজেক্টে ইতিমধ্যেই একটি লুকানো ডিবাগ মেনু রয়েছে যা আপনি দৃশ্যমান করবেন এবং কার্যকারিতাটি লিখবেন।

ডিবাগ মেনু সক্রিয় করুন

ডিবাগ মেনু অ্যাক্সেস করার বোতামটি আপনার ইউনিটি প্রজেক্টে বিদ্যমান, কিন্তু বর্তমানে এটি সক্রিয় করা হয়নি। MainMenu প্রিফ্যাব থেকে এটি অ্যাক্সেস করার জন্য আপনাকে বোতামটি সক্রিয় করতে হবে:

  1. ইউনিটি এডিটরে, MainMenu নামের প্রিফ্যাবটি খুলুন। 4148538cbe9f36c5.png সম্পর্কে
  2. প্রিফ্যাব হায়ারার্কিতে, DebugMenuButton নামক নিষ্ক্রিয় সাব-অবজেক্টটি খুঁজুন এবং তারপর এটি নির্বাচন করুন। 816f8f9366280f6c.png সম্পর্কে
  3. DebugMenuButton লেখা টেক্সট ফিল্ডের বাম দিকে উপরের বাম কোণে থাকা বক্সটিতে টিক চিহ্ন দিয়ে DebugMenuButton সক্রিয় করুন। 8a8089d2b4886da2.png সম্পর্কে
  4. প্রিফ্যাবটি সংরক্ষণ করুন।
  5. এডিটর অথবা আপনার ডিভাইসে গেমটি চালান। মেনুটি এখন অ্যাক্সেসযোগ্য হওয়া উচিত।

ডিবাগ মেনুর জন্য পদ্ধতির বডিগুলির পূর্বরূপ দেখুন এবং বুঝুন।

এই কোডল্যাবে পরে, আপনি কিছু পূর্ব-কনফিগার করা ডিবাগ ক্র্যাশলিটিক্স পদ্ধতির জন্য পদ্ধতির বডি লিখবেন। তবে, লেভেল আপ উইথ ফায়ারবেস ইউনিটি প্রকল্পে, পদ্ধতিগুলি DebugMenu.cs এ সংজ্ঞায়িত করা হয়েছে এবং সেখান থেকে কল করা হয়েছে।

যদিও এই পদ্ধতিগুলির মধ্যে কিছু Crashlytics পদ্ধতি এবং throw ত্রুটি উভয়ই কল করবে, Crashlytics-এর এই ত্রুটিগুলি ধরার ক্ষমতা প্রথমে সেই পদ্ধতিগুলি কল করার উপর নির্ভর করে না। বরং, স্বয়ংক্রিয়ভাবে ত্রুটি ধরা থেকে তৈরি ক্র্যাশ রিপোর্টগুলি এই পদ্ধতিগুলি দ্বারা যোগ করা তথ্য দ্বারা উন্নত করা হবে।

DebugMenu.cs খুলুন, এবং তারপর নিম্নলিখিত পদ্ধতিগুলি খুঁজুন:

ক্র্যাশলিটিক্স সমস্যা তৈরি এবং টীকা দেওয়ার পদ্ধতি:

  • CrashNow
  • LogNonfatalError
  • LogStringsAndCrashNow
  • SetAndOverwriteCustomKeyThenCrash
  • SetLogsAndKeysBeforeANR

ডিবাগিংয়ে সহায়তা করার জন্য অ্যানালিটিক্স ইভেন্ট লগ করার পদ্ধতি:

  • LogProgressEventWithStringLiterals
  • LogIntScoreWithBuiltInEventAndParams

এই কোডল্যাবের পরবর্তী ধাপগুলিতে, আপনি এই পদ্ধতিগুলি বাস্তবায়ন করবেন এবং শিখবেন কীভাবে এগুলি গেম ডেভেলপমেন্টে ঘটতে পারে এমন নির্দিষ্ট পরিস্থিতি মোকাবেলায় সহায়তা করে।

৬. উন্নয়নের সময় ক্র্যাশ রিপোর্ট সরবরাহ নিশ্চিত করুন।

এই ডিবাগ পদ্ধতিগুলি বাস্তবায়ন শুরু করার আগে এবং ক্র্যাশ রিপোর্টগুলিকে কীভাবে প্রভাবিত করে তা দেখার আগে, নিশ্চিত করুন যে আপনি বুঝতে পেরেছেন যে কীভাবে ইভেন্টগুলি Crashlytics-এ রিপোর্ট করা হয়।

Unity প্রজেক্টের ক্ষেত্রে, আপনার গেমের ক্র্যাশ এবং এক্সেপশন ইভেন্টগুলি তাৎক্ষণিকভাবে ডিস্কে লেখা হয়। যেসব ব্যতিক্রম আপনার গেম ক্র্যাশ করে না (উদাহরণস্বরূপ, গেম লজিকে আনক্যাচড C# এক্সেপশন), আপনি Crashlytics SDK কে Crashlytics.ReportUncaughtExceptionsAsFatal প্রোপার্টি true এ সেট করে মারাত্মক ইভেন্ট হিসাবে রিপোর্ট করতে পারেন যেখানে আপনি আপনার Unity প্রজেক্টে Crashlytics ইনিশিয়ালাইজ করেন । এই ইভেন্টগুলি রিয়েল-টাইমে Crashlytics-এ রিপোর্ট করা হয়, কোনও এন্ড-ইউজারকে গেমটি রিস্টার্ট করার প্রয়োজন হয় না। মনে রাখবেন যে নেটিভ ক্র্যাশগুলি সর্বদা মারাত্মক ইভেন্ট হিসাবে রিপোর্ট করা হয় এবং যখন একজন এন্ড-ইউজার গেমটি রিস্টার্ট করে তখন পাঠানো হয়।

এছাড়াও, বিভিন্ন রানটাইম পরিবেশ কীভাবে Crashlytics তথ্য Firebase-এ পাঠায় তার মধ্যে নিম্নলিখিত ছোট—কিন্তু উল্লেখযোগ্য—পার্থক্যগুলি সম্পর্কে সচেতন থাকুন:

iOS সিমুলেটর:

  • সিমুলেটর থেকে Xcode বিচ্ছিন্ন করলেই Crashlytics তথ্য রিপোর্ট করা হয়। যদি Xcode সংযুক্ত থাকে, তাহলে এটি আপস্ট্রিমে ত্রুটিগুলি ধরে, তথ্য সরবরাহে বাধা দেয়।

মোবাইল ফিজিক্যাল ডিভাইস (অ্যান্ড্রয়েড এবং আইওএস):

  • অ্যান্ড্রয়েড-নির্দিষ্ট: ANR গুলি শুধুমাত্র Android 11+ এ রিপোর্ট করা হয়। ANR এবং অ-মারাত্মক ঘটনাগুলি পরবর্তী রানে রিপোর্ট করা হয়।

ইউনিটি এডিটর:

CrashNow() তে একটি বোতাম টিপে আপনার গেমটি ক্র্যাশ করা পরীক্ষা করুন।

আপনার গেমে Crashlytics সেট আপ হওয়ার পর, Crashlytics SDK স্বয়ংক্রিয়ভাবে ক্র্যাশ এবং ধরা না পড়া ব্যতিক্রমগুলি রেকর্ড করে এবং বিশ্লেষণের জন্য Firebase-এ আপলোড করে। এবং রিপোর্টগুলি Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রদর্শিত হয়।

  1. এটি আসলেই স্বয়ংক্রিয় তা প্রমাণ করার জন্য: DebugMenu.cs খুলুন, এবং তারপর CrashNow() পদ্ধতিটি নিম্নরূপ ওভাররাইট করুন:
    void CrashNow()
    {
        TestCrash();
    }
    
  2. আপনার অ্যাপ তৈরি করুন।
  3. (শুধুমাত্র অ্যান্ড্রয়েড) নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. ক্র্যাশ নাউ বোতামে ট্যাপ করুন, এবং ক্র্যাশ রিপোর্টটি কীভাবে দেখতে এবং ব্যাখ্যা করতে হয় তা জানতে এই কোডল্যাবের পরবর্তী ধাপে যান।

৭. ফায়ারবেস কনসোলে সমস্যা প্রতিবেদনগুলি বুঝুন

যখন আপনার ক্র্যাশ রিপোর্ট দেখার কথা আসে, তখন সেগুলি থেকে সর্বাধিক সুবিধা কীভাবে পাবেন সে সম্পর্কে আপনার আরও কিছু জানা দরকার। আপনার লেখা প্রতিটি পদ্ধতিতে Crashlytics রিপোর্টে বিভিন্ন ধরণের তথ্য কীভাবে যোগ করতে হয় তা দেখানো হবে।

  1. "Crash Now" বোতামে ট্যাপ করুন, এবং তারপর আপনার অ্যাপটি পুনরায় চালু করুন।
  2. Crashlytics ড্যাশবোর্ডে যান। ড্যাশবোর্ডের নীচের দিকে সমস্যা সারণীতে স্ক্রোল করুন যেখানে Crashlytics একই মূল কারণযুক্ত ইভেন্টগুলিকে "সমস্যা" তে ভাগ করে।
  3. সমস্যা সারণীতে তালিকাভুক্ত নতুন সমস্যাটিতে ক্লিক করুন। এটি করলে Firebase-এ পাঠানো প্রতিটি পৃথক ইভেন্টের ইভেন্ট সারাংশ প্রদর্শিত হবে।

    আপনি নিচের স্ক্রিনক্যাপের মতো কিছু দেখতে পাবেন। লক্ষ্য করুন কিভাবে ইভেন্ট সারাংশে ক্র্যাশের দিকে পরিচালিত কলের স্ট্যাক ট্রেসটি স্পষ্টভাবে দেখানো হয়েছে। 40c96abe7f90c3aa.png সম্পর্কে

অতিরিক্ত মেটাডেটা

আরেকটি সহায়ক ট্যাব হল ইউনিটি মেটাডেটা ট্যাব। এই বিভাগটি আপনাকে যে ডিভাইসে ঘটনাটি ঘটেছে তার বৈশিষ্ট্যগুলি সম্পর্কে অবহিত করে, যার মধ্যে রয়েছে ভৌত বৈশিষ্ট্য, CPU মডেল/স্পেসিফিকেশন এবং সকল ধরণের GPU মেট্রিক্স।

এই ট্যাবের তথ্য কার্যকর হতে পারে এমন একটি উদাহরণ এখানে দেওয়া হল:
কল্পনা করুন আপনার গেমটি একটি নির্দিষ্ট লুক অর্জনের জন্য প্রচুর পরিমাণে শেডার ব্যবহার করে, কিন্তু সব ফোনে এই বৈশিষ্ট্যটি রেন্ডার করতে সক্ষম GPU থাকে না। ইউনিটি মেটাডেটা ট্যাবে থাকা তথ্য আপনাকে কোন বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে উপলব্ধ করা বা সম্পূর্ণরূপে অক্ষম করা উচিত তা নির্ধারণ করার সময় আপনার অ্যাপটি কোন হার্ডওয়্যার পরীক্ষা করা উচিত সে সম্পর্কে আরও ভাল ধারণা দিতে পারে।

যদিও আপনার ডিভাইসে কখনও কোনও বাগ বা ক্র্যাশ নাও ঘটতে পারে, তবুও অ্যান্ড্রয়েড ডিভাইসের বিশাল বৈচিত্র্যের কারণে, এটি আপনার দর্শকদের ডিভাইসের নির্দিষ্ট "হটস্পট"গুলি আরও ভালভাবে বুঝতে সাহায্য করে।

41d8d7feaa87454d.png সম্পর্কে

৮. একটি ব্যতিক্রম ছুঁড়ে দিন, ধরুন এবং লগ করুন

প্রায়শই, একজন ডেভেলপার হিসেবে, আপনার কোড যদি রানটাইম ব্যতিক্রম সঠিকভাবে ধরে এবং পরিচালনা করে, তবুও এটি লক্ষ্য করা ভালো যে এটি ঘটেছে কিনা এবং কোন পরিস্থিতিতে। Crashlytics.LogException এই উদ্দেশ্যেই ব্যবহার করা যেতে পারে - Firebase-এ একটি ব্যতিক্রম ইভেন্ট পাঠানোর জন্য যাতে আপনি Firebase কনসোলে সমস্যাটি আরও ডিবাগ করতে পারেন।

  1. Assets/Hamster/Scripts/States/DebugMenu.cs এ, using স্টেটমেন্টের সাথে নিম্নলিখিতগুলি যুক্ত করুন:
    // Import Firebase
    using Firebase.Crashlytics;
    
  2. DebugMenu.cs এ, LogNonfatalError() কে নিম্নরূপ ওভাররাইট করুন:
    void LogNonfatalError()
    {
        try
        {
            throw new System.Exception($"Test exception thrown in {nameof(LogNonfatalError)}");
        }
        catch(System.Exception exception)
        {
            Crashlytics.LogException(exception);
        }
    }
    
  3. আপনার অ্যাপ তৈরি করুন।
  4. (শুধুমাত্র অ্যান্ড্রয়েড) নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  5. লগ ননফ্যাটাল এরর বোতামটি আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন।
  6. Crashlytics ড্যাশবোর্ডে যান, এবং আপনি এই কোডল্যাবের শেষ ধাপে যা দেখেছিলেন তার মতো কিছু দেখতে পাবেন।
  7. তবে এবার, ইভেন্ট টাইপ ফিল্টারটি "অ-মহামারী" -এর মধ্যে সীমাবদ্ধ রাখুন যাতে আপনি কেবল "অ-মহামারী" ত্রুটিগুলি দেখতে পান, যেমন আপনি যে ত্রুটিটি লগ করেছেন।
    a39ea8d9944cbbd9.png সম্পর্কে

৯. প্রোগ্রাম এক্সিকিউশনের প্রবাহ আরও ভালোভাবে বুঝতে ক্র্যাশলিটিক্সে স্ট্রিং লগ করুন।

আপনি কি কখনও বুঝতে চেষ্টা করেছেন কেন একাধিক পাথ থেকে কল করা একটি লাইন কোড, প্রতি সেশনে শত শত বার নয়, হাজার হাজার বার, হঠাৎ করে একটি ব্যতিক্রম বা ক্র্যাশ তৈরি করতে পারে? যদিও একটি IDE-তে কোডটি পরীক্ষা করে মানগুলি আরও ঘনিষ্ঠভাবে দেখা ভালো হতে পারে, তবে যদি এটি শুধুমাত্র আপনার ব্যবহারকারীদের একটি অদৃশ্যভাবে ছোট শতাংশের মধ্যে ঘটে? আরও খারাপ, আপনি যদি যাই করুন না কেন এই ক্র্যাশটি প্রতিলিপি করতে না পারেন তবে আপনি কী করবেন?

এই ধরনের পরিস্থিতিতে, কিছু প্রেক্ষাপট থাকা অনেক বড় পার্থক্য আনতে পারে। Crashlytics.Log এর মাধ্যমে, আপনার প্রয়োজনীয় প্রেক্ষাপট লেখার ক্ষমতা আপনার আছে। এই বার্তাগুলিকে ভবিষ্যতে কী ঘটতে পারে সে সম্পর্কে আপনার নিজের জন্য ইঙ্গিত হিসেবে ভাবুন।

যদিও লগগুলি অসংখ্য উপায়ে ব্যবহার করা যেতে পারে, তবে সাধারণত এমন পরিস্থিতি রেকর্ড করার জন্য এগুলি সবচেয়ে সহায়ক যেখানে কলের ক্রম এবং/অথবা অনুপস্থিতি অত্যন্ত গুরুত্বপূর্ণ তথ্য।

  1. Assets/Hamster/Scripts/States/DebugMenu.cs এ, LogStringsAndCrashNow() কে নিম্নরূপ ওভাররাইট করুন:
    void LogStringsAndCrashNow()
    {
        Crashlytics.Log($"This is the first of two descriptive strings in {nameof(LogStringsAndCrashNow)}");
        const bool RUN_OPTIONAL_PATH = false;
        if(RUN_OPTIONAL_PATH)
        {
            Crashlytics.Log(" As it stands, this log should not appear in your records because it will never be called.");
        }
        else
        {
            Crashlytics.Log(" A log that will simply inform you which path of logic was taken. Akin to print debugging.");
        }
        Crashlytics.Log($"This is the second of two descriptive strings in {nameof(LogStringsAndCrashNow)}");
        TestCrash();
    }
    
  2. আপনার অ্যাপ তৈরি করুন।
  3. (শুধুমাত্র অ্যান্ড্রয়েড) নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. লগ স্ট্রিং এবং ক্র্যাশ নাউ বোতামটি আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন।
  5. Crashlytics ড্যাশবোর্ডে ফিরে যান, এবং Issue টেবিলে তালিকাভুক্ত নতুন সমস্যাটিতে ক্লিক করুন। আবারও আপনি আগের সমস্যাগুলির মতো কিছু দেখতে পাবেন।
    7aabe103b8589cc7.png সম্পর্কে
  6. তবে, যদি আপনি একটি ইভেন্ট সারাংশের মধ্যে লগ ট্যাবে ক্লিক করেন, তাহলে আপনি এইরকম একটি ভিউ পাবেন:
    4e27aa407b7571cf.png সম্পর্কে

১০. একটি কাস্টম কী লিখুন এবং ওভাররাইট করুন

ধরুন আপনি অল্প সংখ্যক মান বা কনফিগারেশনে সেট করা ভেরিয়েবলের সাথে সম্পর্কিত একটি ক্র্যাশকে আরও ভালভাবে বুঝতে চান। যেকোনো সময় ভেরিয়েবল এবং আপনার দেখা সম্ভাব্য মানগুলির সংমিশ্রণের উপর ভিত্তি করে ফিল্টার করতে সক্ষম হওয়া ভালো হতে পারে।

ইচ্ছামত স্ট্রিং লগ করার পাশাপাশি, ক্র্যাশলিটিক্স ডিবাগিংয়ের আরেকটি রূপ অফার করে যখন আপনার প্রোগ্রামটি ক্র্যাশ হওয়ার সময় তার সঠিক অবস্থা জানা উপকারী: কাস্টম কী।

এগুলি হল কী-মান জোড়া যা আপনি একটি সেশনের জন্য সেট করতে পারেন। লগগুলি যা জমা হয় এবং সম্পূর্ণরূপে যোগযোগ্য, তার বিপরীতে, কীগুলি কেবল একটি চলক বা অবস্থার সাম্প্রতিকতম অবস্থা প্রতিফলিত করার জন্য ওভাররাইট করা যেতে পারে।

আপনার প্রোগ্রামের শেষ রেকর্ড করা অবস্থার একটি খতিয়ান হওয়ার পাশাপাশি, এই কীগুলি ক্র্যাশলিটিক্স সমস্যাগুলির জন্য শক্তিশালী ফিল্টার হিসাবে ব্যবহার করা যেতে পারে।

  1. Assets/Hamster/Scripts/States/DebugMenu.cs এ, SetAndOverwriteCustomKeyThenCrash() কে নিম্নরূপে ওভাররাইট করুন:
    void SetAndOverwriteCustomKeyThenCrash()
    {
        const string CURRENT_TIME_KEY = "Current Time";
        System.TimeSpan currentTime = System.DateTime.Now.TimeOfDay;
        Crashlytics.SetCustomKey(
            CURRENT_TIME_KEY,
            DayDivision.GetPartOfDay(currentTime).ToString() // Values must be strings
            );
    
        // Time Passes
        currentTime += DayDivision.DURATION_THAT_ENSURES_PHASE_CHANGE;
    
        Crashlytics.SetCustomKey(
            CURRENT_TIME_KEY,
            DayDivision.GetPartOfDay(currentTime).ToString()
            );
        TestCrash();
    }
    
  2. আপনার অ্যাপ তৈরি করুন।
  3. (শুধুমাত্র অ্যান্ড্রয়েড) নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. "কাস্টম কী সেট করুন এবং ক্র্যাশ করুন " বোতামটি আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন।
  5. Crashlytics ড্যাশবোর্ডে ফিরে যান, এবং Issue টেবিলে তালিকাভুক্ত নতুন সমস্যাটিতে ক্লিক করুন। আবারও আপনি আগের সমস্যাগুলির মতো কিছু দেখতে পাবেন।
  6. তবে এবার, ইভেন্ট সারাংশের Keys ট্যাবে ক্লিক করুন যাতে আপনি Current Time সহ কীগুলির মান দেখতে পারেন:
    7dbe1eb00566af98.png সম্পর্কে

কাস্টম লগের পরিবর্তে আপনি কেন কাস্টম কী ব্যবহার করতে চান?

  • লগগুলি ক্রমিক ডেটা সংরক্ষণে ভালো, তবে কাস্টম কীগুলি আরও ভালো যদি আপনি শুধুমাত্র সাম্প্রতিকতম মান চান।
  • Firebase কনসোলে, আপনি Issue টেবিল অনুসন্ধান বাক্সে কীগুলির মান অনুসারে সহজেই সমস্যাগুলি ফিল্টার করতে পারেন।

লগের মতোই, কাস্টম কীগুলিরও একটি সীমা আছে। ক্র্যাশলিটিক্স সর্বাধিক 64টি কী-মান জোড়া সমর্থন করে। এই থ্রেশহোল্ডে পৌঁছানোর পরে, অতিরিক্ত মান সংরক্ষণ করা হয় না। প্রতিটি কী-মান জোড়ার আকার 1 KB পর্যন্ত হতে পারে।

১১. (শুধুমাত্র অ্যান্ড্রয়েড) একটি ANR বুঝতে এবং নির্ণয় করতে কাস্টম কী এবং লগ ব্যবহার করুন

অ্যান্ড্রয়েড ডেভেলপারদের জন্য ডিবাগ করা সবচেয়ে কঠিন সমস্যাগুলির মধ্যে একটি হল অ্যাপ্লিকেশন নট রেসপন্ডিং (ANR) ত্রুটি। ANR তখন ঘটে যখন কোনও অ্যাপ ৫ সেকেন্ডের বেশি সময় ধরে ইনপুটটিতে সাড়া দিতে ব্যর্থ হয়। যদি এটি ঘটে, তাহলে এর অর্থ হল অ্যাপটি হয় জমে গেছে, অথবা খুব ধীর গতিতে চলছে। ব্যবহারকারীদের একটি ডায়ালগ দেখানো হবে এবং তারা "অপেক্ষা করুন" নাকি "অ্যাপ বন্ধ করুন" তা বেছে নিতে পারবেন।

ANR গুলি ব্যবহারকারীর অভিজ্ঞতার জন্য খারাপ এবং (যেমন উপরে ANR লিঙ্কে উল্লেখ করা হয়েছে) Google Play Store-এ আপনার অ্যাপের আবিষ্কারযোগ্যতাকে প্রভাবিত করতে পারে। জটিলতার কারণে এবং বিভিন্ন ফোন মডেলে বিভিন্ন আচরণ সহ মাল্টিথ্রেডেড কোডের কারণে এগুলি প্রায়শই ঘটে, তাই ডিবাগ করার সময় ANR গুলি পুনরুত্পাদন করা প্রায়শই খুব কঠিন, যদি প্রায় অসম্ভব না হয়। তাই, বিশ্লেষণাত্মক এবং বিয়োগমূলকভাবে তাদের কাছে যাওয়া সাধারণত সর্বোত্তম পদ্ধতি।

এই পদ্ধতিতে, আমরা স্বয়ংক্রিয় সমস্যা লগিং পরিপূরক করতে এবং আমাদের আরও তথ্য প্রদানের জন্য Crashlytics.LogException , Crashlytics.Log এবং Crashlytics.SetCustomKey এর সংমিশ্রণ ব্যবহার করব।

  1. Assets/Hamster/Scripts/States/DebugMenu.cs এ, SetLogsAndKeysBeforeANR() কে নিম্নরূপ ওভাররাইট করুন:
    void SetLogsAndKeysBeforeANR()
    {
        System.Action<string,long> WaitAndRecord =
        (string methodName, long targetCallLength)=>
        {
            System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
            const string CURRENT_FUNCTION = "Current Async Function";
    
            // Initialize key and start timing
            Crashlytics.SetCustomKey(CURRENT_FUNCTION, methodName);
            stopWatch.Start();
    
            // The actual (simulated) work being timed.
            BusyWaitSimulator.WaitOnSimulatedBlockingWork(targetCallLength);
    
            // Stop timing
            stopWatch.Stop();
    
            if(stopWatch.ElapsedMilliseconds>=BusyWaitSimulator.EXTREME_DURATION_MILLIS)
            {
              Crashlytics.Log($"'{methodName}' is long enough to cause an ANR.");
            }
            else if(stopWatch.ElapsedMilliseconds>=BusyWaitSimulator.SEVERE_DURATION_MILLIS)
            {
              Crashlytics.Log($"'{methodName}' is long enough it may cause an ANR");
            }
        };
    
        WaitAndRecord("DoSafeWork",1000L);
        WaitAndRecord("DoSevereWork",BusyWaitSimulator.SEVERE_DURATION_MILLIS);
        WaitAndRecord("DoExtremeWork",2*BusyWaitSimulator.EXTREME_DURATION_MILLIS);
    }
    
  2. আপনার অ্যাপ তৈরি করুন।
  3. নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. "Set Logs And Keys → ANR" লেবেলযুক্ত বোতামটি আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন।
  5. Crashlytics ড্যাশবোর্ডে ফিরে যান, এবং তারপর ইভেন্ট সারাংশ দেখতে Issue টেবিলের নতুন ইস্যুতে ক্লিক করুন। যদি কলটি সঠিকভাবে সম্পন্ন হয়, তাহলে আপনি এরকম কিছু দেখতে পাবেন:
    876c3cff7037bd07.png সম্পর্কে

    আপনি দেখতে পাচ্ছেন, ফায়ারবেস থ্রেডে ব্যস্ত অপেক্ষাকে আপনার অ্যাপটি ANR ট্রিগার করার প্রধান কারণ হিসেবে চিহ্নিত করেছে।
  6. যদি আপনি Event summary এর Logs ট্যাবে লগগুলি দেখেন, তাহলে আপনি দেখতে পাবেন যে সম্পূর্ণ হিসাবে রেকর্ড করা শেষ পদ্ধতিটি হল DoSevereWork
    5a4bec1cf06f6984.png সম্পর্কে

    বিপরীতে, শুরু হিসাবে তালিকাভুক্ত শেষ পদ্ধতিটি হল DoExtremeWork , যা নির্দেশ করে যে এই পদ্ধতির সময় ANR ঘটেছে এবং DoExtremeWork লগ করার আগেই গেমটি বন্ধ হয়ে গেছে।

    89d86d5f598ecf3a.png সম্পর্কে

এটা কেন?

  • ANR গুলি পুনরুৎপাদন করা অবিশ্বাস্যরকম কঠিন, তাই কোড এলাকা এবং মেট্রিক্স সম্পর্কে সমৃদ্ধ তথ্য পেতে সক্ষম হওয়া এটিকে বাদ দিয়ে খুঁজে বের করার জন্য অবিশ্বাস্যভাবে গুরুত্বপূর্ণ।
  • কাস্টম কীগুলিতে সংরক্ষিত তথ্যের সাহায্যে, আপনি এখন জানেন কোন অ্যাসিঙ্ক থ্রেডটি চালাতে সবচেয়ে বেশি সময় নেয় এবং কোনটি ANR ট্রিগার করার ঝুঁকিতে ছিল। এই ধরণের সম্পর্কিত লজিক্যাল এবং নিউমেরিক ডেটা আপনাকে দেখাবে যে আপনার কোডে কোথায় অপ্টিমাইজ করা সবচেয়ে বেশি প্রয়োজন।

১২. প্রতিবেদনগুলিকে আরও সমৃদ্ধ করার জন্য বিশ্লেষণ ইভেন্টগুলিকে একত্রিত করা

নিম্নলিখিত পদ্ধতিগুলি ডিবাগ মেনু থেকেও কল করা যেতে পারে, তবে সমস্যা তৈরি করার পরিবর্তে, তারা আপনার গেমের কার্যকারিতা আরও ভালভাবে বোঝার জন্য তথ্যের আরেকটি উৎস হিসাবে Google Analytics ব্যবহার করে।

এই কোডল্যাবে আপনার লেখা অন্যান্য পদ্ধতির বিপরীতে, আপনার এই পদ্ধতিগুলি অন্য পদ্ধতিগুলির সাথে একত্রে ব্যবহার করা উচিত। অন্য পদ্ধতিগুলি চালানোর আগে আপনি যে কোনও ক্রমে এই পদ্ধতিগুলিকে (ডিবাগ মেনুতে সংশ্লিষ্ট বোতাম টিপে) কল করুন। তারপর, যখন আপনি নির্দিষ্ট Crashlytics সমস্যায় তথ্য পরীক্ষা করবেন, তখন আপনি Analytics ইভেন্টগুলির একটি ক্রমযুক্ত লগ দেখতে পাবেন। আপনি কীভাবে আপনার অ্যাপটি ব্যবহার করেছেন তার উপর নির্ভর করে প্রোগ্রাম প্রবাহ বা ব্যবহারকারীর ইনপুটের সংমিশ্রণ আরও ভালভাবে বোঝার জন্য এই ডেটা একটি গেমে ব্যবহার করা যেতে পারে।

  1. Assets/Hamster/Scripts/States/DebugMenu.cs এ, নিম্নলিখিত পদ্ধতিগুলির বিদ্যমান বাস্তবায়নগুলিকে ওভাররাইট করুন:
    public void LogProgressEventWithStringLiterals()
    {
          Firebase.Analytics.FirebaseAnalytics.LogEvent("progress", "percent", 0.4f);
    }
    
    public void LogIntScoreWithBuiltInEventAndParams()
    {
          Firebase.Analytics.FirebaseAnalytics
            .LogEvent(
              Firebase.Analytics.FirebaseAnalytics.EventPostScore,
              Firebase.Analytics.FirebaseAnalytics.ParameterScore,
              42
            );
    }
    
  2. আপনার গেমটি তৈরি করুন এবং স্থাপন করুন, এবং তারপর ডিবাগ মেনুতে প্রবেশ করুন।
  3. (শুধুমাত্র অ্যান্ড্রয়েড) নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. উপরের ফাংশনগুলি কল করতে নিম্নলিখিত বোতামগুলির মধ্যে অন্তত একটি এক বা একাধিক বার টিপুন:
    • লগ স্ট্রিং ইভেন্ট
    • লগ ইন ইভেন্ট
  5. "এখনই ক্র্যাশ করুন " বোতামটি টিপুন।
  6. ফায়ারবেসে ক্র্যাশ ইভেন্ট আপলোড করার জন্য আপনার গেমটি পুনরায় চালু করুন।
  7. যখন আপনি অ্যানালিটিক্স ইভেন্টের বিভিন্ন ইচ্ছামত ক্রম লগ করেন এবং তারপর আপনার গেমটিকে এমন একটি ইভেন্ট তৈরি করতে দেন যেখান থেকে Crashlytics একটি প্রতিবেদন তৈরি করে (যেমনটি আপনি ইতিমধ্যেই করেছেন), তখন সেগুলি Crashlytics ইভেন্ট সারাংশের লগ ট্যাবে এইভাবে যুক্ত হয়:
    d3b16d78f76bfb04.png সম্পর্কে

১৩. এগিয়ে যাওয়া

এবং এর সাথে, আপনার স্বয়ংক্রিয়ভাবে তৈরি ক্র্যাশ রিপোর্টগুলিকে পরিপূরক করার জন্য আপনার কাছে আরও ভাল তাত্ত্বিক ভিত্তি থাকা উচিত। এই নতুন তথ্য আপনাকে বর্তমান অবস্থা, অতীতের ইভেন্টগুলির রেকর্ড এবং বিদ্যমান Google Analytics ইভেন্টগুলি ব্যবহার করে ইভেন্টগুলির ক্রম এবং এর ফলাফলের দিকে পরিচালিত যুক্তিগুলিকে আরও ভালভাবে ভেঙে ফেলার অনুমতি দেয়।

যদি আপনার অ্যাপটি Android 11 (API লেভেল 30) বা তার বেশি ভার্সনের জন্য তৈরি হয়, তাহলে GWP-ASan অন্তর্ভুক্ত করার কথা বিবেচনা করুন, যা একটি নেটিভ মেমোরি অ্যালোকেটর বৈশিষ্ট্য যা use-after-free এবং heap-buffer-overflow বাগের মতো নেটিভ মেমোরি ত্রুটির কারণে সৃষ্ট ক্র্যাশগুলি ডিবাগ করার জন্য কার্যকর। এই ডিবাগিং বৈশিষ্ট্যের সুবিধা নিতে, স্পষ্টভাবে GWP-ASan সক্ষম করুন

পরবর্তী পদক্ষেপ

"ইন্সট্রুমেন্ট ইওর ইউনিটি গেম উইথ রিমোট কনফিগ কোডল্যাব"-এ যান, যেখানে আপনি ইউনিটিতে রিমোট কনফিগ এবং এ/বি টেস্টিং ব্যবহার সম্পর্কে শিখবেন।