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

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

ধরা পড়া ব্যতিক্রমগুলি রিপোর্ট করুন

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

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

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

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'],
);

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

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 কনসোলে প্রদর্শন করে।

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

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

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

ক্র্যাশ ইনসাইট ডেটা পরিচালনা করুন

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

ক্র্যাশ ইনসাইট সাধারণ স্থিতিশীলতার প্রবণতা সনাক্ত করতে সমষ্টিগত ক্র্যাশ ডেটা ব্যবহার করে। আপনি যদি আপনার অ্যাপের ডেটা শেয়ার না করতে চান, তাহলে Firebase কনসোলে আপনার Crashlytics সমস্যা তালিকার শীর্ষে থাকা ক্র্যাশ ইনসাইটস মেনু থেকে আপনি ক্র্যাশ ইনসাইটগুলি অপ্ট-আউট করতে পারেন৷