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


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

  • Crashlytics को उन अपवादों और उन अपवादों की शिकायत करें जिनकी पहचान नहीं हुई है.

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

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

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

उन अपवादों की शिकायत करना जिनकी पहचान नहीं हुई है

Flutter फ़्रेमवर्क में होने वाली सभी "गंभीर" गड़बड़ियों को अपने-आप पकड़ा जा सकता है. इसके लिए, FlutterError.onError को FirebaseCrashlytics.instance.recordFlutterFatalError से बदलें. इसके अलावा, "गंभीर नहीं" अपवादों को भी पकड़ने के लिए, FlutterError.onError को FirebaseCrashlytics.instance.recordFlutterError से बदलें:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp();
  bool weWantFatalErrorRecording = true;
  FlutterError.onError = (errorDetails) {
    if(weWantFatalErrorRecording){
      FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
    } else {
      FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
    }
  };

  runApp(MyApp());
}

एसिंक्रोनस गड़बड़ियां

Flutter फ़्रेमवर्क, एसिंक्रोनस गड़बड़ियों को कैप्चर नहीं करता:

ElevatedButton(
  onPressed: () async {
    throw Error();
  }
  ...
)

ऐसी गड़बड़ियों का पता लगाने के लिए, PlatformDispatcher.instance.onError हैंडलर का इस्तेमाल किया जा सकता है:

Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    FlutterError.onError = (errorDetails) {
      FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
    };
    // Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
    PlatformDispatcher.instance.onError = (error, stack) {
      FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
      return true;
    };
    runApp(MyApp());

}

Flutter के बाहर की गड़बड़ियां

Flutter कॉन्टेक्स्ट के बाहर होने वाली गड़बड़ियों को पकड़ने के लिए, मौजूदा Isolate पर गड़बड़ी सुनने वाला कोई टूल इंस्टॉल करें:

Isolate.current.addErrorListener(RawReceivePort((pair) async {
  final List<dynamic> errorAndStacktrace = pair;
  await FirebaseCrashlytics.instance.recordError(
    errorAndStacktrace.first,
    errorAndStacktrace.last,
    fatal: true,
  );
}).sendPort);

मिलने वाले अपवादों की रिपोर्ट करना

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

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

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error'
);

// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);

आपके पास गड़बड़ी के बारे में ज़्यादा जानकारी लॉग करने का विकल्प भी है. इसके लिए, information प्रॉपर्टी का इस्तेमाल करें:

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error',
  information: ['further diagnostic information about the error', 'version 2.0'],
);

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

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

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

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

  • Crashlytics डैशबोर्ड में, अपनी पसंद के मुताबिक बनाई गई कुंजी से मैच होने वाली समस्याएं खोजी जा सकती हैं.

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

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

// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');

// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);

// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);

// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);

// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);

// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);

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

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

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

FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");

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

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

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

FirebaseCrashlytics.instance.setUserIdentifier("12345");

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

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

ब्रेडक्रंब लॉग से आपको इस बारे में बेहतर जानकारी मिलती है कि उपयोगकर्ता ने आपके ऐप्लिकेशन के साथ कैसे इंटरैक्ट किया, जिसकी वजह से ऐप्लिकेशन क्रैश हुआ, गड़बड़ी हुई या 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. अपने-आप डेटा इकट्ठा होने की सुविधा को डिफ़ॉल्ट रूप से बंद करने के लिए:

    Apple के प्लैटफ़ॉर्म

    अपनी Info.plist फ़ाइल में नई कुंजी जोड़ें:

    • बटन: FirebaseCrashlyticsCollectionEnabled
    • वैल्यू: false

    Android

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

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

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

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

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

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

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