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

1। পরিচিতি

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

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

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

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

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

  • নিম্নলিখিতগুলির একটি বা উভয়ের সাথে একতা (ন্যূনতম প্রস্তাবিত সংস্করণ 2019+):
    • iOS বিল্ড সাপোর্ট
    • অ্যান্ড্রয়েড বিল্ড সমর্থন
  • (শুধুমাত্র Android এর জন্য) Firebase CLI (ক্র্যাশ রিপোর্টের জন্য প্রতীক আপলোড করতে ব্যবহৃত)

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

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

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

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

কমান্ড লাইন থেকে এই কোডল্যাবের গিটহাব সংগ্রহস্থল ক্লোন করুন:

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

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

ইউনিটি এডিটরে ফায়ারবেসের সাথে লেভেল আপ খুলুন

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

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

3. আপনার ইউনিটি প্রকল্পে Firebase যোগ করুন

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

  1. Firebase কনসোলে , প্রজেক্ট যোগ করুন ক্লিক করুন।
  2. একটি নতুন প্রকল্প তৈরি করতে, পছন্দসই প্রকল্পের নাম লিখুন।
    এটি প্রকল্পের নামের উপর ভিত্তি করে কিছুতে প্রকল্প আইডি (প্রকল্পের নামের নীচে প্রদর্শিত) সেট করবে। আপনি ঐচ্ছিকভাবে এটিকে আরও কাস্টমাইজ করতে প্রকল্প আইডিতে সম্পাদনা আইকনে ক্লিক করতে পারেন।
  3. অনুরোধ করা হলে, Firebase শর্তাবলী পর্যালোচনা করুন এবং স্বীকার করুন।
  4. অবিরত ক্লিক করুন.
  5. এই প্রকল্পের জন্য Google Analytics সক্ষম করুন বিকল্পটি নির্বাচন করুন এবং তারপরে অবিরত ক্লিক করুন।
  6. ব্যবহার করতে একটি বিদ্যমান Google Analytics অ্যাকাউন্ট নির্বাচন করুন বা একটি নতুন অ্যাকাউন্ট তৈরি করতে একটি নতুন অ্যাকাউন্ট তৈরি করুন নির্বাচন করুন।
  7. প্রকল্প তৈরি করুন ক্লিক করুন।
  8. প্রজেক্ট তৈরি হয়ে গেলে Continue এ ক্লিক করুন।

Firebase এর সাথে আপনার অ্যাপ নিবন্ধন করুন

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

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

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

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

ইউনিটির জন্য Firebase SDK যোগ করুন

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

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

4. আপনার ইউনিটি প্রকল্পে Crashlytics সেট আপ করুন

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

Crashlytics SDK শুরু করুন

  1. Assets/Hamster/Scripts/MainGame.cs এ, স্টেটমেন্ট using নিম্নলিখিত যোগ করুন:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    
    প্রথম মডিউল আপনাকে Crashlytics SDK থেকে পদ্ধতি ব্যবহার করতে দেয় এবং দ্বিতীয়টিতে C# টাস্ক API- এর কিছু এক্সটেনশন রয়েছে। উভয় বিবৃতি using না করে নিম্নলিখিত কোড কাজ করবে না।
  2. এখনও MainGame.cs এ, InitializeFirebaseAndStartGame() :
    void Start()
    {
      Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
      InitializeFirebaseAndStartGame();
    }
    
    কল করে বিদ্যমান Start() পদ্ধতিতে ফায়ারবেস ইনিশিয়ালাইজেশন যোগ করুন
  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+ (অ্যাপল প্ল্যাটফর্ম)

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

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

  1. (শুধুমাত্র প্রাথমিক সেটআপের সময়, প্রতিটি বিল্ডের জন্য নয়) আপনার বিল্ড সেট আপ করুন:
    1. আপনার প্রোজেক্ট ডিরেক্টরির মূলে বিল্ডস নামে একটি নতুন ফোল্ডার তৈরি করুন (যেমন, আপনার সম্পদ ডিরেক্টরির ভাই হিসাবে), এবং তারপর Android নামে একটি সাব-ফোল্ডার তৈরি করুন।
    2. ফাইল > বিল্ড সেটিংস > প্লেয়ার সেটিংস > কনফিগারেশনে , স্ক্রিপ্টিং ব্যাকএন্ডকে IL2CPP-এ সেট করুন।
      • IL2CPP সাধারণত বিল্ডগুলিকে ছোট করে এবং আরও ভাল পারফরম্যান্স করে।
      • IL2CPP হল iOS-এ একমাত্র উপলব্ধ বিকল্প এবং এটিকে এখানে নির্বাচন করলে দুটি প্ল্যাটফর্মকে আরও ভাল সমতা বজায় রাখতে এবং দুটির মধ্যে ডিবাগিং পার্থক্য করতে দেয় (যদি আপনি উভয়ই তৈরি করতে চান) সহজ৷
  2. আপনার অ্যাপ তৈরি করুন। ফাইল > বিল্ড সেটিংসে , নিম্নলিখিতগুলি সম্পূর্ণ করুন:
    1. নিশ্চিত করুন যে প্রতীক তৈরি করুন
    2. আপনার এপিকে সরাসরি ইউনিটি এডিটর থেকে আপনার তৈরি করা বিল্ডস/অ্যান্ড্রয়েড সাব-ফোল্ডারে তৈরি করুন।
  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 মান।
      উদাহরণ ফায়ারবেস অ্যান্ড্রয়েড অ্যাপ আইডি: 1:567383003300:android:17104a2ced0c9b9b
    • PATH/TO/SYMBOLS : আপনার বিল্ড শেষ হলে বিল্ডস/অ্যান্ড্রয়েড ডিরেক্টরিতে জিপ করা প্রতীক ফাইলের পাথ (উদাহরণস্বরূপ: Builds/Android/myapp-1.0-v100.symbols.zip )।

সেটআপ শেষ করতে একটি পরীক্ষা ক্র্যাশ বাধ্য করুন

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

  1. MainGameScene-EmptyObject GameObject সম্পাদক হায়ারার্কিতে খুঁজুন, এতে নিম্নলিখিত স্ক্রিপ্টটি যোগ করুন এবং তারপর দৃশ্যটি সংরক্ষণ করুন। আপনি আপনার অ্যাপ চালানোর কয়েক সেকেন্ড পরে এই স্ক্রিপ্টটি একটি পরীক্ষা ক্র্যাশ ঘটাবে৷
    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 : ফায়ারবেস ইউনিটি এডিটর প্লাগইন স্বয়ংক্রিয়ভাবে আপনার প্রতীক ফাইল আপলোড করার জন্য আপনার Xcode প্রকল্পকে কনফিগার করে।
    • Android : আপনার প্রতীক ফাইল আপলোড করতে Firebase CLI crashlytics:symbols:upload কমান্ড চালান।
  3. আপনার অ্যাপ চালান। একবার আপনার অ্যাপ চালু হলে, ডিভাইসের লগটি দেখুন এবং CrashlyticsTester থেকে ব্যতিক্রমটি ট্রিগার হওয়ার জন্য অপেক্ষা করুন।
    • iOS : এক্সকোডের নীচের ফলকে লগগুলি দেখুন।
    • অ্যান্ড্রয়েড : টার্মিনালে নিম্নলিখিত কমান্ডটি চালিয়ে লগগুলি দেখুন: adb logcat
  4. ব্যতিক্রম দেখতে Crashlytics ড্যাশবোর্ডে যান! আপনি ড্যাশবোর্ডের নীচে ইস্যু টেবিলে এটি দেখতে পাবেন। কোডল্যাবে পরে, আপনি কীভাবে এই প্রতিবেদনগুলি অন্বেষণ করবেন সে সম্পর্কে আরও শিখবেন।
  5. ক্র্যাশলিটিক্সে ইভেন্টটি আপলোড করা হয়েছে তা নিশ্চিত করার পরে, আপনি এটি সংযুক্ত করেছেন এমন EmptyObject GameObject নির্বাচন করুন, শুধুমাত্র CrashlyticsTester উপাদানটি সরান এবং তারপর দৃশ্যটিকে তার আসল অবস্থায় ফিরিয়ে আনতে সংরক্ষণ করুন।

5. ডিবাগ মেনু সক্রিয় করুন এবং বুঝুন

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

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

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

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

ডিবাগ মেনুর মেথড বডিগুলির পূর্বরূপ দেখুন এবং বুঝুন

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

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

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

Crashlytics সমস্যা তৈরি এবং টীকা করার পদ্ধতি:

  • CrashNow
  • LogNonfatalError
  • LogStringsAndCrashNow
  • SetAndOverwriteCustomKeyThenCrash
  • SetLogsAndKeysBeforeANR

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

  • LogProgressEventWithStringLiterals
  • LogIntScoreWithBuiltInEventAndParams

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

6. উন্নয়নে ক্র্যাশ রিপোর্ট প্রদান নিশ্চিত করুন

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

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

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

iOS সিমুলেটর:

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

মোবাইল ফিজিক্যাল ডিভাইস (Android এবং iOS):

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

ঐক্য সম্পাদক:

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

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

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

7. Firebase কনসোলে সমস্যা প্রতিবেদনগুলি বুঝুন৷

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

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

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

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

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

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

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

41d8d7feaa87454d.png

8. একটি ব্যতিক্রম নিক্ষেপ, ধরা, এবং লগ

প্রায়শই, একজন বিকাশকারী হিসাবে, এমনকি যদি আপনার কোড সঠিকভাবে একটি রানটাইম ব্যতিক্রম ক্যাচ এবং পরিচালনা করে, তবে এটি লক্ষ্য করা ভাল যে এটি ঘটেছে এবং কোন পরিস্থিতিতে। 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. (শুধুমাত্র অ্যান্ড্রয়েড) নিম্নলিখিত ফায়ারবেস CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  5. লগ ননফ্যাটাল ত্রুটি বোতামটি আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন।
  6. Crashlytics ড্যাশবোর্ডে যান, এবং আপনি এই কোডল্যাবের শেষ ধাপে যা দেখেছেন তার অনুরূপ কিছু দেখতে পাবেন।
  7. এইবার, যদিও, ইভেন্ট টাইপ ফিল্টারটিকে নন-ফেটালসের মধ্যে সীমাবদ্ধ করুন যাতে আপনি শুধুমাত্র অ-মারাত্মক ত্রুটিগুলি দেখতে পান, যেমন আপনি এইমাত্র লগ করেছেন৷
    a39ea8d9944cbbd9.png

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

আপনি কি কখনও খুঁজে বের করার চেষ্টা করেছেন কেন কোডের একটি লাইন যা একাধিক পাথ থেকে কল করা হয়, প্রতি সেশনে হাজার হাজার বার না হলেও হঠাৎ করে একটি ব্যতিক্রম বা ক্র্যাশ তৈরি করতে পারে? যদিও এটি একটি 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. (শুধুমাত্র অ্যান্ড্রয়েড) নিম্নলিখিত ফায়ারবেস CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. লগ স্ট্রিং এবং ক্র্যাশ নাউ বোতামে আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন।
  5. Crashlytics ড্যাশবোর্ডে ফিরে যান এবং ইস্যু সারণীতে তালিকাভুক্ত নতুন সমস্যাটিতে ক্লিক করুন। আবার আপনি আগের সমস্যা অনুরূপ কিছু দেখতে হবে.
    7aabe103b8589cc7.png
  6. যাইহোক, যদি আপনি একটি ইভেন্ট সারাংশের মধ্যে লগ ট্যাবে ক্লিক করেন, তাহলে আপনি এইরকম একটি ভিউ পাবেন:
    4e27aa407b7571cf.png

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

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

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

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

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

  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. (কেবল অ্যান্ড্রয়েড) নিম্নলিখিত ফায়ারবেস CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. সেট কাস্টম কী এবং ক্র্যাশ বোতামে আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন।
  5. Crashlytics ড্যাশবোর্ডে ফিরে যান এবং ইস্যু সারণীতে তালিকাভুক্ত নতুন সমস্যাটিতে ক্লিক করুন। আবার আপনি আগের সমস্যা অনুরূপ কিছু দেখতে হবে.
  6. এইবার, যদিও, ইভেন্ট সারাংশে কী ট্যাবে ক্লিক করুন যাতে আপনি Current Time সহ কীগুলির মান দেখতে পারেন:
    7dbe1eb00566af98.png

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

  • লগগুলি অনুক্রমিক ডেটা সঞ্চয় করতে ভাল, তবে কাস্টম কীগুলি আরও ভাল যদি আপনি কেবলমাত্র সাম্প্রতিক মানটি চান৷
  • Firebase কনসোলে, আপনি ইস্যু টেবিল সার্চ বক্সে কী-এর মান দিয়ে সমস্যাগুলিকে সহজেই ফিল্টার করতে পারেন।

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

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

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

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. লগ এবং কী সেট করুন → ANR লেবেলযুক্ত বোতামটি আলতো চাপুন এবং তারপরে আপনার অ্যাপটি পুনরায় চালু করুন৷
  5. Crashlytics ড্যাশবোর্ডে ফিরে যান, এবং তারপর ইভেন্টের সারাংশ দেখতে ইস্যু টেবিলের নতুন সমস্যাটিতে ক্লিক করুন। যদি কলটি সঠিকভাবে চলে যায় তবে আপনার এইরকম কিছু দেখতে হবে:
    876c3cff7037bd07.png

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

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

    89d86d5f598ecf3a.png

কেন এই কাজ?

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

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

নিম্নলিখিত পদ্ধতিগুলিও ডিবাগ মেনু থেকে কল করা যায়, তবে সমস্যাগুলি তৈরি করার পরিবর্তে, তারা আপনার গেমের কাজগুলি আরও ভালভাবে বোঝার জন্য তথ্যের আরেকটি উত্স হিসাবে 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. (কেবল অ্যান্ড্রয়েড) নিম্নলিখিত ফায়ারবেস CLI কমান্ডটি চালিয়ে আপনার প্রতীকগুলি আপলোড করুন:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. উপরের ফাংশনগুলি কল করতে নিম্নলিখিত বোতামগুলির মধ্যে অন্তত একটি বা একাধিকবার টিপুন:
    • লগ স্ট্রিং ইভেন্ট
    • লগ ইন ইভেন্ট
  5. Crash Now বোতাম টিপুন।
  6. আপনার গেমটি Firebase-এ ক্র্যাশ ইভেন্ট আপলোড করার জন্য পুনরায় চালু করুন।
  7. আপনি যখন অ্যানালিটিক্স ইভেন্টের বিভিন্ন নির্বিচারে সিকোয়েন্স লগ করেন এবং তারপরে আপনার গেমটি এমন একটি ইভেন্ট তৈরি করে যেটি থেকে Crashlytics একটি রিপোর্ট তৈরি করে (যেমন আপনার আছে), সেগুলি ক্র্যাশলিটিক্স ইভেন্ট সারাংশের লগ ট্যাবে এইভাবে যুক্ত হয়:
    d3b16d78f76bfb04.png

13. এগিয়ে যাওয়া

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

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

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

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