1. शुरुआती जानकारी
इस कोडलैब में, आपको Crashlytics की बेहतर सुविधाओं को इस्तेमाल करने का तरीका बताया जाएगा. इन सुविधाओं की मदद से, ऐप्लिकेशन क्रैश होने की वजहों और इन क्रैश की वजहों के बारे में बेहतर तरीके से समझा जा सकता है.
आपको सैंपल गेम में नई सुविधाएं जोड़नी होंगी, MechaHamster: Level Up with Firebase वर्शन. यह नमूना गेम, क्लासिक Firebase गेम MechaHamster का एक नया वर्शन है जो इसकी ज़्यादातर बिल्ट-इन Firebase फ़ंक्शन को हटा देता है और आपको उनकी जगह Firebase के नए इस्तेमाल को लागू करने का मौका देता है.
आपको गेम में डीबग मेन्यू जोड़ना होगा. यह डीबग मेन्यू आपके इस्तेमाल किए जाने वाले तरीकों के बारे में जानकारी देता है. साथ ही, यह आपको Crashlytics के अलग-अलग फ़ंक्शन का इस्तेमाल करने की सुविधा भी देता है. इन तरीकों की मदद से, अपने-आप क्रैश होने वाली रिपोर्ट के बारे में कस्टम कुंजियों, कस्टम लॉग, और सामान्य गड़बड़ियों वगैरह के बारे में बताया जा सकता है.
गेम बनाने के बाद, डीबग मेन्यू का इस्तेमाल किया जा सकता है. साथ ही, नतीजों की जांच करके यह समझा जा सकता है कि गेम को जंगल में कैसे खेला जाता है.
आपको यह जानकारी मिलेगी
- वे गड़बड़ियां जो Crashlytics की मदद से अपने-आप पकड़ी जाती हैं.
- जान-बूझकर रिकॉर्ड की जा सकने वाली अन्य गड़बड़ियां.
- इन गड़बड़ियों को आसानी से समझने के लिए, इनके बारे में ज़्यादा जानकारी जोड़ने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- इनमें से किसी एक या दोनों के साथ, Unity (कम से कम सुझाया गया वर्शन 2019 और इसके बाद का वर्शन):
- iOS बिल्ड सहायता
- Android बिल्ड सहायता
- (सिर्फ़ Android के लिए) Firebase सीएलआई (क्रैश रिपोर्ट के लिए सिंबल अपलोड करने में इस्तेमाल होता है)
- Firebase सीएलआई इंस्टॉल करने के लिए निर्देशों का पालन करें.
अगर आपने सीएलआई को पहले ही इंस्टॉल कर लिया है, तो उसको नए वर्शन में अपडेट कर लें.
- Firebase सीएलआई इंस्टॉल करने के लिए निर्देशों का पालन करें.
2. अपना डेवलपमेंट एनवायरमेंट सेट अप करें
यहां दिए गए सेक्शन में, Firebase के साथ अगले लेवल पर जाने कोड को डाउनलोड करने और उसे Unity में खोलने का तरीका बताया गया है.
ध्यान दें कि Firebase के साथ लेवल बढ़ाएं सैंपल गेम का इस्तेमाल कई अन्य Firebase + Unity कोडलैब के लिए भी किया जाता है, ताकि शायद आपने इस सेक्शन के टास्क पहले ही पूरे कर लिए हों. अगर ऐसा है, तो इस पेज पर मौजूद आखिरी चरण पर सीधे जाएं: "Unity के लिए Firebase SDK टूल जोड़ना".
कोड डाउनलोड करें
कमांड लाइन से, इस कोडलैब के GitHub रिपॉज़िटरी का क्लोन बनाएं:
git clone https://github.com/firebase/level-up-with-firebase.git
इसके अलावा, अगर आपने GitHub फ़ाइल इंस्टॉल नहीं की है, तो डेटा स्टोर करने की जगह को ZIP फ़ाइल के रूप में डाउनलोड करें.
Unity एडिटर में Firebase के साथ लेवल बढ़ाएं सुविधा खोलें
- Unity Hub लॉन्च करें और प्रोजेक्ट टैब में, खोलें के बगल में मौजूद ड्रॉपडाउन ऐरो पर क्लिक करें.
- डिस्क से प्रोजेक्ट जोड़ें पर क्लिक करें.
- उस डायरेक्ट्री पर जाएं जिसमें कोड शामिल है. इसके बाद, ठीक है पर क्लिक करें.
- अगर कहा जाए, तो इस्तेमाल करने के लिए कोई Unity एडिटर वर्शन और अपना टारगेट प्लैटफ़ॉर्म (Android या iOS) चुनें.
- प्रोजेक्ट के नाम, level-up-with-firebase पर क्लिक करें और प्रोजेक्ट, Unity एडिटर में खुल जाएगा.
- अगर आपका एडिटर टूल अपने-आप नहीं खुलता, तो
MainGameScene
को ऐसेट में खोलें > Unity एडिटर के प्रोजेक्ट टैब में मौजूद हैमस्टर.
Unity को इंस्टॉल और इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Unity में काम करना लेख पढ़ें.
3. अपने Unity प्रोजेक्ट में Firebase जोड़ना
Firebase प्रोजेक्ट बनाना
- Firebase कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें.
- नया प्रोजेक्ट बनाने के लिए, प्रोजेक्ट का पसंदीदा नाम डालें.
इससे प्रोजेक्ट के नाम के आधार पर, प्रोजेक्ट आईडी (प्रोजेक्ट के नाम के नीचे दिखाया गया) भी सेट हो जाएगा. प्रोजेक्ट आईडी को अपनी पसंद के मुताबिक बनाने के लिए, उस पर मौजूद बदलाव करें आइकॉन पर क्लिक करें. हालांकि, ऐसा करना ज़रूरी नहीं है. - अगर कहा जाए, तो Firebase की शर्तों को पढ़ें और स्वीकार करें.
- जारी रखें पर क्लिक करें.
- इस प्रोजेक्ट के लिए Google Analytics चालू करें विकल्प चुनें. इसके बाद, जारी रखें पर क्लिक करें.
- इस्तेमाल करने के लिए, कोई मौजूदा Google Analytics खाता चुनें या नया खाता बनाने के लिए, नया खाता बनाएं चुनें.
- प्रोजेक्ट बनाएं पर क्लिक करें.
- प्रोजेक्ट बनाने के बाद, जारी रखें पर क्लिक करें.
अपने ऐप्लिकेशन को Firebase के साथ रजिस्टर करना
- अब भी Firebase कंसोल में जाकर, प्रोजेक्ट की खास जानकारी देने वाले पेज के बीच में जाकर, सेटअप वर्कफ़्लो लॉन्च करने के लिए Unity आइकॉन पर क्लिक करें. इसके अलावा, अगर आपने पहले ही अपने Firebase प्रोजेक्ट में कोई ऐप्लिकेशन जोड़ लिया है, तो प्लैटफ़ॉर्म के विकल्प देखने के लिए ऐप्लिकेशन जोड़ें पर क्लिक करें.
- Apple (iOS) और Android बिल्ड टारगेट, दोनों को रजिस्टर करने के लिए चुनें.
- अपने Unity प्रोजेक्ट के प्लैटफ़ॉर्म के लिए खास आईडी डालें. इस कोडलैब के लिए, यह जानकारी डालें:
- Apple (iOS) के लिए: iOS बंडल आईडी फ़ील्ड में
com.google.firebase.level-up
डालें. - Android के लिए: Android पैकेज का नाम फ़ील्ड में
com.google.firebase.level_up
डालें.
- Apple (iOS) के लिए: iOS बंडल आईडी फ़ील्ड में
- (ज़रूरी नहीं) अपने Unity प्रोजेक्ट के लिए प्लैटफ़ॉर्म के हिसाब से कोई दूसरा नाम डालें.
- ऐप्लिकेशन रजिस्टर करें पर क्लिक करें. इसके बाद, कॉन्फ़िगरेशन फ़ाइल डाउनलोड करें सेक्शन पर जाएं.
Firebase कॉन्फ़िगरेशन फ़ाइलें जोड़ें
ऐप्लिकेशन रजिस्टर करें पर क्लिक करने के बाद, आपको दो कॉन्फ़िगरेशन फ़ाइलें डाउनलोड करने के लिए कहा जाएगा. हर बिल्ड टारगेट के लिए एक कॉन्फ़िगरेशन फ़ाइल डाउनलोड की जा सकती है. आपके Unity प्रोजेक्ट को Firebase से कनेक्ट करने के लिए, इन फ़ाइलों में Firebase मेटाडेटा होना ज़रूरी है.
- दोनों उपलब्ध कॉन्फ़िगरेशन फ़ाइलें डाउनलोड करें:
- Apple (iOS) के लिए: GoogleService-Info.plist डाउनलोड करें.
- Android के लिए: google-services.json डाउनलोड करें.
- अपने Unity प्रोजेक्ट की प्रोजेक्ट विंडो खोलें. इसके बाद, दोनों कॉन्फ़िगरेशन फ़ाइलों को ऐसेट फ़ोल्डर में ले जाएं.
- Firebase कंसोल पर, सेटअप वर्कफ़्लो में वापस जाएं. इसके बाद, आगे बढ़ें पर क्लिक करें और Unity के लिए Firebase SDK टूल जोड़ें.
Unity के लिए Firebase SDK टूल जोड़ना
- Firebase कंसोल में, Firebase Unity SDK टूल डाउनलोड करें पर क्लिक करें.
- SDK टूल को किसी ऐसी जगह पर अनज़िप करें जिसे आसानी से अनज़िप किया जा सकता है.
- अपने खुले हुए Unity प्रोजेक्ट में, ऐसेट पर जाएं > पैकेज इंपोर्ट करें > कस्टम पैकेज.
- पैकेज इंपोर्ट करें डायलॉग में, उस डायरेक्ट्री पर जाएं जिसमें अनज़िप किया गया SDK टूल है. इसके बाद,
FirebaseAnalytics.unitypackage
चुनें और फिर खोलें पर क्लिक करें. - स्क्रीन पर दिखने वाले Unity पैकेज को इंपोर्ट करें डायलॉग बॉक्स में, इंपोर्ट करें पर क्लिक करें.
FirebaseCrashlytics.unitypackage
को इंपोर्ट करने के लिए ऊपर दिया गया तरीका दोहराएं.- Firebase कंसोल पर वापस जाएं और सेटअप वर्कफ़्लो में, आगे बढ़ें पर क्लिक करें.
Unity प्रोजेक्ट में Firebase SDK टूल जोड़ने के बारे में ज़्यादा जानकारी के लिए, Unity के लिए इंस्टॉल करने के अतिरिक्त विकल्प देखें.
4. अपने Unity प्रोजेक्ट में Crashlytics को सेट अप करना
Unity प्रोजेक्ट में Crashlytics का इस्तेमाल करने के लिए, आपको सेटअप के कुछ और चरण पूरे करने होंगे. बेशक, आपको SDK टूल शुरू करना होगा. हालांकि, आपको अपने सिंबल भी अपलोड करने होंगे, ताकि आप Firebase कंसोल में सिम्बॉलिकेट की हुई स्टैकट्रेस देख सकें. साथ ही, आपको यह पक्का करने के लिए टेस्ट क्रैश को ज़बरदस्ती करना होगा कि Firebase को आपके क्रैश इवेंट मिल रहे हैं.
Crashlytics SDK टूल शुरू करें
Assets/Hamster/Scripts/MainGame.cs
में, यहusing
स्टेटमेंट जोड़ें: पहले मॉड्यूल में, Crashlytics SDK टूल के तरीके इस्तेमाल किए जा सकते हैं और दूसरे मॉड्यूल में C# Tasks API के कुछ एक्सटेंशन शामिल किए गए हैं. दोनोंusing Firebase.Crashlytics; using Firebase.Extensions;
using
स्टेटमेंट के बिना, नीचे दिया गया कोड काम नहीं करेगा.- अब भी
MainGame.cs
में,InitializeFirebaseAndStartGame()
को कॉल करके मौजूदाStart()
तरीके में Firebase शुरू करने की सुविधा जोड़ें:void Start() { Screen.SetResolution(Screen.width / 2, Screen.height / 2, true); InitializeFirebaseAndStartGame(); }
- साथ ही,
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 प्लैटफ़ॉर्म)
- बिल्ड सेटिंग डायलॉग से, अपने प्रोजेक्ट को Xcode फ़ाइल फ़ोल्डर में एक्सपोर्ट करें.
- अपना ऐप्लिकेशन बनाएं.
Apple प्लैटफ़ॉर्म के लिए, Firebase Unity Editor प्लगिन आपके Xcode प्रोजेक्ट को अपने-आप कॉन्फ़िगर करता है, ताकि हर बिल्ड के लिए Firebase सर्वर पर Crashlytics के साथ काम करने वाली सिंबल फ़ाइल जनरेट और अपलोड हो सके. Crashlytics के डैशबोर्ड में, सिम्बॉलिकेट किए गए स्टैक ट्रेस देखने के लिए, सिंबल की यह जानकारी ज़रूरी है.
Android
- (सिर्फ़ शुरुआती सेटअप के दौरान, हर बिल्ड के लिए नहीं) अपना बिल्ड सेट अप करें:
- अपनी प्रोजेक्ट डायरेक्ट्री के रूट में, बिल्ड नाम का एक नया फ़ोल्डर बनाएं (यानी कि आपकी ऐसेट डायरेक्ट्री के सिबलिंग के तौर पर). इसके बाद, Android नाम का एक सब-फ़ोल्डर बनाएं.
- फ़ाइल में > बिल्ड सेटिंग > प्लेयर सेटिंग > कॉन्फ़िगरेशन, स्क्रिप्टिंग बैकएंड को IL2CPP पर सेट करें.
- आम तौर पर, IL2CPP की वजह से बिल्ड छोटे होते हैं और उनकी परफ़ॉर्मेंस बेहतर होती है.
- iOS पर सिर्फ़ IL2CPP उपलब्ध है. इसे यहां चुनने से, दोनों प्लैटफ़ॉर्म एक जैसे हो सकते हैं. साथ ही, अगर आपको दोनों प्लैटफ़ॉर्म पर डीबग करने के अंतर को समझना है, तो ऐसा करना आसान हो जाता है.
- अपना ऐप्लिकेशन बनाएं. फ़ाइल में > बिल्ड सेटिंग के लिए, इन्हें पूरा करें:
- पक्का करें कि पीकेसी बनाएं पर सही का निशान लगा हो (या अगर ड्रॉपडाउन को दिखाया जाता है, तो डीबग करना चुनें).
- अपने APK को सीधे Unity एडिटर से, आपके अभी बनाए गए बिल्ड/Android सब-फ़ोल्डर में बनाएं.
- बिल्ड पूरा होने के बाद, आपको Crashlytics के साथ काम करने वाली सिंबल फ़ाइल जनरेट करनी होगी और उसे Firebase सर्वर पर अपलोड करना होगा. Crashlytics के डैशबोर्ड में, नेटिव लाइब्रेरी के क्रैश होने से जुड़ी सिम्बॉलिकेट की हुई स्टैक ट्रेस देखने के लिए, सिंबल की यह जानकारी ज़रूरी है.
नीचे दिया गया Firebase सीएलआई निर्देश चलाकर, सिंबल वाली फ़ाइल जनरेट और अपलोड करें: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
: बिल्ड पूरा होने के बाद, बिल्ड/Android डायरेक्ट्री में ज़िप की गई सिंबल फ़ाइल का पाथ (उदाहरण के लिए:Builds/Android/myapp-1.0-v100.symbols.zip
).
सेटअप को पूरा करने के लिए, टेस्ट क्रैश को हर हाल में पूरा करें
Crashlytics का सेट अप पूरा करने और Firebase कंसोल के Crashlytics डैशबोर्ड में शुरुआती डेटा देखने के लिए, आपको ऐप्लिकेशन को हर हाल में बंद करना होगा.
- 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"); } } }
- अपना ऐप्लिकेशन बनाएं और बिल्ड पूरा होने के बाद सिंबल की जानकारी अपलोड करें.
- iOS: Firebase Unity Editor प्लगिन, आपके Xcode प्रोजेक्ट को अपने-आप कॉन्फ़िगर करता है, ताकि आपकी सिंबल फ़ाइल अपलोड की जा सके.
- Android: अपने सिंबल वाली फ़ाइल अपलोड करने के लिए, Firebase CLI
crashlytics:symbols:upload
कमांड चलाएं.
- अपना ऐप्लिकेशन चलाएं. ऐप्लिकेशन चलने के बाद, डिवाइस लॉग देखें और
CrashlyticsTester
से अपवाद ट्रिगर होने का इंतज़ार करें.- iOS: Xcode के निचले पैनल में लॉग देखें.
- Android: टर्मिनल में इस निर्देश को चलाकर लॉग देखें:
adb logcat
.
- अपवाद के बारे में जानने के लिए, Crashlytics डैशबोर्ड पर जाएं! यह आपको डैशबोर्ड के सबसे नीचे मौजूद समस्याएं टेबल में दिखेगी. कोडलैब में, बाद में आपको इन रिपोर्ट को एक्सप्लोर करने के तरीके के बारे में ज़्यादा जानकारी मिलेगी.
- इवेंट के Crashlytics पर अपलोड होने की पुष्टि करने के बाद, वह EmptyObject
GameObject
का हिस्सा चुनें जिसमें आपने उसे अटैच किया है. इसके बाद, सिर्फ़CrashlyticsTester
कॉम्पोनेंट हटाएं. इसके बाद, सीन को उसकी ओरिजनल स्थिति में वापस लाने के लिए, उसे सेव करें.
5. डीबग मेन्यू को चालू करना और उसे समझना
अब तक आपने अपने Unity प्रोजेक्ट में Crashlytics को जोड़ा है, सेटअप पूरा कर लिया है, और पुष्टि की है कि Crashlytics SDK टूल, Firebase में इवेंट अपलोड कर रहा है. अब आपको अपने Unity प्रोजेक्ट में एक मेन्यू बनाना होगा, जिसमें आपको अपने गेम में Crashlytics की बेहतर सुविधाओं को इस्तेमाल करने का तरीका बताया जाएगा. level Up with Firebase Unity प्रोजेक्ट में पहले से ही एक छिपा हुआ डीबग मेन्यू मौजूद है, जिसे आपको दिखेगा. साथ ही, उसके लिए फ़ंक्शन भी लिखा जा सकेगा.
डीबग मेन्यू चालू करना
डीबग मेन्यू को ऐक्सेस करने का बटन आपके Unity प्रोजेक्ट में मौजूद है. हालांकि, इसे अभी चालू नहीं किया गया है. MainMenu
प्रीफ़ैब से इसे ऐक्सेस करने के लिए, आपको बटन को चालू करना होगा:
- Unity एडिटर में,
MainMenu
नाम का प्रीफ़ैब खोलें. - प्रीफ़ैब हैरारकी में,
DebugMenuButton
नाम का बंद किया गया सब-ऑब्जेक्ट ढूंढें और उसे चुनें. DebugMenuButton
वाले टेक्स्ट फ़ील्ड के बाईं ओर, ऊपर बाएं कोने में मौजूद बॉक्स पर सही का निशान लगाकरDebugMenuButton
को चालू करें.- प्रीफ़ैब सेव करें.
- गेम को एडिटर या अपने डिवाइस पर चलाएं. अब मेन्यू को ऐक्सेस किया जा सकता है.
डीबग मेन्यू के लिए, तरीके की मुख्य बातों की झलक देखना और उन्हें समझना
इस कोडलैब में आगे, आपको पहले से कॉन्फ़िगर किए गए डीबग Crashlytics के तरीकों के लिए, तरीके के मुख्य हिस्से लिखने का तरीका बताया जाएगा. हालांकि, level Up with Firebase Unity प्रोजेक्ट में तरीकों को DebugMenu.cs
में तय किया जाता है और उन्हें कॉल किया जाता है.
इनमें से कुछ तरीके, Crashlytics के तरीकों और थ्रो की गड़बड़ियों को कॉल करने के लिए इस्तेमाल किए जाते हैं. हालांकि, इस बात पर निर्भर नहीं करता कि Crashlytics, इन तरीकों का इस्तेमाल करके पहले कॉल कर सकता है या नहीं. इसके बजाय, अपने-आप पता लगाने वाली गड़बड़ियों से जनरेट होने वाली क्रैश रिपोर्ट को इन तरीकों से जोड़ी गई जानकारी से बेहतर बनाया जाएगा.
DebugMenu.cs
खोलें और फिर इन तरीकों को ढूंढें:
Crshlytics से जुड़ी समस्याएं जनरेट करने और उनकी जानकारी देने के तरीके:
CrashNow
LogNonfatalError
LogStringsAndCrashNow
SetAndOverwriteCustomKeyThenCrash
SetLogsAndKeysBeforeANR
डीबग करने में मदद के लिए, Analytics के इवेंट लॉग करने के तरीके:
LogProgressEventWithStringLiterals
LogIntScoreWithBuiltInEventAndParams
इस कोडलैब के बाद के चरणों में, आपको इन तरीकों को लागू करने के साथ-साथ यह जानकारी भी मिलेगी कि गेम डेवलपमेंट में आने वाली खास स्थितियों से निपटने में ये तरीके कैसे मदद करते हैं.
6. डेवलपमेंट के दौरान क्रैश रिपोर्ट की डिलीवरी पक्का करना
डीबग करने के इन तरीकों को लागू करने से पहले, पक्का कर लें कि क्रैश रिपोर्ट पर इनका असर पड़ता है. साथ ही, यह समझ लें कि Crashlytics को इवेंट रिपोर्ट कैसे किए जाते हैं.
Unity प्रोजेक्ट के लिए, आपके गेम के क्रैश और अपवाद वाले इवेंट तुरंत डिस्क में लिख दिए जाते हैं. जिन अपवादों की गड़बड़ी आपके गेम को क्रैश नहीं होती उनके लिए, Crashlytics SDK टूल की मदद से नुकसान पहुंचाने वाले इवेंट की रिपोर्ट की जा सकती है. इसके लिए, आपको Crashlytics.ReportUncaughtExceptionsAsFatal
प्रॉपर्टी को true
पर सेट करना होगा. ऐसा करके, अपने Unity प्रोजेक्ट में Crashlytics को शुरू किया जा सकता है. Crashlytics को इन इवेंट की रिपोर्ट रीयल-टाइम में दी जाती है. इसके लिए, असली उपयोगकर्ता को गेम रीस्टार्ट करने की ज़रूरत नहीं होती. ध्यान दें कि नेटिव क्रैश को हमेशा नुकसान पहुंचाने वाली घटनाओं के तौर पर रिपोर्ट किया जाता है. साथ ही, जब कोई असली उपयोगकर्ता गेम को रीस्टार्ट करता है, तो यह क्रैश रिपोर्ट भेजा जाता है.
इसके अलावा, आपको नीचे बताई गई छोटी लेकिन अहम बातों का ध्यान रखना होगा. जैसे, अलग-अलग रनटाइम एनवायरमेंट, Firebase को Crashlytics से जुड़ी जानकारी भेजने के तरीके में क्या अंतर रखते हैं:
iOS सिम्युलेटर:
- Crashlytics की जानकारी सिर्फ़ तब रिपोर्ट की जाती है, जब Xcode को सिम्युलेटर से अलग किया गया हो. अगर Xcode अटैच किया गया है, तो यह अपस्ट्रीम गड़बड़ियों को पकड़ लेता है. इससे, जानकारी डिलीवर नहीं होती.
मोबाइल पर चलने वाले डिवाइस (Android और iOS):
- Android के लिए खास तौर पर: ANR वाली गड़बड़ियां, सिर्फ़ Android 11 और इसके बाद के वर्शन वाले डिवाइसों पर रिपोर्ट की जाती हैं. ANR और नुकसान न पहुंचाने वाले इवेंट, अगली बार चलाए जाने पर रिपोर्ट किए जाएंगे.
Unity Editor:
- Play मोड या स्टैंडअलोन ऐप्लिकेशन में, एडिटर से मिलने वाली Crashlytics की जानकारी को Firebase में रिकॉर्ड या अपलोड नहीं किया जाता. इसके अलावा, Firebase डेस्कटॉप डेवलपमेंट वर्कफ़्लो, Crashlytics के साथ काम नहीं करता.
CrashNow()
में बस एक बटन से अपने गेम को क्रैश करने की जांच करें
आपके गेम में Crashlytics सेट अप हो जाने के बाद, Crashlytics SDK टूल अपने-आप क्रैश और ऐसे अपवादों को रिकॉर्ड करता है जिनके बारे में लोगों को पता नहीं चला. साथ ही, यह विश्लेषण के लिए उन्हें Firebase में अपलोड कर देता है. साथ ही, ये रिपोर्ट, Firebase कंसोल के Crashlytics डैशबोर्ड में दिखती हैं.
- यह दिखाने के लिए कि यह वाकई अपने-आप होता है:
DebugMenu.cs
खोलें और फिरCrashNow()
तरीके को इस तरह से ओवरराइट करें:void CrashNow() { TestCrash(); }
- अपना ऐप्लिकेशन बनाएं.
- (सिर्फ़ Android के लिए) यहां दिया गया Firebase सीएलआई कमांड चलाकर अपने सिंबल अपलोड करें:
firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
- क्रैश रिपोर्ट देखने और समझने का तरीका जानने के लिए, अभी क्रैश करें बटन पर टैप करें और इस कोडलैब के अगले चरण पर जाएं.
7. Firebase कंसोल में समस्या की रिपोर्ट को समझना
क्रैश रिपोर्ट का बेहतर तरीके से इस्तेमाल करने के बारे में, आपके लिए थोड़ी और जानकारी होनी चाहिए. आपके लिखने का हर तरीका, Crashlytics रिपोर्ट में अलग-अलग तरह की जानकारी जोड़ने का तरीका दिखाएगा.
- अभी क्रैश करें बटन पर टैप करें और फिर अपना ऐप्लिकेशन रीस्टार्ट करें.
- Crashlytics डैशबोर्ड पर जाएं. डैशबोर्ड में सबसे नीचे मौजूद, समस्याएं टेबल तक स्क्रोल करें. यहां Crashlytics, ऐसे इवेंट का ग्रुप बनाता है जिनकी एक ही वजह से "समस्या" होती है.
- समस्याएं टेबल में मौजूद नई समस्या पर क्लिक करें. ऐसा करने पर, Firebase को भेजे गए हर इवेंट के बारे में इवेंट की खास जानकारी दिखेगी.
आपको नीचे दिए गए स्क्रीनकैप जैसा कुछ दिखेगा. ध्यान दें कि इवेंट की खास जानकारी में, उस कॉल के स्टैक ट्रेस को प्रमुखता से कैसे दिखाया गया है जिसकी वजह से क्रैश हुआ है.
अतिरिक्त मेटाडेटा
Unity मेटाडेटा टैब भी मददगार टैब है. इस सेक्शन से आपको उस डिवाइस के एट्रिब्यूट के बारे में पता चलता है जिस पर इवेंट हुआ था. इसमें फ़िज़िकल फ़ीचर, सीपीयू मॉडल/खास जानकारी, और सभी तरह की जीपीयू मेट्रिक शामिल हैं.
यहां एक उदाहरण दिया गया है, जिसमें इस टैब में दी गई जानकारी काम की हो सकती है:
मान लें कि आपका गेम, खास लुक पाने के लिए शेडर का बहुत ज़्यादा इस्तेमाल करता है. हालांकि, सभी फ़ोन में ऐसे जीपीयू नहीं होते जो इस सुविधा को रेंडर कर सकते हैं. Unity मेटाडेटा टैब में मौजूद जानकारी से, आपको यह बेहतर तरीके से पता चल सकता है कि कौनसी सुविधाओं को अपने-आप उपलब्ध कराने या पूरी तरह से बंद करने का फ़ैसला लेते समय, आपके ऐप्लिकेशन को किस हार्डवेयर की जांच करनी चाहिए.
ऐसा हो सकता है कि आपके डिवाइस पर कोई गड़बड़ी या क्रैश न हो, लेकिन अलग-अलग तरह के Android डिवाइस अलग-अलग तरह के होते हैं. इसलिए, इससे किसी खास "हॉटस्पॉट" को बेहतर तरीके से समझने में मदद मिलती है आपके ऑडियंस के डिवाइसों का.
8. किसी अपवाद को फेंकें, पकड़ें, और लॉग करें
आम तौर पर, डेवलपर के तौर पर आपका कोड, रनटाइम के अपवाद को सही तरीके से पकड़ लेता है और उसे हैंडल करता है, लेकिन यह ध्यान रखना ज़रूरी है कि ऐसा कब हुआ और यह किन हालातों में हुआ है. ठीक इसी काम के लिए Crashlytics.LogException
का इस्तेमाल किया जा सकता है—ताकि Firebase को अपवाद के तौर पर कोई इवेंट भेजा जा सके, ताकि आप Firebase कंसोल में समस्या को और डीबग कर सकें.
Assets/Hamster/Scripts/States/DebugMenu.cs
में,using
स्टेटमेंट में यह जोड़ें:// Import Firebase using Firebase.Crashlytics;
- अब भी
DebugMenu.cs
में,LogNonfatalError()
को इस तरह ओवरराइट करें:void LogNonfatalError() { try { throw new System.Exception($"Test exception thrown in {nameof(LogNonfatalError)}"); } catch(System.Exception exception) { Crashlytics.LogException(exception); } }
- अपना ऐप्लिकेशन बनाएं.
- (सिर्फ़ Android के लिए) यहां दिया गया Firebase सीएलआई कमांड चलाकर अपने सिंबल अपलोड करें:
firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
- गैर-ज़रूरी गड़बड़ी को लॉग करें बटन पर टैप करें. इसके बाद, अपना ऐप्लिकेशन रीस्टार्ट करें.
- Crashlytics डैशबोर्ड पर जाएं. यहां आपको कोडलैब के इस मॉड्यूल के आखिरी चरण में मिले नतीजे से मिलता-जुलता कुछ दिखेगा.
- हालांकि, इस बार इवेंट के टाइप वाले फ़िल्टर को गैर-घातक फ़िल्टर पर सीमित कर दें, ताकि आपको सिर्फ़ ऐसी गड़बड़ियां दिखें जिनमें कोई नुकसान न हुआ हो, जैसे कि वह गड़बड़ी जिसे आपने अभी-अभी लॉग किया है.
9. प्रोग्राम एक्ज़ीक्यूट करने की प्रोसेस को बेहतर तरीके से समझने के लिए, Crashlytics पर स्ट्रिंग लॉग करें
क्या आपने कभी यह जानने की कोशिश की है कि कई पाथ से कोड की लाइन को क्यों कॉल किया जाता है? यह हर सेशन में हज़ारों बार नहीं, बल्कि सैकड़ों बार कॉल करता है. इस वजह से, अचानक कोई गड़बड़ी या क्रैश क्यों हो सकता है? हालांकि, किसी IDE में मौजूद कोड को पढ़ना और वैल्यू को करीब से देखना अच्छा हो सकता है, लेकिन क्या होगा अगर ऐसा आपके कुछ गायब हो रहे उपयोगकर्ताओं के साथ ही होता है? सबसे खराब बात, अगर ऐप्लिकेशन क्रैश होने की इस समस्या को पहले जैसा न किया जा सके, तो क्या करना चाहिए? भले ही, आपने क्या किया?
इस तरह की परिस्थितियों में, कुछ संदर्भ देकर बदलाव लाया जा सकता है. Crashlytics.Log
की मदद से, अपनी ज़रूरत के हिसाब से कॉन्टेक्स्ट लिखा जा सकता है. इन मैसेज को आने वाले समय में खुद को बेहतर बनाने वाले संकेत के तौर पर देखें. इससे आपको पता चलेगा कि आगे क्या होगा.
लॉग कई तरह से इस्तेमाल किए जा सकते हैं, लेकिन आम तौर पर ये उन स्थितियों को रिकॉर्ड करने में सबसे ज़्यादा मददगार होते हैं जब कॉल का क्रम और/या उसका न होना सबसे अहम जानकारी होती है.
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(); }
- अपना ऐप्लिकेशन बनाएं.
- (सिर्फ़ Android के लिए) यहां दिया गया Firebase सीएलआई कमांड चलाकर अपने सिंबल अपलोड करें:
firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
- लॉग स्ट्रिंग और अभी क्रैश करें बटन पर टैप करें. इसके बाद, अपना ऐप्लिकेशन रीस्टार्ट करें.
- Crashlytics डैशबोर्ड पर वापस जाएं और समस्याएं टेबल में दिए गए सबसे नए अंक पर क्लिक करें. आपको एक बार फिर से पिछले मुद्दों जैसा कुछ देखने को मिलेगा.
- हालांकि, किसी इवेंट की खास जानकारी में मौजूद लॉग टैब पर क्लिक करने से, आपको ऐसा व्यू दिखेगा:
10. अपनी पसंद के मुताबिक बनाई गई कुंजी लिखना और उसे ओवरराइट करना
मान लें कि आपको वैल्यू या कॉन्फ़िगरेशन की छोटी संख्या पर सेट किए गए वैरिएबल से जुड़े क्रैश को बेहतर तरीके से समझना है. किसी भी समय, वैरिएबल के कॉम्बिनेशन और देखे जा रहे संभावित वैल्यू के आधार पर, फ़िल्टर करना फ़ायदेमंद हो सकता है.
आर्बिट्रेरी स्ट्रिंग को लॉग करने के अलावा, Crashlytics से आपको डीबग करने का एक और तरीका मिलता है. हालांकि, प्रोग्राम के क्रैश होने की स्थिति के बारे में जानना आपके लिए फ़ायदेमंद होता है, जैसे कि कस्टम पासकोड.
ये की-वैल्यू पेयर हैं, जिन्हें किसी सेशन के लिए सेट किया जा सकता है. एक साथ इकट्ठा होने वाले और पूरी तरह से योग वाले लॉग के उलट, कुंजियों को सिर्फ़ किसी वैरिएबल या स्थिति की सबसे हाल की स्थिति को दिखाने के लिए ओवरराइट किया जा सकता है.
अपने प्रोग्राम के रिकॉर्ड किए गए आखिरी रिकॉर्ड पर लेजर के तौर पर इन कुंजियों का इस्तेमाल करने के साथ-साथ, Crashlytics से जुड़ी समस्याओं के लिए असरदार फ़िल्टर के तौर पर भी इन कुंजियों का इस्तेमाल किया जा सकता है.
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(); }
- अपना ऐप्लिकेशन बनाएं.
- (सिर्फ़ Android के लिए) यहां दिया गया Firebase सीएलआई कमांड चलाकर अपने सिंबल अपलोड करें:
firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
- कस्टम कुंजी और क्रैश को सेट करें बटन पर टैप करें. इसके बाद, अपना ऐप्लिकेशन रीस्टार्ट करें.
- Crashlytics डैशबोर्ड पर वापस जाएं और समस्याएं टेबल में दिए गए सबसे नए अंक पर क्लिक करें. आपको फिर से पिछली समस्याओं से मिलता-जुलता कुछ देखना चाहिए.
- हालांकि, इस बार इवेंट की खास जानकारी में मौजूद कुंजी टैब पर क्लिक करें, ताकि आप
Current Time
के साथ-साथ दूसरी कुंजियों की वैल्यू भी देख सकें:
आपको कस्टम लॉग के बजाय, कस्टम कुंजी का इस्तेमाल क्यों करना है?
- लॉग, क्रम में चलने वाला डेटा सेव करने के मामले में अच्छे होते हैं. हालांकि, कस्टम कुंजी का इस्तेमाल तब बेहतर किया जाता है, जब आपको सिर्फ़ सबसे हाल की वैल्यू चाहिए.
- Firebase कंसोल में, समस्याएं टेबल के खोज बॉक्स में कुंजियों की वैल्यू के हिसाब से, समस्याओं को आसानी से फ़िल्टर किया जा सकता है.
लॉग की तरह, कस्टम कुंजियों की भी एक सीमा होती है. Crashlytics, ज़्यादा से ज़्यादा 64 की-वैल्यू पेयर के साथ काम करता है. इस थ्रेशोल्ड पर पहुंचने के बाद, अतिरिक्त वैल्यू सेव नहीं की जाती हैं. हर की-वैल्यू पेयर का साइज़ 1 केबी तक हो सकता है.
11. ANR वाली गड़बड़ी को समझने और उसका पता लगाने के लिए, पसंद के मुताबिक बनाई गई कुंजियों और लॉग का इस्तेमाल करें. यह सुविधा सिर्फ़ Android पर उपलब्ध है
ऐप्लिकेशन काम नहीं कर रहा है (एएनआर) गड़बड़ी, Android डेवलपर के लिए समस्याओं को डीबग करने की सबसे मुश्किल कैटगरी में से एक है. ANR की गड़बड़ी तब होती है, जब कोई ऐप्लिकेशन पांच सेकंड से ज़्यादा समय तक इनपुट का जवाब नहीं दे पाता. अगर ऐसा होता है, तो इसका मतलब है कि ऐप्लिकेशन फ़्रीज़ हो गया है या बहुत धीरे चल रहा है. लोगों को एक डायलॉग दिखता है. इसके बाद, वे यह चुन सकते हैं कि उन्हें "इंतज़ार करना है" या नहीं या "ऐप्लिकेशन बंद करें" चुनें.
ANR वाली गड़बड़ियों की वजह से, ऐप्लिकेशन इस्तेमाल करने वाले लोगों को खराब अनुभव मिलता है. जैसा कि ऊपर दिए गए ANR लिंक में बताया गया है, इसका असर Google Play Store में आपके ऐप्लिकेशन को खोजे जाने पर पड़ सकता है. ऐप्लिकेशन इस्तेमाल करना मुश्किल होता है. इसकी वजह यह है कि एक से ज़्यादा थ्रेड वाले कोड, अलग-अलग फ़ोन मॉडल पर काफ़ी अलग-अलग तरह से काम करते हैं. इसलिए, डीबग करते समय ANR की गड़बड़ी को दोहराना और समझना मुश्किल होता है. भले ही, यह नामुमकिन न हो. ऐसे में, विश्लेषण के आधार पर और बिना सोचे-समझे उनसे बात करना, आम तौर पर सबसे अच्छा तरीका होता है.
इस तरीके में, हम समस्या को अपने-आप लॉग करने और ज़्यादा जानकारी देने के लिए, Crashlytics.LogException
, Crashlytics.Log
, और Crashlytics.SetCustomKey
को मिला-जुलाकर इस्तेमाल करेंगे.
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); }
- अपना ऐप्लिकेशन बनाएं.
- नीचे दिए गए Firebase सीएलआई कमांड को चलाकर अपने सिंबल अपलोड करें:
firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
- लॉग और पासकोड सेट करें → ANR लेबल वाले बटन पर टैप करें. इसके बाद, अपना ऐप्लिकेशन रीस्टार्ट करें.
- Crashlytics डैशबोर्ड पर वापस जाएं. इसके बाद, इवेंट की खास जानकारी देखने के लिए, समस्याएं टेबल में नई समस्या पर क्लिक करें. अगर कॉल ठीक से पूरा होता है, तो आपको कुछ ऐसा दिखेगा:
जैसा कि आपको दिख रहा है, Firebase ने पता लगाया है कि थ्रेड पर इंतज़ार का समय व्यस्त होने की वजह, आपके ऐप्लिकेशन में ANR की गड़बड़ी हुई है. - इवेंट की खास जानकारी के लॉग टैब में लॉग देखने पर, आपको पता चलेगा कि 'पूरा हो गया' के तौर पर रिकॉर्ड किया गया आखिरी तरीका
DoSevereWork
है.
इसके उलट, शुरू होने वाला आखिरी तरीकाDoExtremeWork
है. इससे पता चलता है कि ANR की गड़बड़ी इस तरीके के दौरान हुई औरDoExtremeWork
को लॉग करने से पहले गेम बंद हो गया.
ऐसा क्यों करते हैं?
- एएनआर का पता लगाना बहुत मुश्किल होता है. इसलिए, कोड एरिया और मेट्रिक के बारे में बेहतर जानकारी हासिल करना बहुत ज़रूरी है, ताकि आसानी से इसका पता लगाया जा सके.
- कस्टम कुंजियों में सेव की गई जानकारी की मदद से, अब आपको यह पता चल गया है कि किस एसिंक्रोनस थ्रेड को चलने में सबसे ज़्यादा समय लगा और किन पर ANR का खतरा था. इस तरह का लॉजिकल और न्यूमेरिक डेटा आपको दिखाएगा कि आपके कोड में कहां ऑप्टिमाइज़ करना सबसे ज़रूरी है.
12. रिपोर्ट को और बेहतर बनाने के लिए, Analytics इवेंट का डेटा डालना
नीचे दिए गए तरीकों को डीबग मेन्यू से भी कॉल किया जा सकता है, लेकिन वे समस्याएं खुद जनरेट करने के बजाय, Google Analytics का इस्तेमाल जानकारी के एक दूसरे स्रोत के रूप में करते हैं. इससे आपके गेम की परफ़ॉर्मेंस को बेहतर तरीके से समझने में मदद मिलती है.
इस कोडलैब में आपने जो अन्य तरीके लिखे हैं, उनके उलट आपको इन तरीकों का इस्तेमाल दूसरे तरीकों के साथ करना चाहिए. इन तरीकों में से किसी एक को चलाने से पहले, अपने हिसाब से किसी भी क्रम में (डीबग मेन्यू में इनसे जुड़ा बटन दबाकर) कॉल करें. इसके बाद, Crashlytics से जुड़ी किसी समस्या में मौजूद जानकारी की जांच करने पर, आपको Analytics इवेंट का क्रम वाला लॉग दिखेगा. इस डेटा का इस्तेमाल, किसी गेम में प्रोग्राम के फ़्लो या उपयोगकर्ता के इनपुट के कॉम्बिनेशन को बेहतर ढंग से समझने के लिए किया जा सकता है. यह इस बात पर निर्भर करता है कि आपने अपने ऐप्लिकेशन को किस तरह इस्तेमाल किया है.
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 ); }
- अपना गेम बनाएं और डिप्लॉय करें. इसके बाद, डीबग मेन्यू पर जाएं.
- (सिर्फ़ Android के लिए) यहां दिया गया Firebase सीएलआई कमांड चलाकर अपने सिंबल अपलोड करें:
firebase crashlytics:symbols:upload --app=<FIREBASE_APP_ID> <PATH/TO/SYMBOLS>
- ऊपर दिए गए फ़ंक्शन को कॉल करने के लिए, इनमें से कम से कम एक बटन को एक या इससे ज़्यादा बार दबाएं:
- स्ट्रिंग इवेंट लॉग करें
- Int इवेंट लॉग करें
- अभी क्रैश करें बटन दबाएं.
- अपने गेम को रीस्टार्ट करें, ताकि वह क्रैश इवेंट को Firebase पर अपलोड कर सके.
- जब Analytics इवेंट के कई आर्बिट्रेरी क्रम लॉग किए जाते हैं और फिर आपका गेम किसी ऐसे इवेंट को जनरेट करता है जिससे Crashlytics एक रिपोर्ट बनाता है (जैसा कि आपने अभी किया है), तो वे Crashlytics के इवेंट की खास जानकारी के लॉग टैब में इस तरह जुड़ जाते हैं:
13. आगे जा रहा है
इसके साथ ही, आपके पास बेहतर सैद्धांतिक आधार होगा, जिससे अपने-आप जनरेट होने वाली क्रैश रिपोर्ट को बेहतर बनाया जा सकेगा. इस नई जानकारी की मदद से, इवेंट की मौजूदा स्थिति, पिछले इवेंट के रिकॉर्ड, और Google Analytics के मौजूदा इवेंट का इस्तेमाल किया जा सकता है. इससे इवेंट के क्रम और लॉजिक को बेहतर तरीके से समझा जा सकता है.
अगर आपका ऐप्लिकेशन, Android 11 (एपीआई लेवल 30) या उसके बाद के वर्शन को टारगेट करता है, तो GWP-ASan को शामिल करने पर विचार करें. यह एक नेटिव मेमोरी ऐलोकेटर सुविधा है. यह सुविधा, मेमोरी की नेटिव गड़बड़ियों, जैसे कि use-after-free
और heap-buffer-overflow
बग की वजह से होने वाले क्रैश को डीबग करने में मदद करती है. डीबग करने की इस सुविधा का फ़ायदा पाने के लिए, GWP-ASan को साफ़ तौर पर चालू करें.
अगले चरण
रिमोट कॉन्फ़िगरेशन की मदद से, अपने यूनिटी गेम के इंस्ट्रुमेंट कोड पर जाएं. यहां आपको Unity में रिमोट कॉन्फ़िगरेशन और A/B टेस्टिंग का इस्तेमाल करने के बारे में जानकारी मिलेगी.