अपनी फायरबेस क्रैशलाइटिक्स क्रैश रिपोर्ट को अनुकूलित करें

क्रैशलिटिक्स डैशबोर्ड में, आप किसी समस्या पर क्लिक कर सकते हैं और विस्तृत ईवेंट रिपोर्ट प्राप्त कर सकते हैं। आपके ऐप में क्या हो रहा है और क्रैशलिटिक्स को रिपोर्ट की गई घटनाओं के आसपास की परिस्थितियों को बेहतर ढंग से समझने में मदद के लिए आप उन रिपोर्टों को कस्टमाइज़ कर सकते हैं।

न देखे गए अपवादों की रिपोर्ट करें

आप FirebaseCrashlytics.instance.recordFlutterFatalError के साथ FlutterError.onError ओवरराइड करके फ़्लटर फ्रेमवर्क के भीतर आने वाली सभी "घातक" त्रुटियों को स्वचालित रूप से पकड़ सकते हैं। वैकल्पिक रूप से, "गैर-घातक" अपवादों को पकड़ने के लिए, FirebaseCrashlytics.instance.recordFlutterError के साथ FlutterError.onError ओवरराइड करें:

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

अतुल्यकालिक त्रुटियाँ

अतुल्यकालिक त्रुटियाँ फ़्लटर ढाँचे द्वारा नहीं पकड़ी जाती हैं:

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());

}

फ़्लटर के बाहर त्रुटियाँ

फ़्लटर संदर्भ के बाहर होने वाली त्रुटियों को पकड़ने के लिए, वर्तमान Isolate पर एक त्रुटि श्रोता स्थापित करें:

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

रिपोर्ट में अपवाद पकड़े गए

आपके ऐप के क्रैश की स्वचालित रूप से रिपोर्ट करने के अलावा, क्रैशलिटिक्स आपको गैर-घातक अपवादों को रिकॉर्ड करने देता है और अगली बार किसी घातक घटना की रिपोर्ट होने पर या ऐप के पुनरारंभ होने पर उन्हें आपको भेजता है।

अपने ऐप के कैच ब्लॉक में गैर-घातक अपवादों को रिकॉर्ड करने के लिए 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'],
);

ये अपवाद फ़ायरबेस कंसोल में गैर-घातक समस्याओं के रूप में दिखाई देते हैं। समस्या सारांश में संस्करण और हार्डवेयर डिवाइस के अनुसार ब्रेकडाउन के साथ-साथ क्रैश से प्राप्त होने वाली सभी स्थिति की जानकारी शामिल होती है।

क्रैशलिटिक्स आपके ऐप पर प्रदर्शन प्रभाव को कम करने के लिए एक समर्पित पृष्ठभूमि थ्रेड पर अपवादों को संसाधित करता है। आपके उपयोगकर्ताओं के नेटवर्क ट्रैफ़िक को कम करने के लिए, यदि आवश्यक हो तो क्रैशलिटिक्स डिवाइस से भेजी गई रिपोर्ट की संख्या को सीमित कर देगा।

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

कस्टम कुंजियाँ आपके ऐप की क्रैश होने तक की विशिष्ट स्थिति जानने में आपकी सहायता करती हैं। आप अपनी क्रैश रिपोर्ट के साथ मनमाने ढंग से कुंजी/मान जोड़े को जोड़ सकते हैं, फिर फायरबेस कंसोल में क्रैश रिपोर्ट को खोजने और फ़िल्टर करने के लिए कस्टम कुंजियों का उपयोग कर सकते हैं।

  • क्रैशलिटिक्स डैशबोर्ड में, आप कस्टम कुंजी से मेल खाने वाले मुद्दों की खोज कर सकते हैं।

  • जब आप कंसोल में किसी विशिष्ट मुद्दे की समीक्षा कर रहे होते हैं, तो आप प्रत्येक ईवेंट के लिए संबंधित कस्टम कुंजियाँ ( कुंजियाँ उपटैब) देख सकते हैं और यहां तक ​​कि कस्टम कुंजियों द्वारा ईवेंट को फ़िल्टर भी कर सकते हैं (पृष्ठ के शीर्ष पर फ़िल्टर मेनू)।

कुंजी/मूल्य जोड़े सेट करने के लिए 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 लॉग टैब के अंतर्गत Firebase कंसोल में प्रदर्शित करता है।

समस्याओं का पता लगाने में मदद के लिए log उपयोग करें। उदाहरण के लिए:

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

उपयोगकर्ता पहचानकर्ता सेट करें

किसी समस्या का निदान करने के लिए, यह जानना अक्सर सहायक होता है कि आपके किन उपयोगकर्ताओं को किसी क्रैश का अनुभव हुआ है। क्रैशलाइटिक्स में आपकी क्रैश रिपोर्ट में उपयोगकर्ताओं को गुमनाम रूप से पहचानने का एक तरीका शामिल है।

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

FirebaseCrashlytics.instance.setUserIdentifier("12345");

यदि आपको किसी उपयोगकर्ता पहचानकर्ता को सेट करने के बाद उसे साफ़ करने की आवश्यकता हो, तो मान को एक रिक्त स्ट्रिंग पर रीसेट करें। उपयोगकर्ता पहचानकर्ता को साफ़ करने से मौजूदा क्रैशलिटिक्स रिकॉर्ड नहीं हटते। यदि आपको उपयोगकर्ता आईडी से जुड़े रिकॉर्ड हटाने की आवश्यकता है, तो फायरबेस समर्थन से संपर्क करें

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

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

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

एनालिटिक्स एसडीके स्वचालित रूप से screen_view इवेंट को लॉग करता है जो ब्रेडक्रंब लॉग को क्रैश, गैर-घातक या एएनआर इवेंट से पहले देखी गई स्क्रीन की सूची दिखाने में सक्षम बनाता है। screen_view ब्रेडक्रंब लॉग में एक firebase_screen_class पैरामीटर होता है।

ब्रेडक्रंब लॉग किसी भी कस्टम ईवेंट से भी भरे जाते हैं जिन्हें आप उपयोगकर्ता के सत्र में मैन्युअल रूप से लॉग करते हैं, जिसमें ईवेंट का पैरामीटर डेटा भी शामिल होता है। यह डेटा क्रैश, गैर-घातक, या ANR ईवेंट तक ले जाने वाली उपयोगकर्ता गतिविधियों की एक श्रृंखला दिखाने में मदद कर सकता है।

ध्यान दें कि आप Google Analytics डेटा के संग्रह और उपयोग को नियंत्रित कर सकते हैं, जिसमें ब्रेडक्रंब लॉग को पॉप्युलेट करने वाला डेटा शामिल है।

ऑप्ट-इन रिपोर्टिंग सक्षम करें

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

  1. स्वचालित संग्रह को मूल रूप से बंद करें:

    एप्पल प्लेटफार्म

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

    • कुंजी: FirebaseCrashlyticsCollectionEnabled
    • मान: false

    एंड्रॉयड

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

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. रनटाइम पर क्रैशलिटिक्स डेटा संग्रह ओवरराइड को कॉल करके चुनिंदा उपयोगकर्ताओं के लिए संग्रह सक्षम करें।

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

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

क्रैश इनसाइट डेटा प्रबंधित करें

क्रैश इनसाइट्स आपके अज्ञात स्टैक ट्रेस की तुलना अन्य फायरबेस ऐप्स के ट्रेस से करके आपको समस्याओं को हल करने में मदद करता है और आपको बताता है कि क्या आपकी समस्या एक बड़े रुझान का हिस्सा है। कई मुद्दों के लिए, क्रैश इनसाइट्स आपको क्रैश को डीबग करने में मदद करने के लिए संसाधन भी प्रदान करता है।

क्रैश इनसाइट्स सामान्य स्थिरता रुझानों की पहचान करने के लिए एकत्रित क्रैश डेटा का उपयोग करता है। यदि आप अपने ऐप का डेटा साझा नहीं करना चाहते हैं, तो आप फायरबेस कंसोल में अपनी क्रैशलिटिक्स समस्या सूची के शीर्ष पर क्रैश इनसाइट्स मेनू से क्रैश इनसाइट्स से ऑप्ट-आउट कर सकते हैं।