Firebase Crashlytics की क्रैश रिपोर्ट को पसंद के मुताबिक बनाएं


Crashlytics डैशबोर्ड में, किसी समस्या पर क्लिक करके, इवेंट की ज़्यादा जानकारी वाली रिपोर्ट देखी जा सकती है. इन रिपोर्ट को पसंद के मुताबिक बनाया जा सकता है, ताकि आपको यह बेहतर तरीके से समझने में मदद मिल सके कि आपके ऐप्लिकेशन में क्या हो रहा है और Crashlytics को रिपोर्ट किए गए इवेंट के बारे में क्या जानकारी मिली है.

  • अगर आपका ऐप्लिकेशन Google Analytics के लिए Firebase SDK टूल का इस्तेमाल करता है, तो ब्रेडक्रंब लॉग अपने-आप मिलते हैं. इन लॉग से, आपको उपयोगकर्ता की उन कार्रवाइयों के बारे में जानकारी मिलती है जिनकी वजह से आपके ऐप्लिकेशन में Crashlytics से इकट्ठा किया गया इवेंट ट्रिगर होता है.

  • क्रैश की अपने-आप होने वाली रिपोर्टिंग बंद करें और अपने उपयोगकर्ताओं के लिए, ऑप्ट-इन रिपोर्टिंग की सुविधा चालू करें. ध्यान दें कि डिफ़ॉल्ट रूप से, Crashlytics आपके ऐप्लिकेशन के सभी उपयोगकर्ताओं के लिए, क्रैश की रिपोर्ट अपने-आप इकट्ठा करता है.

कस्टम कुंजियां जोड़ना

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

  • Crashlytics डैशबोर्ड में, कस्टम बटन से मैच होने वाली समस्याओं को खोजा जा सकता है.

  • कंसोल में किसी खास समस्या की समीक्षा करते समय, हर इवेंट (कुंजियां सब-टैब) के लिए उससे जुड़ी कस्टम कुंजियां देखी जा सकती हैं. साथ ही, इवेंट को कस्टम कुंजियों के हिसाब से फ़िल्टर भी किया जा सकता है. इसके लिए, पेज में सबसे ऊपर मौजूद फ़िल्टर मेन्यू पर जाएं.

की/वैल्यू पेयर सेट करने के लिए, setCustomKey इंस्टेंस के तरीके का इस्तेमाल करें. ध्यान दें कि setCustomKey को value पैरामीटर के लिए ओवरलोड किया गया है, ताकि वह किसी भी प्राइमटिव या String आर्ग्युमेंट को स्वीकार कर सके. यहां कुछ उदाहरण दिए गए हैं:

KotlinJava
val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true) // boolean value
    key("my_double_key", 1.0) // double value
    key("my_float_key", 1.0f) // float value
    key("my_int_key", 1) // int value
}
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

किसी मौजूदा कुंजी की वैल्यू में बदलाव करने के लिए, कुंजी को कॉल करके उसे किसी दूसरी वैल्यू पर सेट करें. उदाहरण के लिए:

KotlinJava
val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

setCustomKeys इंस्टेंस वाले तरीके में CustomKeysAndValues का इंस्टेंस पास करके, की/वैल्यू पेयर को एक साथ जोड़ें:

KotlinJava

Kotlin के लिए, मौजूदा फ़ंक्शन का इस्तेमाल करना, CustomKeysAndValues बिल्डर का इस्तेमाल करने से आसान है.

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}
CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

कस्टम लॉग मैसेज जोड़ना

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

समस्याओं की पहचान करने के लिए, log का इस्तेमाल करें. उदाहरण के लिए:

KotlinJava
Firebase.crashlytics.log("message")
FirebaseCrashlytics.getInstance().log("message");

उपयोगकर्ता आइडेंटिफ़ायर सेट करना

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

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

KotlinJava
Firebase.crashlytics.setUserId("user123456789")
FirebaseCrashlytics.getInstance().setUserId("user123456789");

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

(सिर्फ़ Android NDK के लिए) एनडीके क्रैश रिपोर्ट में मेटाडेटा जोड़ना

NDK क्रैश रिपोर्ट में मेटाडेटा जोड़ने के लिए, अपने C++ कोड में crashlytics.h हेडर को शामिल किया जा सकता है. जैसे, कस्टम कुंजियां, कस्टम लॉग, और उपयोगकर्ता आइडेंटिफ़ायर. इन सभी विकल्पों के बारे में ऊपर दिए गए पेज पर बताया गया है.

crashlytics.h, Firebase Android SDK टूल के GitHub रिपॉज़िटरी में, सिर्फ़ हेडर के तौर पर C++ लाइब्रेरी के तौर पर उपलब्ध है.

NDK C++ API इस्तेमाल करने के निर्देशों के लिए, हेडर फ़ाइल में दी गई टिप्पणियां पढ़ें.

मेमोरी में गड़बड़ी की समस्याओं को डीबग करने के लिए, GWP-ASan रिपोर्ट शामिल करना

Crashlytics, GWP-ASan रिपोर्ट इकट्ठा करके, नेटिव मेमोरी की गड़बड़ियों की वजह से होने वाले क्रैश को डीबग करने में आपकी मदद कर सकता है. मेमोरी से जुड़ी ये गड़बड़ियां, आपके ऐप्लिकेशन में मेमोरी के खराब होने से जुड़ी हो सकती हैं. ऐप्लिकेशन में सुरक्षा से जुड़ी जोखिम की मुख्य वजह यही है.

  • Crashlytics डैशबोर्ड में किसी समस्या की जानकारी पर क्लिक करने पर, यह डेटा "मेमोरी स्टैक ट्रेस" टैब में दिखता है.

  • इस डेटा से जुड़ी सभी समस्याओं को तुरंत देखने के लिए, "GWP-ASan report" के नए सिग्नल और फ़िल्टर का भी इस्तेमाल किया जा सकता है.

अगर आपने अपने ऐप्लिकेशन में GWP-ASan को साफ़ तौर पर चालू किया है और NDK v18.3.6+ (Firebase BoM v31.3.0+) के लिए Crashlytics SDK का इस्तेमाल किया है, तो आपको GWP-ASan की मेमोरी रिपोर्ट मिल सकती हैं. Android दस्तावेज़ में दिए गए नेटिव कोड के उदाहरण का इस्तेमाल करके, GWP-ASan सेटअप की जांच की जा सकती है.

गड़बड़ी की ऐसी जानकारी जो काम करने में रुकावट नहीं डालती

Crashlytics, आपके ऐप्लिकेशन के क्रैश होने की रिपोर्ट अपने-आप भेजने के साथ-साथ, गड़बड़ी के ऐसे मामलों को रिकॉर्ड करता है जिनसे ऐप्लिकेशन को कोई नुकसान नहीं होता. साथ ही, अगली बार ऐप्लिकेशन के लॉन्च होने पर, उन्हें आपको भेजता है.

अपने ऐप्लिकेशन के catch ब्लॉक में, गैर-घातक अपवादों को रिकॉर्ड करने के लिए, recordException तरीके का इस्तेमाल करें. उदाहरण के लिए:

KotlinJava
try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}
try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

इसके अलावा, किसी खास गड़बड़ी के लिए कस्टम बटन भी अटैच किए जा सकते हैं. उदाहरण के लिए:

KotlinJava
try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e) {
        key("string key", "string value")
        key("boolean key", true)
        key("float key", Float.MAX_VALUE)
    }
    // handle your exception here
}
try {
    methodThatThrows();
} catch (Exception e) {
    CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
            .putString("string key", "string value")
            .putBoolean("boolean key", true)
            .putFloat("float key", Float.MAX_VALUE)
            .build();
    FirebaseCrashlytics.getInstance().recordException(e, keysAndValues);
    // handle your exception here
}

रिकॉर्ड किए गए सभी अपवाद, Firebase कंसोल में गड़बड़ियों के तौर पर दिखते हैं. समस्या की खास जानकारी में, क्रैश से जुड़ी वह सारी जानकारी होती है जो आम तौर पर आपको मिलती है. साथ ही, इसमें Android वर्शन और हार्डवेयर डिवाइस के हिसाब से ब्रेकडाउन की जानकारी भी होती है.

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

ब्रेडक्रंब लॉग पाना

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

ब्रेडक्रंब लॉग, Google Analytics की मदद से काम करते हैं. इसलिए, ब्रेडक्रंब लॉग पाने के लिए, आपको अपने Firebase प्रोजेक्ट के लिए Google Analytics चालू करना होगा. साथ ही, अपने ऐप्लिकेशन में Google Analytics के लिए Firebase SDK टूल जोड़ना होगा. इन ज़रूरी शर्तों को पूरा करने के बाद, किसी समस्या की जानकारी देखने पर, ब्रेडक्रंब लॉग अपने-आप लॉग टैब में इवेंट के डेटा के साथ शामिल हो जाते हैं.

Analytics SDK टूल, screen_view इवेंट को अपने-आप लॉग करता है. इससे ब्रेडक्रंब लॉग, क्रैश, नॉन-फ़ैटल या ANR इवेंट से पहले देखी गई स्क्रीन की सूची दिखा पाते हैं. screen_view ब्रेडक्रंब लॉग में एक firebase_screen_class पैरामीटर होता है.

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

ध्यान दें कि आपके पास Google Analytics डेटा को इकट्ठा और इस्तेमाल करने की सुविधा को कंट्रोल करने का विकल्प होता है. इसमें वह डेटा भी शामिल होता है जो ब्रेडक्रंब लॉग में अपने-आप भर जाता है.

ऑप्ट-इन रिपोर्टिंग की सुविधा चालू करना

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

  1. डेटा अपने-आप इकट्ठा होने की सुविधा बंद करने के लिए, अपनी AndroidManifest.xml फ़ाइल के application ब्लॉक में meta-data टैग जोड़ें:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Crashlytics डेटा को इकट्ठा करने की सुविधा को रनटाइम पर बदलकर, चुनिंदा उपयोगकर्ताओं के लिए डेटा इकट्ठा करने की सुविधा चालू करें. बदली गई वैल्यू, आपके ऐप्लिकेशन के हर लॉन्च के दौरान बनी रहती है, ताकि Crashlytics रिपोर्ट अपने-आप इकट्ठा कर सके. क्रैश की अपने-आप होने वाली रिपोर्टिंग से ऑप्ट आउट करने के लिए, बदली गई वैल्यू के तौर पर false पास करें. false पर सेट होने पर, नई वैल्यू तब तक लागू नहीं होती, जब तक ऐप्लिकेशन को फिर से नहीं चलाया जाता.

    KotlinJava
    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

क्रैश की अहम जानकारी का डेटा मैनेज करना

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

क्रैश इनसाइट, क्रैश से जुड़े इकट्ठा किए गए डेटा का इस्तेमाल करके, ऐप्लिकेशन के क्रैश होने के सामान्य रुझानों की पहचान करती है. अगर आपको अपने ऐप्लिकेशन का डेटा शेयर नहीं करना है, तो Firebase कंसोल में Crashlytics समस्याओं की सूची के सबसे ऊपर मौजूद, क्रैश की अहम जानकारी मेन्यू से, क्रैश की अहम जानकारी से ऑप्ट-आउट किया जा सकता है.