আপনার Firebase Crashlytics ক্র্যাশ রিপোর্ট কাস্টমাইজ করুন


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

অ্যাসিঙ্ক্রোনাস ত্রুটি

অ্যাসিঙ্ক্রোনাস ত্রুটিগুলি ফ্লাটার ফ্রেমওয়ার্ক দ্বারা ধরা পড়ে না:

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 প্রসঙ্গের বাইরে ঘটে যাওয়া ত্রুটিগুলি ধরতে, বর্তমান 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 জন্য ফায়ারবেস SDK যুক্ত করতে হবে । একবার এই প্রয়োজনীয়তাগুলি পূরণ হয়ে গেলে, যখন আপনি কোনও সমস্যার বিবরণ দেখেন তখন লগ ট্যাবের মধ্যে ব্রেডক্রাম্ব লগগুলি স্বয়ংক্রিয়ভাবে ইভেন্টের ডেটার সাথে অন্তর্ভুক্ত হয়ে যায়।

Analytics SDK স্বয়ংক্রিয়ভাবে screen_view ইভেন্ট লগ করে যা ব্রেডক্রাম্ব লগগুলিকে ক্র্যাশের আগে দেখা, নন-ফ্যাটাল, বা ANR ইভেন্টের স্ক্রিনের তালিকা দেখাতে সক্ষম করে। একটি screen_view breadcrumb লগে একটি firebase_screen_class প্যারামিটার থাকে।

ব্যবহারকারীর সেশনের মধ্যে ম্যানুয়ালি লগ করা যেকোনো কাস্টম ইভেন্ট দিয়ে ব্রেডক্রাম্ব লগগুলি পূর্ণ করা হয়, যার মধ্যে ইভেন্টের প্যারামিটার ডেটাও অন্তর্ভুক্ত থাকে। এই ডেটা ব্যবহারকারীর ক্র্যাশ, নন-ফ্যাটাল বা ANR ইভেন্টের দিকে পরিচালিত করে এমন একাধিক ক্রিয়া দেখাতে সাহায্য করতে পারে।

মনে রাখবেন যে আপনি Google Analytics ডেটা সংগ্রহ এবং ব্যবহার নিয়ন্ত্রণ করতে পারেন, যার মধ্যে ব্রেডক্রাম্ব লগ পূরণ করে এমন ডেটা অন্তর্ভুক্ত রয়েছে।

অপ্ট-ইন রিপোর্টিং সক্ষম করুন

ডিফল্টরূপে, Crashlytics আপনার সমস্ত অ্যাপ ব্যবহারকারীদের জন্য স্বয়ংক্রিয়ভাবে ক্র্যাশ রিপোর্ট সংগ্রহ করে। ব্যবহারকারীদের তাদের প্রেরিত ডেটার উপর আরও নিয়ন্ত্রণ দেওয়ার জন্য, আপনি স্বয়ংক্রিয় রিপোর্টিং অক্ষম করে এবং আপনার কোডে যখন আপনি চান তখনই Crashlytics এ ডেটা প্রেরণ করে অপ্ট-ইন রিপোর্টিং সক্ষম করতে পারেন।

  1. স্থানীয়ভাবে স্বয়ংক্রিয় সংগ্রহ বন্ধ করুন:

    অ্যাপল প্ল্যাটফর্মগুলি

    আপনার Info.plist ফাইলে একটি নতুন কী যোগ করুন:

    • কী: FirebaseCrashlyticsCollectionEnabled
    • মান: false

    অ্যান্ড্রয়েড

    আপনার 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 কনসোলে আপনার Crashlytics সমস্যা তালিকার শীর্ষে থাকা Crash Insights মেনু থেকে Crash Insights থেকে অপ্ট-আউট করতে পারেন।