Crashlytics की बेहतर सुविधाओं की मदद से, Unity गेम के क्रैश होने के बारे में जानें

1. शुरुआती जानकारी

इस कोडलैब में, आपको Crashlytics की ऐडवांस सुविधाओं के इस्तेमाल के बारे में जानकारी मिलेगी. इससे आपको क्रैश और उनकी वजहों के बारे में बेहतर जानकारी मिलेगी.

आपको एक सैंपल गेम, MechaHamster: Level Up with Firebase Edition में नई सुविधाएं जोड़नी होंगी. यह सैंपल गेम, क्लासिक Firebase गेम MechaHamster का नया वर्शन है. इसमें Firebase की ज़्यादातर इन-बिल्ट सुविधाओं को हटा दिया गया है. इससे आपको उनकी जगह Firebase की नई सुविधाओं को लागू करने का मौका मिलता है.

इससे गेम में डीबग मेन्यू जुड़ जाएगा. इस डीबग मेन्यू में, आपके बनाए गए तरीकों को कॉल किया जाता है. इससे आपको Crashlytics की अलग-अलग सुविधाओं को आज़माने का मौका मिलता है. इन तरीकों से, आपको कस्टम कुंजियों, कस्टम लॉग, नॉनफ़ैटल गड़बड़ियों वगैरह के साथ, क्रैश की अपने-आप जनरेट होने वाली रिपोर्ट को एनोटेट करने का तरीका पता चलेगा.

गेम बनाने के बाद, डीबग मेन्यू का इस्तेमाल करें. साथ ही, नतीजों की जांच करें, ताकि आपको यह पता चल सके कि गेम किस तरह से काम करता है.

आपको क्या सीखने को मिलेगा

  • Crashlytics, अपने-आप इन गड़बड़ियों का पता लगाता है.
  • ऐसी अन्य गड़बड़ियां जिन्हें जान-बूझकर रिकॉर्ड किया जा सकता है.
  • इन गड़बड़ियों के बारे में ज़्यादा जानकारी कैसे जोड़ें, ताकि उन्हें आसानी से समझा जा सके.

आपको इनकी ज़रूरत होगी

  • Unity (सुझाया गया कम से कम वर्शन 2019+) के साथ इनमें से कोई एक या दोनों:
    • iOS बिल्ड के लिए सहायता
    • Android Build Support
  • (सिर्फ़ Android के लिए) Firebase CLI (इसका इस्तेमाल क्रैश रिपोर्ट के लिए सिंबल अपलोड करने के लिए किया जाता है)

2. डेवलपमेंट एनवायरमेंट सेट अप करना

यहां दिए गए सेक्शन में, Level Up with Firebase कोड को डाउनलोड करने और उसे Unity में खोलने का तरीका बताया गया है.

ध्यान दें कि इस Level Up with Firebase सैंपल गेम का इस्तेमाल, Firebase + Unity के कई अन्य कोडलैब में किया जाता है. इसलिए, हो सकता है कि आपने इस सेक्शन में दिए गए टास्क पहले ही पूरे कर लिए हों. अगर ऐसा है, तो इस पेज पर सीधे आखिरी चरण पर जाएं: "Unity के लिए Firebase SDK टूल जोड़ें".

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

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

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

इसके अलावा, अगर आपने git इंस्टॉल नहीं किया है, तो रिपॉज़िटरी को ZIP फ़ाइल के तौर पर डाउनलोड करें.

Unity एडिटर में Level Up with Firebase खोलें

  1. Unity Hub लॉन्च करें. इसके बाद, Projects टैब में जाकर, Open के बगल में मौजूद ड्रॉपडाउन ऐरो पर क्लिक करें.
  2. डिस्क से प्रोजेक्ट जोड़ें पर क्लिक करें.
  3. उस डायरेक्ट्री पर जाएं जिसमें कोड मौजूद है. इसके बाद, ठीक है पर क्लिक करें.
  4. अगर आपको प्रॉम्प्ट दिखे, तो इस्तेमाल करने के लिए Unity Editor का वर्शन और टारगेट प्लैटफ़ॉर्म (Android या iOS) चुनें.
  5. प्रोजेक्ट के नाम level-up-with-firebase पर क्लिक करें. इसके बाद, प्रोजेक्ट Unity एडिटर में खुल जाएगा.
  6. अगर आपका एडिटर इसे अपने-आप नहीं खोलता है, तो Unity Editor के प्रोजेक्ट टैब में ऐसेट > Hamster में जाकर MainGameScene खोलें.
    ff4ea3f3c0d29379.png

Unity को इंस्टॉल करने और इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, Unity में काम करना लेख पढ़ें.

3. Firebase को अपने Unity प्रोजेक्ट से जोड़ना

Firebase प्रोजेक्ट बनाना

  1. अपने Google खाते का इस्तेमाल करके, Firebase कंसोल में साइन इन करें.
  2. नया प्रोजेक्ट बनाने के लिए, बटन पर क्लिक करें. इसके बाद, प्रोजेक्ट का नाम डालें. उदाहरण के लिए, Mechahamster Codelab.
  3. जारी रखें पर क्लिक करें.
  4. अगर आपसे कहा जाए, तो Firebase की शर्तें पढ़ें और स्वीकार करें. इसके बाद, जारी रखें पर क्लिक करें.
  5. (ज़रूरी नहीं) Firebase कंसोल में एआई की मदद पाने की सुविधा चालू करें. इसे "Firebase में Gemini" कहा जाता है.
  6. इस कोडलैब के लिए, आपको Firebase के प्रॉडक्ट का बेहतर तरीके से इस्तेमाल करने के लिए Google Analytics की ज़रूरत होगी. इसलिए, Google Analytics के विकल्प के लिए टॉगल चालू रखें. Google Analytics को सेट अप करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.
  7. प्रोजेक्ट बनाएं पर क्लिक करें. इसके बाद, प्रोजेक्ट के प्रोविज़न होने का इंतज़ार करें. इसके बाद, जारी रखें पर क्लिक करें.

अपने ऐप्लिकेशन को Firebase के साथ रजिस्टर करना

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

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

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

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

Unity के लिए Firebase SDK टूल जोड़ना

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

Unity प्रोजेक्ट में Firebase SDK टूल जोड़ने के बारे में ज़्यादा जानने के लिए, Unity में इंस्टॉल करने के अन्य विकल्प लेख पढ़ें.

4. अपने Unity प्रोजेक्ट में Crashlytics सेट अप करना

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

Crashlytics 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 को शुरू करने की सुविधा जोड़ें:
    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");
          }
        });
    }
    

यहां पर इनिशियलाइज़ेशन लॉजिक रखने से, Firebase डिपेंडेंसी के इनिशियलाइज़ होने से पहले प्लेयर इंटरैक्शन को रोका जा सकता है.

Crashlytics के अक्सर पूछे जाने वाले सवालों में, हैंडल न किए गए अपवादों को नुकसान पहुंचाने वाली गड़बड़ियों के तौर पर रिपोर्ट करने के फ़ायदों और प्रभावों के बारे में बताया गया है.

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

iOS और Android ऐप्लिकेशन के लिए, सिंबल बनाने और अपलोड करने का तरीका अलग-अलग होता है.

iOS+ (Apple प्लैटफ़ॉर्म)

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

Android

  1. (सिर्फ़ शुरुआती सेटअप के दौरान, हर बिल्ड के लिए नहीं) अपना बिल्ड सेट अप करें:
    1. अपने प्रोजेक्ट डायरेक्ट्री के रूट में Builds नाम का नया फ़ोल्डर बनाएं.इसका मतलब है कि इसे अपनी Assets डायरेक्ट्री के साथ-साथ बनाएं. इसके बाद, Android नाम का सब-फ़ोल्डर बनाएं.
    2. फ़ाइल > बिल्ड सेटिंग > प्लेयर सेटिंग > कॉन्फ़िगरेशन में जाकर, स्क्रिप्टिंग बैकएंड को IL2CPP पर सेट करें.
      • आम तौर पर, IL2CPP की वजह से बिल्ड छोटे होते हैं और उनकी परफ़ॉर्मेंस बेहतर होती है.
      • IL2CPP, iOS पर उपलब्ध एकमात्र विकल्प है. इसे चुनने से, दोनों प्लैटफ़ॉर्म के बीच बेहतर समानता बनी रहती है. साथ ही, अगर दोनों प्लैटफ़ॉर्म के लिए ऐप्लिकेशन बनाया जाता है, तो दोनों के बीच डीबग करने में आसानी होती है.
  2. अपना ऐप्लिकेशन बनाएं. फ़ाइल > बिल्ड सेटिंग में जाकर, यह काम पूरा करें:
    1. पक्का करें कि Create symbols.zip पर सही का निशान लगा हो. अगर आपको ड्रॉपडाउन दिखता है, तो Debugging चुनें.
    2. Unity Editor से सीधे अपने APK को Builds/Android सब-फ़ोल्डर में बनाएं.
  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. एडिटर Hierarchy में जाकर, 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: Firebase Unity Editor प्लगिन, आपके Xcode प्रोजेक्ट को सिंबल फ़ाइल अपलोड करने के लिए अपने-आप कॉन्फ़िगर करता है.
    • Android: अपनी सिंबल फ़ाइल अपलोड करने के लिए, Firebase CLI crashlytics:symbols:upload कमांड चलाएं.
  3. अपना ऐप्लिकेशन चलाएं. ऐप्लिकेशन चलने के बाद, डिवाइस लॉग देखें और CrashlyticsTester से अपवाद ट्रिगर होने का इंतज़ार करें.
    • iOS: Xcode के सबसे नीचे वाले पैन में लॉग देखें.
    • Android: टर्मिनल में यह निर्देश चलाकर लॉग देखें: adb logcat.
  4. अपवाद देखने के लिए, Crashlytics डैशबोर्ड पर जाएं! यह आपको डैशबोर्ड में सबसे नीचे मौजूद, समस्याएं टेबल में दिखेगा. कोडलैब में आगे, आपको इन रिपोर्ट को एक्सप्लोर करने के तरीके के बारे में ज़्यादा जानकारी मिलेगी.
  5. जब आपको पुष्टि हो जाए कि इवेंट को Crashlytics पर अपलोड कर दिया गया है, तब उस EmptyObject GameObject को चुनें जिससे आपने इसे अटैच किया था. इसके बाद, सिर्फ़ CrashlyticsTester कॉम्पोनेंट हटाएं. इसके बाद, सीन को सेव करें, ताकि उसे उसकी मूल स्थिति में वापस लाया जा सके.

5. डीबग मेन्यू को चालू करना और उसके बारे में जानकारी

अब तक, आपने अपने Unity प्रोजेक्ट में Crashlytics को जोड़ लिया है, सेटअप पूरा कर लिया है, और पुष्टि कर ली है कि Crashlytics SDK, Firebase पर इवेंट अपलोड कर रहा है. अब आपको अपने Unity प्रोजेक्ट में एक मेन्यू बनाना होगा. इससे यह पता चलेगा कि अपने गेम में Crashlytics की ज़्यादा बेहतर सुविधाओं का इस्तेमाल कैसे किया जा सकता है. Level Up with Firebase Unity प्रोजेक्ट में पहले से ही एक छिपा हुआ डीबग मेन्यू मौजूद है. आपको इसे दिखाना होगा और इसके लिए फ़ंक्शन लिखना होगा.

डीबग मेन्यू चालू करना

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

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

डीबग मेन्यू के लिए, तरीके के मुख्य हिस्से की झलक देखना और उसे समझना

इस कोडलैब में बाद में, आपको Crashlytics की डीबग करने के लिए पहले से कॉन्फ़िगर किए गए कुछ तरीकों के लिए, मेथड बॉडी लिखनी होंगी. हालांकि, Level Up with Firebase Unity प्रोजेक्ट में, तरीकों को DebugMenu.cs में तय किया गया है और वहीं से कॉल किया गया है.

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

DebugMenu.cs खोलें. इसके बाद, ये तरीके ढूंढें:

Crashlytics की समस्याओं को जनरेट और एनोटेट करने के तरीके:

  • CrashNow
  • LogNonfatalError
  • LogStringsAndCrashNow
  • SetAndOverwriteCustomKeyThenCrash
  • SetLogsAndKeysBeforeANR

डीबग करने में मदद पाने के लिए, Analytics इवेंट लॉग करने के तरीके:

  • LogProgressEventWithStringLiterals
  • LogIntScoreWithBuiltInEventAndParams

इस कोडलैब के बाद के चरणों में, इन तरीकों को लागू किया जाएगा. साथ ही, यह भी बताया जाएगा कि ये तरीके, गेम डेवलपमेंट के दौरान आने वाली खास समस्याओं को हल करने में कैसे मदद करते हैं.

6. यह पक्का करना कि डेवलपमेंट के दौरान क्रैश रिपोर्ट डिलीवर हों

डीबग करने के इन तरीकों को लागू करने और यह देखने से पहले कि ये क्रैश रिपोर्ट पर किस तरह असर डालते हैं, पक्का करें कि आपको यह पता हो कि Crashlytics को इवेंट की जानकारी कैसे भेजी जाती है.

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

इसके अलावा, अलग-अलग रनटाइम एनवायरमेंट से Crashlytics की जानकारी, Firebase को कैसे भेजी जाती है, इसके बीच के इन छोटे, लेकिन अहम अंतरों के बारे में जानें:

iOS सिम्युलेटर:

  • Crashlytics की जानकारी सिर्फ़ तब रिपोर्ट की जाती है, जब Xcode को सिम्युलेटर से अलग किया जाता है. अगर Xcode अटैच है, तो यह अपस्ट्रीम में गड़बड़ियों का पता लगाता है. इससे जानकारी डिलीवर नहीं हो पाती.

मोबाइल फ़िज़िकल डिवाइस (Android और iOS):

  • Android के लिए: एएनआर की रिपोर्ट सिर्फ़ Android 11 और इसके बाद के वर्शन पर मिलती है. एएनआर और नुकसान न पहुंचाने वाले इवेंट की रिपोर्ट, अगली बार ऐप्लिकेशन चलाने पर मिलती है.

Unity Editor:

CrashNow() में, बटन दबाकर अपने गेम के क्रैश होने की जांच करना

आपके गेम में Crashlytics सेट अप होने के बाद, Crashlytics SDK टूल क्रैश और अनकैच किए गए अपवादों को अपने-आप रिकॉर्ड करता है. साथ ही, विश्लेषण के लिए उन्हें Firebase पर अपलोड करता है. ये रिपोर्ट, Firebase कंसोल में मौजूद Crashlytics डैशबोर्ड में दिखती हैं.

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

7. Firebase कंसोल में समस्या की रिपोर्ट के बारे में जानकारी

क्रैश रिपोर्ट देखने के लिए, आपको यह जानना होगा कि इनका ज़्यादा से ज़्यादा फ़ायदा कैसे पाया जा सकता है. आपके लिखे गए हर तरीके से यह पता चलेगा कि Crashlytics रिपोर्ट में अलग-अलग तरह की जानकारी कैसे जोड़ी जाती है.

  1. अभी क्रैश करें बटन पर टैप करें. इसके बाद, ऐप्लिकेशन को फिर से चालू करें.
  2. Crashlytics डैशबोर्ड पर जाएं. डैशबोर्ड में सबसे नीचे मौजूद समस्याएं टेबल तक नीचे की ओर स्क्रोल करें. इस टेबल में, Crashlytics उन इवेंट को "समस्याएं" के तौर पर ग्रुप करता है जिनकी वजह एक ही होती है.
  3. समस्याएं टेबल में मौजूद नई समस्या पर क्लिक करें. ऐसा करने पर, Firebase को भेजे गए हर इवेंट के बारे में इवेंट की खास जानकारी दिखती है.

    आपको नीचे दिए गए स्क्रीन कैप जैसा कुछ दिखेगा. ध्यान दें कि इवेंट की खास जानकारी में, क्रैश की वजह बने कॉल का स्टैक ट्रेस प्रमुखता से दिखाया गया है.40c96abe7f90c3aa.png

अन्य मेटाडेटा

Unity मेटाडेटा टैब भी बहुत काम का है. इस सेक्शन में, उस डिवाइस के एट्रिब्यूट के बारे में जानकारी मिलती है जिस पर इवेंट हुआ था. इसमें डिवाइस की फ़िज़िकल फ़ीचर, सीपीयू मॉडल/स्पेसिफ़िकेशन, और सभी तरह की जीपीयू मेट्रिक शामिल हैं.

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

ऐसा हो सकता है कि आपके डिवाइस पर कोई गड़बड़ी या क्रैश कभी न हो. हालांकि, अलग-अलग तरह के 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. (सिर्फ़ Android के लिए) Firebase CLI की इस कमांड को चलाकर, अपने सिंबल अपलोड करें:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  5. Log Nonfatal Error बटन पर टैप करें. इसके बाद, ऐप्लिकेशन को रीस्टार्ट करें.
  6. Crashlytics डैशबोर्ड पर जाएं. आपको इस कोडलैब के आखिरी चरण में देखी गई चीज़ों जैसी ही जानकारी दिखेगी.
  7. हालांकि, इस बार इवेंट टाइप फ़िल्टर को नॉन-फ़ैटल तक सीमित करें, ताकि आपको सिर्फ़ नॉन-फ़ैटल गड़बड़ियां दिखें. जैसे, अभी लॉग की गई गड़बड़ी.
    a39ea8d9944cbbd9.png

9. प्रोग्राम के एक्ज़ीक्यूशन के फ़्लो को बेहतर तरीके से समझने के लिए, Crashlytics में स्ट्रिंग लॉग करें

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

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

10. कस्टम कुंजी लिखना और उसे बदलना

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

Crashlytics, मनमुताबिक स्ट्रिंग लॉग करने के साथ-साथ डीबग करने का एक और तरीका भी उपलब्ध कराता है. इससे क्रैश होने के समय आपके प्रोग्राम की सटीक स्थिति के बारे में पता चलता है: कस्टम कुंजियां.

ये की-वैल्यू पेयर हैं, जिन्हें किसी सेशन के लिए सेट किया जा सकता है. लॉग इकट्ठा होते हैं और उन्हें जोड़ा जाता है. हालांकि, कुंजियों को बदला जा सकता है, ताकि सिर्फ़ वैरिएबल या शर्त की मौजूदा स्थिति दिखे.

ये कुंजियां, आपके प्रोग्राम की आखिरी रिकॉर्ड की गई स्थिति का लेज़र होने के साथ-साथ, Crashlytics की समस्याओं के लिए असरदार फ़िल्टर के तौर पर भी इस्तेमाल की जा सकती हैं.

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

कस्टम लॉग के बजाय कस्टम कुंजियों का इस्तेमाल क्यों करना चाहिए?

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

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

11. (सिर्फ़ Android के लिए) एएनआर को समझने और उसकी जांच करने के लिए, कस्टम कुंजियों और लॉग का इस्तेमाल करना

Android डेवलपर के लिए, डीबग करने में सबसे मुश्किल समस्याओं में से एक, ऐप्लिकेशन काम नहीं कर रहा है (एएनआर) गड़बड़ी है. ANR तब होती है, जब कोई ऐप्लिकेशन पांच सेकंड से ज़्यादा समय तक इनपुट का जवाब नहीं देता है. अगर ऐसा होता है, तो इसका मतलब है कि ऐप्लिकेशन या तो बंद हो गया है या बहुत धीरे चल रहा है. उपयोगकर्ताओं को एक डायलॉग दिखाया जाता है. इसमें उन्हें "इंतज़ार करें" या "ऐप्लिकेशन बंद करें" में से कोई एक विकल्प चुनने का मौका मिलता है.

एएनआर की वजह से, उपयोगकर्ता को खराब अनुभव मिलता है. साथ ही, (ऊपर दिए गए एएनआर लिंक में बताया गया है कि) इससे Google Play Store में आपके ऐप्लिकेशन को खोजे जाने की संभावना पर असर पड़ सकता है. इनकी जटिलता की वजह से, डीबग करते समय एएनआर को फिर से जनरेट करना अक्सर बहुत मुश्किल होता है. ऐसा इसलिए होता है, क्योंकि ये अक्सर मल्टीथ्रेड वाले कोड की वजह से होते हैं. साथ ही, अलग-अलग फ़ोन मॉडल पर इनका व्यवहार काफ़ी अलग होता है. इसलिए, इन समस्याओं को हल करने के लिए, विश्लेषण और निगमन का इस्तेमाल करना सबसे अच्छा तरीका होता है.

इस तरीके में, हम 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. सेट लॉग और कुंजियां → एएनआर लेबल वाले बटन पर टैप करें. इसके बाद, अपना ऐप्लिकेशन फिर से चालू करें.
  5. Crashlytics डैशबोर्ड पर वापस जाएं. इसके बाद, समस्याएं टेबल में मौजूद नई समस्या पर क्लिक करके, इवेंट की खास जानकारी देखें. अगर कॉल सही तरीके से किया गया है, तो आपको कुछ ऐसा दिखेगा:
    876c3cff7037bd07.png

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

    इसके उलट, शुरू होने के तौर पर लिस्ट किया गया आखिरी तरीका DoExtremeWork है. इससे पता चलता है कि इस तरीके के दौरान एएनआर हुआ और गेम बंद हो गया. इसलिए, यह DoExtremeWork को लॉग नहीं कर सका.

    89d86d5f598ecf3a.png

ऐसा क्यों करते हैं?

  • एएनआर को फिर से जनरेट करना बहुत मुश्किल होता है. इसलिए, कोड एरिया और मेट्रिक के बारे में ज़्यादा जानकारी पाना बहुत ज़रूरी है, ताकि एएनआर का पता लगाया जा सके.
  • कस्टम कुंजियों में सेव की गई जानकारी से, अब आपको पता चल गया है कि कौनसी एसिंक थ्रेड को चलने में सबसे ज़्यादा समय लगा और कौनसी थ्रेड एएनआर ट्रिगर करने के खतरे में थीं. इस तरह के लॉजिकल और संख्यात्मक डेटा से आपको पता चलेगा कि आपके कोड में किस जगह को ऑप्टिमाइज़ करना सबसे ज़रूरी है.

12. रिपोर्ट को और बेहतर बनाने के लिए, Analytics इवेंट को इंटरस्पर्स करना

नीचे दिए गए तरीकों को डीबग मेन्यू से भी कॉल किया जा सकता है. हालांकि, ये खुद समस्याएं जनरेट करने के बजाय, 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. (सिर्फ़ Android के लिए) Firebase CLI की इस कमांड को चलाकर, अपने सिंबल अपलोड करें:
    firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
    
  4. ऊपर दिए गए फ़ंक्शन को कॉल करने के लिए, इनमें से किसी एक बटन को एक या उससे ज़्यादा बार दबाएं:
    • Log String Event
    • Log Int Event
  5. अभी क्रैश करें बटन दबाएं.
  6. अपने गेम को रीस्टार्ट करें, ताकि क्रैश इवेंट को Firebase पर अपलोड किया जा सके.
  7. जब Analytics इवेंट के अलग-अलग सीक्वेंस लॉग किए जाते हैं और फिर आपका गेम ऐसा इवेंट जनरेट करता है जिसकी रिपोर्ट Crashlytics बनाता है, तो उन्हें Crashlytics की इवेंट की खास जानकारी के लॉग टैब में इस तरह जोड़ा जाता है:
    d3b16d78f76bfb04.png

13. आगे आने वाले समय में

इससे आपको क्रैश रिपोर्ट को बेहतर तरीके से समझने में मदद मिलेगी. इस नई जानकारी की मदद से, मौजूदा स्थिति, पिछले इवेंट के रिकॉर्ड, और मौजूदा Google Analytics इवेंट का इस्तेमाल किया जा सकता है. इससे इवेंट के क्रम और उसके नतीजे के पीछे के तर्क को बेहतर तरीके से समझा जा सकता है.

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

अगले चरण

अपने Unity गेम में रिमोट कॉन्फ़िगरेशन लागू करें कोडलैब पर जाएं. यहां आपको Unity में रिमोट कॉन्फ़िगरेशन और A/B टेस्टिंग का इस्तेमाल करने के बारे में जानकारी मिलेगी.