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

प्लैटफ़ॉर्म चुनें: iOS+ Android Flutter Unity


किसी समस्या पर क्लिक करके, उसकी पूरी जानकारी वाली इवेंट रिपोर्ट देखी जा सकती है. इसके लिए, Firebase कंसोल के DevOps और यूज़र ऐक्टिविटी > 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 कंसोल के DevOps और यूज़र ऐक्टिविटी > Crashlytics डैशबोर्ड में, ऐसी समस्याओं के तौर पर दिखते हैं जिनकी वजह से ऐप्लिकेशन क्रैश नहीं होता. समस्या की खास जानकारी में, स्थिति की वह सारी जानकारी शामिल होती है जो आपको आम तौर पर क्रैश से मिलती है. साथ ही, इसमें वर्शन और हार्डवेयर डिवाइस के हिसाब से ब्रेकडाउन भी शामिल होता है.

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

पसंद के मुताबिक बटन जोड़ना

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

समस्याओं का पता लगाने के लिए, 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 टूल जोड़ना होगा. ये ज़रूरी शर्तें पूरी होने के बाद, ब्रेडक्रंब लॉग अपने-आप किसी इवेंट के डेटा के साथ शामिल हो जाते हैं. यह डेटा, लॉग टैब में मौजूद होता है. यह टैब, किसी समस्या की जानकारी देखने पर दिखता है. अपनी सभी समस्याएं देखने के लिए, Firebase कंसोल के DevOps और यूज़र ऐक्टिविटी > Crashlytics डैशबोर्ड पर जाएं.

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

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

ध्यान दें कि आपके पास 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 उस उपयोगकर्ता के लिए रिपोर्ट अपने-आप इकट्ठा कर सके.

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

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

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

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

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

अगले चरण