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

প্ল্যাটফর্ম বেছে নিন: iOS+ Android Flutter Unity


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

ব্যতিক্রম সম্পর্কে অভিযোগ জানানো

আগে বোঝা যায়নি এমন সমস্যার ব্যাপারে অভিযোগ জানানো

আপনি FlutterError.onError-এর সাথে FirebaseCrashlytics.instance.recordFlutterFatalError ওভাররাইড করে Flutter ফ্রেমওয়ার্কের মধ্যে হওয়া সব "মারাত্মক" সমস্যা অটোমেটিক শনাক্ত করতে পারবেন। অথবা, "মারাত্মক নয়" এমন ব্যতিক্রমগুলিও ধরতে, 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());
}

অ্যাসিঙ্ক্রোনাস সমস্যা

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 আপনাকে মারাত্মক নয় এমন ব্যতিক্রম রেকর্ড করতে দেয় এবং মারাত্মক ইভেন্ট রিপোর্ট করা হলে অথবা অ্যাপ আবার চালু হলে সেগুলি আপনাকে পাঠায়।

আপনার অ্যাপের catch ব্লকে নন-ফেটাল ব্যতিক্রম রেকর্ড করতে 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 প্রয়োজন হলে ডিভাইস থেকে পাঠানো রিপোর্টের সংখ্যায় রেট-লিমিট প্রয়োগ করবে।

কাস্টম কী যোগ করা

ক্র্যাশ হওয়ার আগে আপনার অ্যাপের নির্দিষ্ট অবস্থা সম্পর্কে জানতে কাস্টম কী সাহায্য করে। আপনি নিজের ক্র্যাশ রিপোর্টের সাথে ইচ্ছামতো কী-ভ্যালু পেয়ার অ্যাসোসিয়েট করতে পারবেন, তারপর DevOps ও এনগেজমেন্ট > Crashlytics ড্যাশবোর্ডে ক্র্যাশ রিপোর্ট সার্চ ও ফিল্টার করতে Firebase কনসোলের কাস্টম কী ব্যবহার করতে পারবেন।

  • ড্যাশবোর্ডে, আপনি কাস্টম কীয়ের সাথে ম্যাচ করে এমন সমস্যা সার্চ করতে পারবেন।

  • ড্যাশবোর্ডে কোনও নির্দিষ্ট সমস্যা পর্যালোচনা করার সময়, আপনি প্রতিটি ইভেন্টের জন্য সম্পর্কিত কাস্টম কী (কী সাবট্যাব) দেখতে এবং এমনকি কাস্টম কী (পৃষ্ঠার উপরে ফিল্টার মেনু) অনুসারে ইভেন্ট ফিল্টার করতে পারবেন।

কী-ভ্যালু পেয়ার সেট করতে 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 সহায়তা টিমের সাথে যোগাযোগ করুন।

ব্রেডক্রাম্ব লগ পাওয়া

ক্র্যাশ, নন-ফ্যাটাল বা ANR ইভেন্ট হওয়ার আগে ব্যবহারকারী আপনার অ্যাপের সাথে কীভাবে ইন্টার‍্যাক্ট করেছেন তা ব্রেডক্রাম্ব লগ থেকে আরও ভালোভাবে বুঝতে পারবেন। কোনও সমস্যা আবার তৈরি ও ডিবাগ করার চেষ্টা করার সময় এইসব লগ সহায়ক হতে পারে।

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

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

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

মনে রাখবেন, আপনি 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 ওভাররাইড কল করে বেছে নেওয়া ব্যবহারকারীদের জন্য সংগ্রহ করার সুবিধা চালু করুন। আপনার অ্যাপের পরবর্তী সবকটি লঞ্চ জুড়ে ওভাররাইড ভ্যালু বজায় থাকে, তাই Crashlytics সেই ব্যবহারকারীর জন্য রিপোর্ট অটোমেটিক সংগ্রহ করতে পারে।

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

    ব্যবহারকারী পরে ডেটা সংগ্রহ করার বিকল্প থেকে বেরিয়ে এলে, আপনি ওভাররাইড ভ্যালু হিসেবে false পাস করতে পারবেন। এর ফলে, ব্যবহারকারী পরের বার অ্যাপ লঞ্চ করলে এটি প্রয়োগ করা হবে এবং ব্যবহারকারী যতবার অ্যাপ লঞ্চ করবেন ততবার এটি প্রয়োগ করা হবে।

ক্র্যাশ ইনসাইট ডেটা ম্যানেজ করা

অন্যান্য Firebase অ্যাপ থেকে পাওয়া ট্রেসের সাথে আপনার বেনামী স্ট্যাক ট্রেস তুলনা করে এবং আপনার সমস্যাটি কোনও বৃহত্তর ট্রেন্ডের অংশ কিনা তা জানিয়ে ক্র্যাশ ইনসাইট আপনাকে সমস্যা সমাধান করতে সাহায্য করে। অনেক সমস্যার ক্ষেত্রে, ক্র্যাশ ইনসাইট এমনকি ক্র্যাশ ডিবাগ করার জন্য রিসোর্সও প্রদান করে।

সাধারণ স্থিতিশীলতা সংক্রান্ত ট্রেন্ড শনাক্ত করতে ক্র্যাশ ইনসাইট এগ্রিগেট করা ক্র্যাশ ডেটা ব্যবহার করে। আপনি অ্যাপের ডেটা শেয়ার করতে না চাইলে, ক্র্যাশ ইনসাইট থেকে বেরিয়ে আসতে পারেন। এর জন্য, Firebase কনসোলের DevOps ও এনগেজমেন্ট > Crashlytics ড্যাশবোর্ডের মধ্যে থাকা ক্র্যাশ ইনসাইট মেনু থেকে বেরিয়ে আসতে পারেন।

পরবর্তী ধাপ