Flutter-এর জন্য ক্র্যাশ রিপোর্ট কাস্টমাইজ করুন

প্ল্যাটফর্ম নির্বাচন করুন: iOS+ অ্যান্ড্রয়েড ফ্লাটার ইউনিটি


Crashlytics ড্যাশবোর্ডে, আপনি কোনো একটি ইস্যুতে ক্লিক করে একটি বিস্তারিত ইভেন্ট রিপোর্ট পেতে পারেন। আপনার অ্যাপে কী ঘটছে এবং Crashlytics এ রিপোর্ট করা ইভেন্টগুলোর পারিপার্শ্বিক পরিস্থিতি আরও ভালোভাবে বোঝার জন্য আপনি সেই রিপোর্টগুলো কাস্টমাইজ করতে পারেন।

ব্যতিক্রম রিপোর্ট করুন

অনাকাঙ্ক্ষিত ব্যতিক্রমগুলির প্রতিবেদন করুন

ফ্লাটার ফ্রেমওয়ার্কের মধ্যে থ্রো করা সমস্ত "ফ্যাটাল" এরর আপনি স্বয়ংক্রিয়ভাবে ধরতে পারেন 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());

}

ফ্লাটারের বাইরের ত্রুটি

ফ্লাটার কনটেক্সটের বাইরে ঘটা ত্রুটিগুলো ধরার জন্য, বর্তমান 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 এই লগগুলোকে আপনার ক্র্যাশ ডেটার সাথে সংযুক্ত করে এবং Firebase কনসোলের Crashlytics লগস' ট্যাবের অধীনে সেগুলো প্রদর্শন করে।

সমস্যা চিহ্নিত করতে log ব্যবহার করুন। উদাহরণস্বরূপ:

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

ব্যবহারকারী শনাক্তকারী সেট করুন

কোনো সমস্যা নির্ণয় করার জন্য, আপনার কোন ব্যবহারকারীরা একটি নির্দিষ্ট ক্র্যাশের সম্মুখীন হয়েছেন তা জানা প্রায়শই সহায়ক হয়। Crashlytics আপনার ক্র্যাশ রিপোর্টে ব্যবহারকারীদের পরিচয় গোপন রেখে শনাক্ত করার একটি উপায় রয়েছে।

আপনার রিপোর্টে ইউজার আইডি যোগ করতে, প্রতিটি ইউজারকে আইডি নম্বর, টোকেন বা হ্যাশ করা মানের আকারে একটি অনন্য শনাক্তকারী প্রদান করুন:

FirebaseCrashlytics.instance.setUserIdentifier("12345");

যদি আপনি কোনো ইউজার আইডেন্টিফায়ার সেট করার পর তা মুছে ফেলতে চান, তাহলে ভ্যালুটি একটি ফাঁকা স্ট্রিং-এ রিসেট করুন। ইউজার আইডেন্টিফায়ার মুছে ফেললে বিদ্যমান Crashlytics রেকর্ডগুলো মুছে যায় না। যদি কোনো ইউজার আইডির সাথে যুক্ত রেকর্ড ডিলিট করার প্রয়োজন হয়, তাহলে ফায়ারবেস সাপোর্টের সাথে যোগাযোগ করুন

ব্রেডক্রাম্ব লগ পান

কোনো ক্র্যাশ, নন-ফেটাল বা এএনআর ইভেন্টের আগে একজন ব্যবহারকারী আপনার অ্যাপের সাথে কী ধরনের ইন্টারঅ্যাকশন করেছেন, তা ব্রেডক্রাম্ব লগ থেকে আরও ভালোভাবে বোঝা যায়। কোনো সমস্যা পুনরুৎপাদন এবং ডিবাগ করার সময় এই লগগুলো সহায়ক হতে পারে।

ব্রেডক্রাম্ব লগ গুগল অ্যানালিটিক্স দ্বারা চালিত হয়, তাই ব্রেডক্রাম্ব লগ পেতে হলে আপনাকে আপনার ফায়ারবেস প্রজেক্টের জন্য গুগল অ্যানালিটিক্স সক্রিয় করতে হবে এবং আপনার অ্যাপে Google Analytics জন্য ফায়ারবেস এসডিকে (SDK) যোগ করতে হবে । এই শর্তগুলো পূরণ হয়ে গেলে, আপনি যখন কোনো ইস্যুর বিবরণ দেখবেন, তখন লগস ট্যাবের মধ্যে ইভেন্টের ডেটার সাথে ব্রেডক্রাম্ব লগ স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়ে যাবে।

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

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

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

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

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

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

    অ্যাপল প্ল্যাটফর্ম

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

    • Key: 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 ইস্যু তালিকার শীর্ষে থাকা ক্র্যাশ ইনসাইটস মেনু থেকে এটি ব্যবহার করা থেকে বিরত থাকতে পারেন।

পরবর্তী পদক্ষেপ