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


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

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

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

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

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

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

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

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

Kotlin

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
}

Java

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 */);

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

Kotlin

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

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

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

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

Kotlin

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)
}

Java

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 का इस्तेमाल करें. उदाहरण के लिए:

Kotlin

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

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

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

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

Kotlin

Firebase.crashlytics.setUserId("user123456789")

Java

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 रिपोर्ट" के नए सिग्नल और फ़िल्टर का इस्तेमाल भी किया जा सकता है.

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

नुकसान न पहुंचाने वाली गड़बड़ियों की शिकायत करना

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

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

Kotlin

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

Java

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

इसके अलावा, आपके पास किसी खास नॉन-फ़ैटल अपवाद के लिए कस्टम कुंजियां अटैच करने का विकल्प भी होता है. उदाहरण के लिए:

Kotlin

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
}

Java

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 लॉग किए गए अपवादों को एक साथ बैच करता है और उन्हें अगली बार ऐप्लिकेशन लॉन्च होने पर भेजता है.

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

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

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

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

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

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

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

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

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

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

    Kotlin

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

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

क्रैश इनसाइट के डेटा को मैनेज करना

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

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