उन्नत क्रैशलिटिक्स सुविधाओं का उपयोग करके यूनिटी गेम के क्रैश को समझें, उन्नत क्रैशलिटिक्स सुविधाओं का उपयोग करके यूनिटी गेम के क्रैश को समझें

1 परिचय

इस कोडलैब में, आप सीखेंगे कि क्रैशलिटिक्स की उन्नत सुविधाओं का उपयोग कैसे करें जो आपको दुर्घटनाओं और उन परिस्थितियों के बारे में बेहतर दृश्यता देगा जो उनके कारण हो सकती हैं।

आप एक नमूना गेम, मेचाहैम्स्टर: फायरबेस एडिशन के साथ लेवल अप में नई कार्यक्षमता जोड़ेंगे। यह नमूना गेम क्लासिक फायरबेस गेम मेचाहैम्स्टर का एक नया संस्करण है जो इसकी अधिकांश अंतर्निहित फायरबेस कार्यक्षमता को हटा देता है, जिससे आपको उनके स्थान पर फायरबेस के नए उपयोग को लागू करने का मौका मिलता है।

आप गेम में एक डिबग मेनू जोड़ देंगे. यह डिबग मेनू आपके द्वारा बनाई गई विधियों को कॉल करता है और आपको क्रैशलिटिक्स की विभिन्न कार्यक्षमताओं का उपयोग करने की अनुमति देता है। ये विधियाँ आपको दिखाएंगी कि कस्टम कुंजी, कस्टम लॉग, गैर-घातक त्रुटियों और बहुत कुछ के साथ अपनी स्वचालित क्रैश रिपोर्ट को कैसे एनोटेट किया जाए।

गेम तैयार करने के बाद, आप डिबग मेनू का उपयोग करेंगे, और परिणामों का निरीक्षण करके उस अनूठे दृश्य को समझेंगे जो यह बताता है कि आपका गेम जंगल में कैसे चलता है।

आप क्या सीखेंगे

  • त्रुटियों के प्रकार जो Crashlytics द्वारा स्वचालित रूप से पकड़े जाते हैं।
  • अतिरिक्त त्रुटियाँ जिन्हें जानबूझकर रिकॉर्ड किया जा सकता है।
  • इन त्रुटियों को समझने में आसान बनाने के लिए उनमें अधिक जानकारी कैसे जोड़ें।

आपको किस चीज़ की ज़रूरत पड़ेगी

  • एकता (न्यूनतम अनुशंसित संस्करण 2019+) निम्नलिखित में से एक या दोनों के साथ:
    • आईओएस बिल्ड सपोर्ट
    • एंड्रॉइड बिल्ड सपोर्ट
  • (केवल एंड्रॉइड के लिए) फायरबेस सीएलआई (क्रैश रिपोर्ट के लिए प्रतीक अपलोड करने के लिए उपयोग किया जाता है)

2. अपना विकास परिवेश स्थापित करें

निम्नलिखित अनुभाग वर्णन करते हैं कि फायरबेस कोड के साथ लेवल अप को कैसे डाउनलोड करें और इसे यूनिटी में कैसे खोलें।

ध्यान दें कि इस लेवल अप विद फायरबेस सैंपल गेम का उपयोग कई अन्य फायरबेस + यूनिटी कोडलैब द्वारा किया जाता है, इसलिए हो सकता है कि आपने इस अनुभाग में कार्य पहले ही पूरा कर लिया हो। यदि ऐसा है, तो आप सीधे इस पृष्ठ पर अंतिम चरण पर जा सकते हैं: "एकता के लिए फायरबेस एसडीके जोड़ें"।

कोड डाउनलोड करें

कमांड लाइन से इस कोडलैब के GitHub रिपॉजिटरी को क्लोन करें:

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

वैकल्पिक रूप से, यदि आपके पास गिट स्थापित नहीं है, तो आप रिपॉजिटरी को ज़िप फ़ाइल के रूप में डाउनलोड कर सकते हैं।

यूनिटी एडिटर में फायरबेस के साथ लेवल अप खोलें

  1. यूनिटी हब लॉन्च करें और, प्रोजेक्ट्स टैब से, ओपन के बगल में ड्रॉपडाउन तीर पर क्लिक करें।
  2. डिस्क से प्रोजेक्ट जोड़ें पर क्लिक करें।
  3. उस निर्देशिका पर नेविगेट करें जिसमें कोड है, और फिर ठीक पर क्लिक करें।
  4. यदि संकेत दिया जाए, तो उपयोग करने के लिए यूनिटी संपादक संस्करण और अपने लक्ष्य प्लेटफ़ॉर्म (एंड्रॉइड या आईओएस) का चयन करें।
  5. प्रोजेक्ट नाम, लेवल-अप-विथ-फायरबेस पर क्लिक करें और प्रोजेक्ट यूनिटी संपादक में खुल जाएगा।
  6. यदि आपका संपादक इसे स्वचालित रूप से नहीं खोलता है, तो यूनिटी एडिटर के प्रोजेक्ट टैब में एसेट्स > हैम्स्टर में MainGameScene खोलें।
    ff4ea3f3c0d29379.png

यूनिटी को स्थापित करने और उपयोग करने के बारे में अधिक जानकारी के लिए वर्किंग इन यूनिटी देखें।

3. अपने यूनिटी प्रोजेक्ट में फायरबेस जोड़ें

एक फायरबेस प्रोजेक्ट बनाएं

  1. फायरबेस कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें।
  2. एक नया प्रोजेक्ट बनाने के लिए, वांछित प्रोजेक्ट नाम दर्ज करें।
    यह प्रोजेक्ट नाम के आधार पर प्रोजेक्ट आईडी (प्रोजेक्ट नाम के नीचे प्रदर्शित) भी सेट कर देगा। आप इसे और अधिक अनुकूलित करने के लिए वैकल्पिक रूप से प्रोजेक्ट आईडी पर संपादन आइकन पर क्लिक कर सकते हैं।
  3. यदि संकेत दिया जाए, तो फायरबेस शर्तों की समीक्षा करें और स्वीकार करें।
  4. जारी रखें पर क्लिक करें.
  5. इस प्रोजेक्ट के लिए Google Analytics सक्षम करें विकल्प चुनें और फिर जारी रखें पर क्लिक करें।
  6. उपयोग करने के लिए मौजूदा Google Analytics खाता चुनें या नया खाता बनाने के लिए नया खाता बनाएं चुनें।
  7. प्रोजेक्ट बनाएं पर क्लिक करें.
  8. जब प्रोजेक्ट बन जाए, तो जारी रखें पर क्लिक करें।

अपने ऐप को फायरबेस के साथ पंजीकृत करें

  1. अभी भी फायरबेस कंसोल में, प्रोजेक्ट अवलोकन पृष्ठ के केंद्र से, सेटअप वर्कफ़्लो लॉन्च करने के लिए यूनिटी आइकन पर क्लिक करें या, यदि आपने पहले से ही अपने फायरबेस प्रोजेक्ट में एक ऐप जोड़ा है, तो प्लेटफ़ॉर्म विकल्प प्रदर्शित करने के लिए ऐप जोड़ें पर क्लिक करें।
  2. Apple (iOS) और Android दोनों बिल्ड लक्ष्यों को पंजीकृत करने के लिए चयन करें।
  3. अपने यूनिटी प्रोजेक्ट की प्लेटफ़ॉर्म-विशिष्ट आईडी दर्ज करें। इस कोडलैब के लिए, निम्नलिखित दर्ज करें:
  4. (वैकल्पिक) अपने यूनिटी प्रोजेक्ट के प्लेटफ़ॉर्म-विशिष्ट उपनाम दर्ज करें।
  5. रजिस्टर ऐप पर क्लिक करें, और फिर डाउनलोड कॉन्फिग फ़ाइल अनुभाग पर आगे बढ़ें।

फायरबेस कॉन्फ़िगरेशन फ़ाइलें जोड़ें

रजिस्टर ऐप पर क्लिक करने के बाद, आपको दो कॉन्फ़िगरेशन फ़ाइलें (प्रत्येक बिल्ड लक्ष्य के लिए एक कॉन्फ़िगरेशन फ़ाइल) डाउनलोड करने के लिए कहा जाएगा। आपके यूनिटी प्रोजेक्ट को फ़ायरबेस से जुड़ने के लिए इन फ़ाइलों में फ़ायरबेस मेटाडेटा की आवश्यकता है।

  1. दोनों उपलब्ध कॉन्फ़िगरेशन फ़ाइलें डाउनलोड करें:
    • Apple (iOS) के लिए : GoogleService-Info.plist डाउनलोड करें।
    • Android के लिए : google-services.json डाउनलोड करें।
  2. अपने यूनिटी प्रोजेक्ट की प्रोजेक्ट विंडो खोलें, फिर दोनों कॉन्फिग फाइलों को एसेट्स फ़ोल्डर में ले जाएं।
  3. फ़ायरबेस कंसोल में वापस, सेटअप वर्कफ़्लो में, अगला क्लिक करें और यूनिटी के लिए फ़ायरबेस एसडीके जोड़ने के लिए आगे बढ़ें।

यूनिटी के लिए फायरबेस एसडीके जोड़ें

  1. फायरबेस कंसोल में डाउनलोड फायरबेस यूनिटी एसडीके पर क्लिक करें।
  2. SDK को किसी सुविधाजनक स्थान पर अनज़िप करें।
  3. अपने खुले यूनिटी प्रोजेक्ट में, एसेट्स > इंपोर्ट पैकेज > कस्टम पैकेज पर नेविगेट करें।
  4. आयात पैकेज संवाद में, उस निर्देशिका पर जाएँ जिसमें अनज़िप्ड SDK है, FirebaseAnalytics.unitypackage चुनें और फिर Open पर क्लिक करें।
  5. दिखाई देने वाले आयात एकता पैकेज संवाद से, आयात पर क्लिक करें।
  6. FirebaseCrashlytics.unitypackage आयात करने के लिए पिछले चरणों को दोहराएं।
  7. फायरबेस कंसोल पर लौटें और, सेटअप वर्कफ़्लो में, अगला क्लिक करें।

यूनिटी परियोजनाओं में फायरबेस एसडीके जोड़ने के बारे में अधिक जानकारी के लिए, अतिरिक्त यूनिटी इंस्टॉलेशन विकल्प देखें।

4. अपने यूनिटी प्रोजेक्ट में क्रैशलाइटिक्स सेट करें

यूनिटी प्रोजेक्ट्स में क्रैशलिटिक्स का उपयोग करने के लिए, आपको कुछ और सेटअप चरण करने होंगे। बेशक, आपको एसडीके आरंभ करने की आवश्यकता होगी। लेकिन साथ ही, आपको अपने प्रतीकों को अपलोड करने की आवश्यकता होगी ताकि आप फायरबेस कंसोल में प्रतीकात्मक स्टैकट्रैस देख सकें, और यह सुनिश्चित करने के लिए कि फायरबेस को आपके क्रैश इवेंट मिल रहे हैं, आपको एक परीक्षण क्रैश को मजबूर करने की आवश्यकता होगी।

क्रैशलिटिक्स एसडीके को आरंभ करें

  1. Assets/Hamster/Scripts/MainGame.cs में, कथनों का using निम्नलिखित जोड़ें:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    
    पहला मॉड्यूल आपको क्रैशलाइटिक्स SDK से विधियों का उपयोग करने की अनुमति देता है और दूसरे में C# Tasks API के लिए कुछ एक्सटेंशन शामिल हैं। दोनों कथनों का using किए बिना निम्नलिखित कोड काम नहीं करेगा।
  2. अभी भी MainGame.cs में, InitializeFirebaseAndStartGame() कॉल करके मौजूदा Start() विधि में फायरबेस इनिशियलाइज़ेशन जोड़ें:
    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");
          }
        });
    }
    

इनिशियलाइज़ेशन लॉजिक को यहां रखने से फायरबेस निर्भरताएं शुरू होने से पहले प्लेयर इंटरेक्शन को रोकता है।

क्रैशलाइटिक्स एफएक्यू में अनचाहे अपवादों को घातक के रूप में रिपोर्ट करने के लाभों और प्रभावों पर चर्चा की गई है।

अपना प्रोजेक्ट बनाएं और प्रतीक अपलोड करें

आईओएस और एंड्रॉइड ऐप्स के लिए प्रतीकों को बनाने और अपलोड करने के चरण अलग-अलग हैं।

आईओएस+ (एप्पल प्लेटफॉर्म)

  1. बिल्ड सेटिंग्स संवाद से, अपने प्रोजेक्ट को Xcode कार्यक्षेत्र में निर्यात करें।
  2. अपना ऐप बनाएं.
    Apple प्लेटफ़ॉर्म के लिए, फ़ायरबेस यूनिटी एडिटर प्लगइन प्रत्येक बिल्ड के लिए फ़ायरबेस सर्वर पर क्रैशलाइटिक्स-संगत प्रतीक फ़ाइल बनाने और अपलोड करने के लिए स्वचालित रूप से आपके Xcode प्रोजेक्ट को कॉन्फ़िगर करता है। क्रैशलिटिक्स डैशबोर्ड में प्रतीकात्मक स्टैक ट्रेस देखने के लिए यह प्रतीक जानकारी आवश्यक है।

एंड्रॉयड

  1. (केवल आरंभिक सेटअप के दौरान, प्रत्येक बिल्ड के लिए नहीं) अपना बिल्ड सेट करें:
    1. अपनी प्रोजेक्ट निर्देशिका के मूल में बिल्ड्स नामक एक नया फ़ोल्डर बनाएं (यानी, अपनी संपत्ति निर्देशिका के सहोदर के रूप में), और फिर एंड्रॉइड नामक एक उप-फ़ोल्डर बनाएं।
    2. फ़ाइल > बिल्ड सेटिंग्स > प्लेयर सेटिंग्स > कॉन्फ़िगरेशन में, स्क्रिप्टिंग बैकएंड को IL2CPP पर सेट करें।
      • IL2CPP आम तौर पर बिल्ड को छोटा और बेहतर प्रदर्शन का कारण बनता है।
      • IL2CPP भी iOS पर एकमात्र उपलब्ध विकल्प है और इसे यहां चुनने से दोनों प्लेटफ़ॉर्म बेहतर समानता में आ सकते हैं और दोनों के बीच डिबगिंग अंतर को सरल बना सकते हैं (यदि आप दोनों का निर्माण करना चुनते हैं)।
  2. अपना ऐप बनाएं. फ़ाइल > बिल्ड सेटिंग्स में, निम्नलिखित को पूरा करें:
    1. सुनिश्चित करें कि Create Symbols.zip चेक किया गया है (या यदि ड्रॉपडाउन के साथ प्रस्तुत किया गया है, तो डीबगिंग चुनें)।
    2. अपना एपीके सीधे यूनिटी एडिटर से बिल्ड/एंड्रॉइड सब-फ़ोल्डर में बनाएं जिसे आपने अभी बनाया है।
  3. एक बार जब आपका निर्माण पूरा हो जाता है, तो आपको एक क्रैशलाईटिक्स-संगत प्रतीक फ़ाइल तैयार करनी होगी और इसे फायरबेस सर्वर पर अपलोड करना होगा। क्रैशलिटिक्स डैशबोर्ड में मूल लाइब्रेरी क्रैश के लिए प्रतीकात्मक स्टैक निशान देखने के लिए यह प्रतीक जानकारी आवश्यक है।

    निम्नलिखित फायरबेस सीएलआई कमांड चलाकर इस प्रतीक फ़ाइल को बनाएं और अपलोड करें:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
    • FIREBASE_APP_ID : आपका फायरबेस एंड्रॉइड ऐप आईडी (आपके पैकेज का नाम नहीं)। यह मान उस google-services.json फ़ाइल में ढूंढें जिसे आपने पहले डाउनलोड किया था। यह mobilesdk_app_id मान है।
      उदाहरण फायरबेस एंड्रॉइड ऐप आईडी: 1:567383003300:android:17104a2ced0c9b9b
    • PATH/TO/SYMBOLS : आपका निर्माण समाप्त होने पर Builds/Android निर्देशिका में उत्पन्न ज़िप्ड प्रतीक फ़ाइल का पथ (उदाहरण के लिए: 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. अपना ऐप बनाएं और निर्माण पूरा होने के बाद प्रतीक जानकारी अपलोड करें।
    • आईओएस : फायरबेस यूनिटी एडिटर प्लगइन आपकी प्रतीक फ़ाइल को अपलोड करने के लिए स्वचालित रूप से आपके एक्सकोड प्रोजेक्ट को कॉन्फ़िगर करता है।
    • एंड्रॉइड : अपनी प्रतीक फ़ाइल अपलोड करने के लिए फायरबेस सीएलआई crashlytics:symbols:upload कमांड चलाएँ।
  3. अपना ऐप चलाएँ. एक बार जब आपका ऐप चल रहा हो, तो डिवाइस लॉग देखें और CrashlyticsTester से अपवाद ट्रिगर होने की प्रतीक्षा करें।
    • iOS : Xcode के निचले फलक में लॉग देखें।
    • एंड्रॉइड : टर्मिनल में निम्नलिखित कमांड चलाकर लॉग देखें: adb logcat
  4. अपवाद देखने के लिए क्रैशलाईटिक्स डैशबोर्ड पर जाएँ! आप इसे डैशबोर्ड के नीचे समस्या तालिका में देखेंगे। बाद में कोडलैब में, आप इन रिपोर्टों का पता लगाने के तरीके के बारे में और जानेंगे।
  5. एक बार जब आप पुष्टि कर लें कि ईवेंट क्रैशलिटिक्स पर अपलोड किया गया था, तो उस EmptyObject GameObject का चयन करें जिसके साथ आपने इसे संलग्न किया था, केवल CrashlyticsTester घटक को हटा दें, और फिर दृश्य को उसकी मूल स्थिति में पुनर्स्थापित करने के लिए सहेजें।

5. डिबग मेनू को सक्षम करें और समझें

अब तक, आपने अपने यूनिटी प्रोजेक्ट में क्रैशलिटिक्स जोड़ा है, सेटअप पूरा किया है, और पुष्टि की है कि क्रैशलिटिक्स एसडीके फायरबेस पर इवेंट अपलोड कर रहा है। अब आप अपने यूनिटी प्रोजेक्ट में एक मेनू बनाएंगे जो प्रदर्शित करेगा कि आपके गेम में अधिक उन्नत क्रैशलिटिक्स कार्यक्षमता का उपयोग कैसे करें। लेवल अप विद फायरबेस यूनिटी प्रोजेक्ट में पहले से ही एक छिपा हुआ डिबग मेनू है जिसे आप दृश्यमान बनाएंगे और उसके लिए कार्यक्षमता लिखेंगे।

डिबग मेनू सक्षम करें

डिबग मेनू तक पहुंचने का बटन आपके यूनिटी प्रोजेक्ट में मौजूद है, लेकिन यह वर्तमान में सक्षम नहीं है। MainMenu प्रीफ़ैब से इसे एक्सेस करने के लिए आपको बटन को सक्षम करना होगा:

  1. यूनिटी एडिटर में, MainMenu नामक प्रीफ़ैब खोलें। 4148538cbe9f36c5.png
  2. प्रीफ़ैब पदानुक्रम में, DebugMenuButton नामक अक्षम उप-ऑब्जेक्ट ढूंढें, और फिर उसका चयन करें। 816f8f9366280f6c.png
  3. DebugMenuButton वाले टेक्स्ट फ़ील्ड के बाईं ओर ऊपरी-बाएँ कोने में बॉक्स को चेक करके DebugMenuButton सक्षम करें। 8a8089d2b4886da2.png
  4. प्रीफ़ैब सहेजें.
  5. गेम को संपादक में या अपने डिवाइस पर चलाएँ। मेनू अब पहुंच योग्य होना चाहिए.

डिबग मेनू के लिए विधि निकायों का पूर्वावलोकन करें और समझें

बाद में इस कोडलैब में, आप कुछ पूर्व-कॉन्फ़िगर डिबग क्रैशलिटिक्स विधियों के लिए विधि निकाय लिखेंगे। हालाँकि, लेवल अप विद फायरबेस यूनिटी प्रोजेक्ट में, विधियों को DebugMenu.cs में परिभाषित और कॉल किया जाता है।

हालाँकि इनमें से कुछ विधियाँ क्रैशलिटिक्स विधियों को कॉल करेंगी और त्रुटियों को फेंकेंगी, इन त्रुटियों को पकड़ने के लिए क्रैशलिटिक्स की क्षमता पहले उन विधियों को कॉल करने पर निर्भर नहीं करती है। बल्कि, स्वचालित रूप से त्रुटियों को पकड़ने से उत्पन्न क्रैश रिपोर्ट इन विधियों द्वारा जोड़ी गई जानकारी द्वारा बढ़ाई जाएगी।

DebugMenu.cs खोलें, और फिर निम्न विधियाँ खोजें:

क्रैशलिटिक्स मुद्दों को उत्पन्न करने और एनोटेट करने की विधियाँ:

  • CrashNow
  • LogNonfatalError
  • LogStringsAndCrashNow
  • SetAndOverwriteCustomKeyThenCrash
  • SetLogsAndKeysBeforeANR

डिबगिंग में सहायता के लिए एनालिटिक्स इवेंट लॉग करने की विधियाँ:

  • LogProgressEventWithStringLiterals
  • LogIntScoreWithBuiltInEventAndParams

इस कोडलैब के बाद के चरणों में, आप इन तरीकों को लागू करेंगे और सीखेंगे कि वे गेम के विकास में होने वाली विशिष्ट स्थितियों को संबोधित करने में कैसे मदद करते हैं।

6. विकास में क्रैश रिपोर्ट की डिलीवरी सुनिश्चित करें

इससे पहले कि आप इन डिबग विधियों को लागू करना शुरू करें और देखें कि वे क्रैश रिपोर्ट को कैसे प्रभावित करते हैं, सुनिश्चित करें कि आप समझते हैं कि क्रैशलाईटिक्स को घटनाओं की रिपोर्ट कैसे की जाती है।

यूनिटी प्रोजेक्ट्स के लिए, आपके गेम में क्रैश और अपवाद ईवेंट तुरंत डिस्क पर लिखे जाते हैं। ऐसे अनदेखे अपवादों के लिए जो आपके गेम को क्रैश नहीं करते हैं (उदाहरण के लिए, गेम लॉजिक में अनकॉट C# अपवाद), आप Crashlytics SDK को Crashlytics.ReportUncaughtExceptionsAsFatal प्रॉपर्टी को true पर सेट करके उन्हें घातक घटनाओं के रूप में रिपोर्ट कर सकते हैं, जहां आप अपने यूनिटी प्रोजेक्ट में Crashlytics को इनिशियलाइज़ करते हैं। . गेम को पुनः आरंभ करने के लिए अंतिम-उपयोगकर्ता की आवश्यकता के बिना इन घटनाओं की वास्तविक समय में क्रैशलिटिक्स को रिपोर्ट की जाती है। ध्यान दें कि मूल क्रैश को हमेशा घातक घटनाओं के रूप में रिपोर्ट किया जाता है और जब कोई अंतिम उपयोगकर्ता गेम को पुनरारंभ करता है तो उसे भेजा जाता है।

इसके अलावा, विभिन्न रनटाइम वातावरण फायरबेस को क्रैशलिटिक्स जानकारी कैसे भेजते हैं, इसके बीच निम्नलिखित छोटे-लेकिन महत्वपूर्ण-अंतरों से अवगत रहें:

आईओएस सिम्युलेटर:

  • क्रैशलिटिक्स जानकारी तभी रिपोर्ट की जाती है जब आप सिम्युलेटर से एक्सकोड को अलग करते हैं। यदि Xcode संलग्न है, तो यह अपस्ट्रीम में त्रुटियों को पकड़ता है, सूचना वितरण को रोकता है।

मोबाइल भौतिक उपकरण (एंड्रॉइड और आईओएस):

  • Android-विशिष्ट: ANR केवल Android 11+ पर रिपोर्ट किए जाते हैं। ANRs और गैर-घातक घटनाओं की सूचना अगले भाग में दी जाती है।

एकता संपादक:

CrashNow() में एक बटन के स्पर्श से अपने गेम को क्रैश करने का परीक्षण करें

आपके गेम में क्रैशलाईटिक्स सेट होने के बाद, क्रैशलाईटिक्स एसडीके स्वचालित रूप से क्रैश और अनकहा अपवादों को रिकॉर्ड करता है और उन्हें विश्लेषण के लिए फायरबेस पर अपलोड करता है। और रिपोर्ट फायरबेस कंसोल में क्रैशलाइटिक्स डैशबोर्ड में प्रदर्शित होती हैं।

  1. यह प्रदर्शित करने के लिए कि यह वास्तव में स्वचालित है: DebugMenu.cs खोलें, और फिर विधि CrashNow() को इस प्रकार अधिलेखित करें:
    void CrashNow()
    {
        TestCrash();
    }
    
  2. अपना ऐप बनाएं.
  3. (केवल एंड्रॉइड) निम्नलिखित फायरबेस सीएलआई कमांड चलाकर अपने प्रतीक अपलोड करें:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. क्रैश नाउ बटन पर टैप करें, और क्रैश रिपोर्ट को देखने और व्याख्या करने का तरीका जानने के लिए इस कोडलैब के अगले चरण पर आगे बढ़ें।

7. फायरबेस कंसोल में समस्या रिपोर्ट को समझें

जब आपकी क्रैश रिपोर्ट देखने की बात आती है, तो आपको उनसे अधिकतम लाभ कैसे प्राप्त करें, इसके बारे में थोड़ा और जानने की आवश्यकता है। आपके द्वारा लिखी गई प्रत्येक विधि यह दिखाएगी कि क्रैशलाइटिक्स रिपोर्ट में विभिन्न प्रकार की जानकारी कैसे जोड़ी जाए।

  1. क्रैश नाउ बटन पर टैप करें और फिर अपने ऐप को पुनरारंभ करें।
  2. क्रैशलिटिक्स डैशबोर्ड पर जाएं। डैशबोर्ड के नीचे समस्याएँ तालिका तक स्क्रॉल करें जहाँ क्रैशलिटिक्स उन घटनाओं को "समस्याओं" में समूहित करता है जिनका मूल कारण समान है।
  3. समस्याएँ तालिका में सूचीबद्ध नए अंक पर क्लिक करें। ऐसा करने से फायरबेस को भेजे गए प्रत्येक व्यक्तिगत ईवेंट के बारे में ईवेंट सारांश प्रदर्शित होता है।

    आपको निम्नलिखित स्क्रीनशॉट जैसा कुछ दिखना चाहिए। ध्यान दें कि कैसे ईवेंट सारांश उस कॉल के स्टैक ट्रेस को प्रमुखता से प्रदर्शित करता है जिसके कारण दुर्घटना हुई। 40c96abe7f90c3aa.png

अतिरिक्त मेटाडेटा

एक अन्य सहायक टैब यूनिटी मेटाडेटा टैब है। यह अनुभाग आपको उस डिवाइस की विशेषताओं के बारे में सूचित करता है जिस पर घटना घटी, जिसमें भौतिक विशेषताएं, सीपीयू मॉडल/विशेषताएं और सभी प्रकार के जीपीयू मेट्रिक्स शामिल हैं।

यहां एक उदाहरण दिया गया है जहां इस टैब की जानकारी उपयोगी हो सकती है:
कल्पना कीजिए कि आपका गेम एक निश्चित लुक पाने के लिए शेडर्स का भारी उपयोग करता है, लेकिन सभी फोन में जीपीयू नहीं होते हैं जो इस सुविधा को प्रस्तुत करने में सक्षम हों। यूनिटी मेटाडेटा टैब की जानकारी आपको बेहतर विचार दे सकती है कि आपके ऐप को कौन से हार्डवेयर का परीक्षण करना चाहिए, यह तय करते समय कि किन सुविधाओं को स्वचालित रूप से उपलब्ध कराना है या पूरी तरह से अक्षम करना है।

हालांकि आपके डिवाइस पर बग या क्रैश कभी नहीं हो सकता है, लेकिन एंड्रॉइड डिवाइसों की विशाल विविधता के कारण, यह आपके दर्शकों के डिवाइसों के विशेष "हॉटस्पॉट" को बेहतर ढंग से समझने में मदद करता है।

41d8d7feaa87454d.png

8. अपवाद को फेंकें, पकड़ें और लॉग करें

अक्सर, एक डेवलपर के रूप में, भले ही आपका कोड रनटाइम अपवाद को ठीक से पकड़ता है और संभालता है, यह नोट करना अच्छा होता है कि यह हुआ, और किन परिस्थितियों में हुआ। Crashlytics.LogException उपयोग इसी सटीक उद्देश्य के लिए किया जा सकता है - फ़ायरबेस पर एक अपवाद ईवेंट भेजने के लिए ताकि आप फ़ायरबेस कंसोल में समस्या को और अधिक डीबग कर सकें।

  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 crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  5. लॉग नॉनफैटल एरर बटन पर टैप करें और फिर अपने ऐप को पुनरारंभ करें।
  6. क्रैशलिटिक्स डैशबोर्ड पर जाएं, और आपको कुछ वैसा ही देखना चाहिए जैसा आपने इस कोडलैब के अंतिम चरण में देखा था।
  7. हालाँकि, इस बार, ईवेंट प्रकार फ़िल्टर को गैर-घातक तक सीमित रखें ताकि आप केवल गैर-घातक त्रुटियाँ ही देख सकें, जैसे कि जो आपने अभी लॉग किया है।
    a39ea8d9944cbbd9.png

9. प्रोग्राम निष्पादन के प्रवाह को बेहतर ढंग से समझने के लिए क्रैशलाईटिक्स में स्ट्रिंग्स लॉग करें

क्या आपने कभी यह पता लगाने की कोशिश की है कि कोड की एक पंक्ति जो कई पथों से कॉल की जाती है, प्रति सत्र सैकड़ों नहीं तो हजारों बार, अचानक अपवाद या क्रैश उत्पन्न कर सकती है? हालाँकि आईडीई में कोड के माध्यम से कदम बढ़ाना और मूल्यों को अधिक बारीकी से देखना अच्छा हो सकता है, लेकिन क्या होगा यदि यह आपके उपयोगकर्ताओं के केवल गायब प्रतिशत के बीच होता है? इससे भी बदतर, यदि आप कुछ भी करने के बावजूद इस दुर्घटना को दोहरा नहीं सकते तो आप क्या करेंगे?

इस तरह की स्थितियों में, कुछ संदर्भ होने से बहुत बड़ा अंतर आ सकता है। 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 crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. लॉग स्ट्रिंग्स और क्रैश नाउ बटन पर टैप करें और फिर अपने ऐप को पुनरारंभ करें।
  5. क्रैशलाइटिक्स डैशबोर्ड पर वापस जाएं, और समस्याएँ तालिका में सूचीबद्ध नवीनतम समस्या पर क्लिक करें। फिर से आपको पिछले अंकों के समान कुछ देखना चाहिए।
    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. (केवल एंड्रॉइड) निम्नलिखित फायरबेस सीएलआई कमांड चलाकर अपने प्रतीकों को अपलोड करें:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. कस्टम कुंजी और क्रैश सेट करें बटन पर टैप करें और फिर अपने ऐप को पुनरारंभ करें।
  5. क्रैशलाइटिक्स डैशबोर्ड पर वापस जाएं, और समस्याएँ तालिका में सूचीबद्ध नवीनतम समस्या पर क्लिक करें। फिर से आपको पिछले अंकों के समान कुछ देखना चाहिए।
  6. हालाँकि, इस बार, इवेंट सारांश में कुंजियाँ टैब पर क्लिक करें ताकि आप Current Time सहित कुंजियों का मूल्य देख सकें:
    7dbe1eb00566af98.png

आप कस्टम लॉग के बजाय कस्टम कुंजियों का उपयोग क्यों करना चाहेंगे?

  • लॉग अनुक्रमिक डेटा संग्रहीत करने में अच्छे हैं, लेकिन यदि आप केवल नवीनतम मान चाहते हैं तो कस्टम कुंजियाँ बेहतर हैं।
  • फायरबेस कंसोल में, आप समस्या तालिका खोज बॉक्स में कुंजियों के मान के आधार पर समस्याओं को आसानी से फ़िल्टर कर सकते हैं।

हालाँकि, लॉग के समान, कस्टम कुंजियों की भी एक सीमा होती है। क्रैशलिटिक्स अधिकतम 64 कुंजी-मूल्य जोड़े का समर्थन करता है। इस सीमा तक पहुंचने के बाद, अतिरिक्त मान सहेजे नहीं जाते हैं। प्रत्येक कुंजी-मूल्य जोड़ी का आकार 1 KB तक हो सकता है।

11. (केवल Android) 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 crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. सेट लॉग्स और कुंजियाँ → ANR लेबल वाला बटन टैप करें, और फिर अपना ऐप पुनरारंभ करें।
  5. क्रैशलिटिक्स डैशबोर्ड में वापस जाएं, और फिर इवेंट सारांश देखने के लिए समस्या तालिका में नए अंक पर क्लिक करें। यदि कॉल ठीक से चली, तो आपको कुछ इस तरह देखना चाहिए:
    876c3cff7037bd07.png

    जैसा कि आप देख सकते हैं, फायरबेस ने थ्रेड पर व्यस्त प्रतीक्षा को आपके ऐप द्वारा ANR ट्रिगर करने का मुख्य कारण बताया।
  6. यदि आप इवेंट सारांश के लॉग टैब में लॉग देखते हैं, तो आप देखेंगे कि पूर्ण के रूप में दर्ज की गई अंतिम विधि DoSevereWork है।
    5a4bec1cf06f6984.png

    इसके विपरीत, प्रारंभ के रूप में सूचीबद्ध अंतिम विधि DoExtremeWork है, जो इंगित करती है कि इस विधि के दौरान ANR हुआ, और DoExtremeWork लॉग करने से पहले गेम बंद हो गया।

    89d86d5f598ecf3a.png

यह क्यों?

  • ANRs को पुन: प्रस्तुत करना अविश्वसनीय रूप से कठिन है, इसलिए कोड क्षेत्र और मेट्रिक्स के बारे में समृद्ध जानकारी प्राप्त करने में सक्षम होना इसे कटौतीत्मक रूप से खोजने के लिए अविश्वसनीय रूप से महत्वपूर्ण है।
  • कस्टम कुंजियों में संग्रहीत जानकारी के साथ, अब आप जानते हैं कि कौन से एसिंक थ्रेड को चलने में सबसे अधिक समय लगा, और कौन से एएनआर ट्रिगर होने के खतरे में थे। इस प्रकार का संबंधित तार्किक और संख्यात्मक डेटा आपको दिखाएगा कि आपके कोड में कहां अनुकूलन करना सबसे आवश्यक है।

12. रिपोर्ट को और समृद्ध करने के लिए एनालिटिक्स घटनाओं को आपस में जोड़ना

निम्नलिखित विधियाँ भी डिबग मेनू से कॉल करने योग्य हैं, लेकिन स्वयं समस्याएँ उत्पन्न करने के बजाय, वे आपके गेम की कार्यप्रणाली को बेहतर ढंग से समझने के लिए जानकारी के एक अन्य स्रोत के रूप में Google 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 crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. उपरोक्त फ़ंक्शन को कॉल करने के लिए निम्न में से कम से कम एक बटन को एक या अधिक बार दबाएँ:
    • लॉग स्ट्रिंग इवेंट
    • लॉग इन इवेंट
  5. क्रैश नाउ बटन दबाएँ।
  6. क्रैश इवेंट को फायरबेस पर अपलोड करने के लिए अपने गेम को पुनः प्रारंभ करें।
  7. जब आप एनालिटिक्स इवेंट के विभिन्न मनमाने क्रमों को लॉग करते हैं और फिर आपका गेम एक इवेंट जेनरेट करता है, जिससे क्रैशलिटिक्स एक रिपोर्ट बनाता है (जैसा कि आपने अभी किया है), तो वे क्रैशलिटिक्स इवेंट सारांश के लॉग टैब में इस तरह जुड़ जाते हैं:
    d3b16d78f76bfb04.png

13. आगे बढ़ना

और इसके साथ ही, आपके पास एक बेहतर सैद्धांतिक आधार होना चाहिए जिस पर आप अपनी स्वचालित रूप से जेनरेट की गई क्रैश रिपोर्ट को पूरक कर सकें। यह नई जानकारी आपको वर्तमान स्थिति, पिछली घटनाओं के रिकॉर्ड और मौजूदा Google Analytics घटनाओं का उपयोग करने की अनुमति देती है ताकि घटनाओं और तर्क के अनुक्रम को बेहतर ढंग से तोड़ दिया जा सके जो इसके परिणाम का कारण बने।

यदि आपका ऐप एंड्रॉइड 11 (एपीआई लेवल 30) या उच्चतर को लक्षित करता है, तो GWP-ASan को शामिल करने पर विचार करें, जो एक देशी मेमोरी एलोकेटर सुविधा है जो देशी मेमोरी त्रुटियों जैसे use-after-free और heap-buffer-overflow बग के कारण होने वाले क्रैश को डीबग करने के लिए उपयोगी है। इस डिबगिंग सुविधा का लाभ उठाने के लिए, GWP-ASan को स्पष्ट रूप से सक्षम करें

अगले कदम

रिमोट कॉन्फिग कोडलैब के साथ इंस्ट्रूमेंट योर यूनिटी गेम के लिए आगे बढ़ें, जहां आप यूनिटी में रिमोट कॉन्फिग और ए/बी टेस्टिंग का उपयोग करने के बारे में सीखेंगे।