আপনার 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'],
);

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

Analytics 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 সমস্যা তালিকার শীর্ষে থাকা ক্র্যাশ ইনসাইটস মেনু থেকে আপনি ক্র্যাশ ইনসাইটগুলি অপ্ট-আউট করতে পারেন৷

,


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

}

ঝাঁকুনির বাইরে ত্রুটি

ঝাঁকুনির প্রসঙ্গের বাইরে ঘটে যাওয়া ত্রুটিগুলি ধরতে, বর্তমান 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 রেকর্ডগুলি সরিয়ে দেয় না। আপনার যদি কোনও ব্যবহারকারী আইডির সাথে সম্পর্কিত রেকর্ডগুলি মুছতে হয় তবে ফায়ারবেস সাপোর্টের সাথে যোগাযোগ করুন

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

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

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

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

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

নোট করুন যে আপনি 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 ইস্যু তালিকার শীর্ষে ক্র্যাশ ইনসাইটস মেনু থেকে ক্র্যাশ অন্তর্দৃষ্টি থেকে বেরিয়ে যেতে পারেন।

,


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

}

ঝাঁকুনির বাইরে ত্রুটি

ঝাঁকুনির প্রসঙ্গের বাইরে ঘটে যাওয়া ত্রুটিগুলি ধরতে, বর্তমান Isolate একটি ত্রুটি শ্রোতা ইনস্টল করুন:

Isolate.current.addErrorListener(RawReceivePort((pair) async {
  final List<dynamic> errorAndStacktrace = pair;
  await FirebaseCrashlytics.instance.recordError(
    errorAndStacktrace.first,
    errorAndStacktrace.last,
    fatal: true,
  );
}).sendPort);

রিপোর্ট ব্যতিক্রম ধরা পড়ে

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

Use the recordError method to record non-fatal exceptions in your app's catch blocks. যেমন:

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error'
);

// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);

You may also want to log further information about the error which is possible using the information property:

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error',
  information: ['further diagnostic information about the error', 'version 2.0'],
);

These exceptions appear as non-fatal issues in the Firebase console. The issue summary contains all the state information you normally get from crashes, along with breakdowns by version and hardware device.

Crashlytics processes exceptions on a dedicated background thread to minimize the performance impact to your app. To reduce your users' network traffic, Crashlytics will rate-limit the number of reports sent off device, if necessary.

Add custom keys

Custom keys help you get the specific state of your app leading up to a crash. You can associate arbitrary key/value pairs with your crash reports, then use the custom keys to search and filter crash reports in the Firebase console.

  • In the Crashlytics dashboard , you can search for issues that match a custom key.

  • When you're reviewing a specific issue in the console, you can view the associated custom keys for each event ( Keys subtab) and even filter the events by custom keys ( Filter menu at the top of the page).

Use the setCustomKey instance method to set key/value pairs. এখানে কিছু উদাহরণ আছে:

// 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);

Add custom log messages

To give yourself more context for the events leading up to a crash, you can add custom Crashlytics logs to your app. Crashlytics associates the logs with your crash data and displays them in the Firebase console , under the Crashlytics Logs tab.

Use log to help pinpoint issues. যেমন:

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

Set user identifiers

To diagnose an issue, it's often helpful to know which of your users experienced a given crash. Crashlytics includes a way to anonymously identify users in your crash reports.

To add user IDs to your reports, assign each user a unique identifier in the form of an ID number, token, or hashed value:

FirebaseCrashlytics.instance.setUserIdentifier("12345");

If you ever need to clear a user identifier after you set it, reset the value to a blank string. Clearing a user identifier does not remove existing Crashlytics records. If you need to delete records associated with a user ID, contact Firebase support .

Get breadcrumb logs

Breadcrumb logs give you a better understanding of the interactions that a user had with your app leading up to a crash, non-fatal, or ANR event. These logs can be helpful when trying to reproduce and debug an issue.

Breadcrumb logs are powered by Google Analytics, so to get breadcrumb logs, you need to enable Google Analytics for your Firebase project and add the Firebase SDK for Google Analytics to your app. Once these requirements are met, breadcrumb logs are automatically included with an event's data within the Logs tab when you view the details of an issue.

The Analytics SDK automatically logs the screen_view event which enables the breadcrumb logs to show a list of screens viewed before the crash, non-fatal, or ANR event. A screen_view breadcrumb log contains a firebase_screen_class parameter.

Breadcrumb logs are also populated with any custom events that you manually log within the user's session, including the event's parameter data. This data can help show a series of user actions leading up to a crash, non-fatal, or ANR event.

Note that you can control the collection and use of Google Analytics data , which includes the data that populates breadcrumb logs.

Enable opt-in reporting

By default, Crashlytics automatically collects crash reports for all your app's users. To give users more control over the data they send, you can enable opt-in reporting by disabling automatic reporting and only sending data to Crashlytics when you choose to in your code:

  1. Turn off automatic collection natively:

    Apple platforms

    Add a new key to your Info.plist file:

    • Key: FirebaseCrashlyticsCollectionEnabled
    • মান: false

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

    In the application block of your AndroidManifest.xml file, add a meta-data tag to turn off automatic collection:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Enable collection for select users by calling the Crashlytics data collection override at runtime.

    The override value persists across launches of your app so Crashlytics can automatically collect reports. To opt out of automatic crash reporting, pass false as the override value. When set to false , the new value does not apply until the next run of the app.

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

Manage Crash Insights data

Crash Insights helps you resolve issues by comparing your anonymized stack traces to traces from other Firebase apps and letting you know if your issue is part of a larger trend. For many issues, Crash Insights even provides resources to help you debug the crash.

Crash Insights uses aggregated crash data to identify common stability trends. If you'd prefer not to share your app's data, you can opt-out of Crash Insights from the Crash Insights menu at the top of your Crashlytics issue list in the Firebase console .