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

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

  • Crashlytics को अनजान अपवादों और कचे गए अपवाद की शिकायत करें.

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

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

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

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

FlutterError.onError को FirebaseCrashlytics.instance.recordFlutterFatalError से ओवरराइड करने पर, Flutter फ़्रेमवर्क में आने वाली सभी "नुकसान पहुंचाने वाली" गड़बड़ियां अपने-आप पकड़ी जा सकती हैं. इसके अलावा, "नुकसान नहीं पहुंचाने वाले" अपवाद देखने के लिए, 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 की सहायता टीम से संपर्क करें.

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

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

ब्रेडक्रंब लॉग 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 से जुड़ी समस्या की सूची में सबसे ऊपर मौजूद क्रैश की अहम जानकारी वाले मेन्यू में जाकर, क्रैश की अहम जानकारी से ऑप्ट-आउट किया जा सकता है.