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

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


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

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

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

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

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

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

अगले चरण