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

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


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

  • কাস্টম কী, কাস্টম লগ মেসেজ এবং ব্যবহারকারীর শনাক্তকারী লগ করতে আপনার অ্যাপকে ইনস্ট্রুমেন্ট করুন।

  • Crashlytics-এ ব্যতিক্রম সম্পর্কে অভিযোগ জানান।

  • আপনার অ্যাপ Google Analytics-এর জন্য Firebase SDK ব্যবহার করলে, অটোমেটিক ব্রেডক্রাম্ব লগ পান। এইসব লগ আপনাকে আপনার অ্যাপে Crashlytics-এর সংগ্রহ করা ইভেন্ট পর্যন্ত ব্যবহারকারীর অ্যাকশন সম্পর্কে দৃশ্যমানতা দেয়।

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

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

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

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

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

কী-ভ্যালু পেয়ার সেট করতে setCustomKey ইনস্ট্যান্স মেথড ব্যবহার করুন। মনে রাখবেন যে value প্যারামিটারের জন্য setCustomKey ওভারলোড করা হয়েছে যাতে যেকোনও প্রিমিটিভ বা String আর্গুমেন্ট গ্রহণ করা যায়। কয়েকটি উদাহরণ দেখুন:

Kotlin

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true) // boolean value
    key("my_double_key", 1.0) // double value
    key("my_float_key", 1.0f) // float value
    key("my_int_key", 1) // int value
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

এছাড়াও, আপনি কোনও বিদ্যমান কী কল করে এবং এটিকে অন্য কোনও ভ্যালুতে সেট করে সেটির ভ্যালু পরিবর্তন করতে পারেন। যেমন:

Kotlin

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

CustomKeysAndValues-এর একটি ইনস্ট্যান্স পাস করে বাল্কে কী-ভ্যালু পেয়ার যোগ করুন setCustomKeys ইনস্ট্যান্স পদ্ধতি:

Kotlin

Kotlin-এর ক্ষেত্রে, আগে থেকে থাকা কার্যকারিতা, CustomKeysAndValues বিল্ডার ব্যবহার করার চেয়ে অনেক সহজ।

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

কাস্টম লগ মেসেজ যোগ করা

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

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

Kotlin

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

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

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

আপনার রিপোর্টে ব্যবহারকারীর আইডি যোগ করতে, প্রতিটি ব্যবহারকারীকে আইডি নম্বর, টোকেন বা হ্যাশ করা ভ্যালুর ফর্ম্যাটে একটি অনন্য শনাক্তকারী অ্যাসাইন করুন:

Kotlin

Firebase.crashlytics.setUserId("user123456789")

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

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

(শুধুমাত্র Android NDK) NDK ক্র্যাশ রিপোর্টে মেটাডেটা যোগ করা

NDK ক্র্যাশ রিপোর্টে মেটাডেটা যোগ করতে, যেমন কাস্টম কী, কাস্টম লগ, ব্যবহারকারী শনাক্তকারী, আপনি ঐচ্ছিকভাবে C++ কোডে crashlytics.h হেডার যোগ করতে পারেন। এইসব বিকল্পের বিবরণ উপরে এই পৃষ্ঠায় দেওয়া আছে।

crashlytics.h Firebase Android SDK GitHub Repository-তে শুধুমাত্র হেডার হিসেবে উপলভ্য C++ লাইব্রেরি।

NDK C++ API ব্যবহার করার নির্দেশাবলীর জন্য হেডার ফাইলে কমেন্ট পড়ুন।

মেমরি করাপশন সংক্রান্ত সমস্যার ডিবাগ করতে GWP-ASan রিপোর্ট অন্তর্ভুক্ত করা

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

Firebase কনসোলের DevOps ও এনগেজমেন্ট > Crashlytics ড্যাশবোর্ডে আপনি এই ডেটা দিয়ে নিম্নলিখিত কাজগুলি করতে পারবেন:

  • আপনি কোনও সমস্যার বিবরণে ক্লিক করলে, নতুন "মেমরি স্ট্যাক ট্রেস" ট্যাবে এই ডেটা দেখতে পাবেন।

  • এই ডেটা সম্পর্কিত সব সমস্যা দ্রুত দেখতে, আপনি নতুন "GWP-ASan রিপোর্ট" সিগন্যাল ও ফিল্টার ব্যবহার করতে পারবেন।

আপনি GWP-ASan মেমরি রিপোর্ট পেতে পারেন যদি আপনার অ্যাপে GWP-ASan স্পষ্টভাবে চালু করেন এবং Crashlytics NDK v18.3.6+ (Firebase BoM v31.3.0+) ভার্সনের SDK ব্যবহার করেন। আপনি Android ডকুমেন্টেশনে দেওয়া নেটিভ কোডের উদাহরণ ব্যবহার করে আপনার GWP-ASan সেট-আপ পরীক্ষা করতে পারেন।

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

আপনার অ্যাপ ক্র্যাশ করার ঘটনা অটোমেটিক রিপোর্ট করা ছাড়াও, Crashlytics আপনাকে গুরুতর নয় এমন ব্যতিক্রম রেকর্ড করতে এবং পরের বার আপনার অ্যাপ লঞ্চ করার সময় সেগুলি আপনাকে পাঠাতে দেয়।

আপনার অ্যাপের catch ব্লকে নন-ফ্যাটাল ব্যতিক্রম রেকর্ড করতে recordException পদ্ধতি ব্যবহার করুন। যেমন:

Kotlin

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

এছাড়াও, আপনি নির্দিষ্ট নন-ফ্যাটাল এক্সেপশনের সাথে কাস্টম কী অ্যাটাচ করতে পারবেন। যেমন:

Kotlin

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e) {
        key("string key", "string value")
        key("boolean key", true)
        key("float key", Float.MAX_VALUE)
    }
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
            .putString("string key", "string value")
            .putBoolean("boolean key", true)
            .putFloat("float key", Float.MAX_VALUE)
            .build();
    FirebaseCrashlytics.getInstance().recordException(e, keysAndValues);
    // handle your exception here
}

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

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

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

ক্র্যাশ, নন-ফ্যাটাল বা 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. আপনার AndroidManifest.xml ফাইলের application ব্লকে, অটোমেটিক সংগ্রহ করা বন্ধ করতে একটি meta-data ট্যাগ যোগ করুন:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. রানটাইমে Crashlytics data collection ওভাররাইড কল করে বেছে নেওয়া ব্যবহারকারীদের জন্য সংগ্রহ করার সুবিধা চালু করুন। আপনার অ্যাপের পরবর্তী সবকটি লঞ্চ জুড়ে ওভাররাইড ভ্যালু বজায় থাকে, তাই Crashlytics সেই ব্যবহারকারীর জন্য রিপোর্ট অটোমেটিক সংগ্রহ করতে পারে।

    Kotlin

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

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

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

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

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

পরবর্তী ধাপ