گزارش‌های خرابی Firebase Crashlytics خود را سفارشی کنید


در داشبورد Crashlytics ، می‌توانید روی یک مشکل کلیک کنید و گزارش رویداد مفصلی دریافت کنید. می‌توانید آن گزارش‌ها را سفارشی کنید تا به شما کمک کند بهتر بفهمید در برنامه‌تان چه اتفاقی می‌افتد و شرایط پیرامون رویدادهای گزارش‌شده به Crashlytics .

  • اگر برنامه شما از Firebase SDK برای Google Analytics استفاده می‌کند، به‌طور خودکار گزارش‌های خرده نان را دریافت کنید. این گزارش‌ها به شما امکان مشاهده اقدامات کاربر را می‌دهند که منجر به رویداد جمع‌آوری‌شده Crashlytics در برنامه شما می‌شود.

  • گزارش خودکار خرابی را خاموش کنید و گزارش انتخابی را برای کاربران خود فعال کنید . توجه داشته باشید که به‌طور پیش‌فرض، Crashlytics به‌طور خودکار گزارش‌های خرابی را برای همه کاربران برنامه شما جمع‌آوری می‌کند.

کلیدهای سفارشی را اضافه کنید

کلیدهای سفارشی به شما کمک می کنند تا وضعیت خاص برنامه خود را که منجر به خرابی می شود، دریافت کنید. می‌توانید جفت‌های کلید/مقدار دلخواه را با گزارش‌های خرابی خود مرتبط کنید، سپس از کلیدهای سفارشی برای جستجو و فیلتر کردن گزارش‌های خرابی در کنسول Firebase استفاده کنید.

  • در داشبورد Crashlytics ، می‌توانید مسائلی را جستجو کنید که با یک کلید سفارشی مطابقت دارند.

  • هنگامی که در حال بررسی یک مشکل خاص در کنسول هستید، می‌توانید کلیدهای سفارشی مرتبط برای هر رویداد (زیربرگه کلیدها ) را مشاهده کنید و حتی رویدادها را با کلیدهای سفارشی فیلتر کنید (منوی فیلتر در بالای صفحه).

برای تنظیم جفت کلید/مقدار از روش نمونه setCustomKey استفاده کنید. توجه داشته باشید که setCustomKey برای پارامتر value برای پذیرش هر آرگومان ابتدایی یا String بارگذاری می شود. در اینجا چند نمونه آورده شده است:

KotlinJava
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
}
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 */);

همچنین می‌توانید مقدار یک کلید موجود را با فراخوانی کلید و تنظیم آن روی مقدار دیگری تغییر دهید. به عنوان مثال:

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

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

با ارسال نمونه ای از CustomKeysAndValues ​​به متد نمونه setCustomKeys ، جفت های کلید/مقدار را به صورت انبوه اضافه کنید:

KotlinJava

برای 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)
}
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 گزارش‌ها را با داده‌های خرابی شما مرتبط می‌کند و آنها را در صفحه Crashlytics کنسول Firebase در زیر برگه Logs نمایش می‌دهد.

log برای کمک به شناسایی دقیق مشکلات استفاده کنید. به عنوان مثال:

KotlinJava
Firebase.crashlytics.log("message")
FirebaseCrashlytics.getInstance().log("message");

تعیین شناسه های کاربر

برای تشخیص یک مشکل، اغلب مفید است که بدانید کدام یک از کاربران شما یک خرابی را تجربه کرده اند. Crashlytics شامل راهی برای شناسایی ناشناس کاربران در گزارش‌های خرابی شما است.

برای افزودن شناسه‌های کاربری به گزارش‌های خود، به هر کاربر یک شناسه منحصربه‌فرد به شکل شماره شناسه، نشانه یا مقدار هش اختصاص دهید:

KotlinJava
Firebase.crashlytics.setUserId("user123456789")
FirebaseCrashlytics.getInstance().setUserId("user123456789");

اگر بعد از تنظیم یک شناسه کاربری نیاز به پاک کردن آن داشتید، مقدار آن را به یک رشته خالی بازنشانی کنید. پاک کردن شناسه کاربر، سوابق موجود Crashlytics را حذف نمی کند. اگر نیاز به حذف سوابق مرتبط با شناسه کاربری دارید، با پشتیبانی Firebase تماس بگیرید .

(فقط Android NDK) متادیتا را به گزارش‌های خرابی NDK اضافه کنید

می‌توانید به صورت اختیاری هدر crashlytics.h را در کد C++ خود قرار دهید تا متادیتا را به گزارش‌های خرابی NDK اضافه کنید، مانند کلیدهای سفارشی ، گزارش‌های ثبت سفارشی ، شناسه‌های کاربر . همه این گزینه ها در این صفحه در بالا توضیح داده شده است.

crashlytics.h به عنوان یک کتابخانه C++ فقط سرصفحه در مخزن Firebase Android SDK GitHub در دسترس است.

برای دستورالعمل‌های مربوط به استفاده از APIهای NDK C++، نظرات موجود در فایل هدر را بخوانید.

شامل گزارش های GWP-ASan برای رفع اشکال مشکلات خرابی حافظه

Crashlytics می تواند با جمع آوری گزارش های GWP-ASan به شما در رفع اشکال خرابی های ناشی از خطاهای حافظه بومی کمک کند. این خطاهای مربوط به حافظه می تواند با خراب شدن حافظه در برنامه شما مرتبط باشد، که علت اصلی آسیب پذیری های امنیتی برنامه است.

  • وقتی روی جزئیات یک مشکل در داشبورد Crashlytics کلیک می‌کنید، می‌توانید این داده‌ها را در برگه جدید «ردیابی پشته حافظه» مشاهده کنید.

  • همچنین می‌توانید از سیگنال و فیلتر جدید «گزارش GWP-ASan» برای مشاهده سریع همه مشکلات مربوط به این داده‌ها استفاده کنید.

اگر صریحاً GWP-ASan را در برنامه خود فعال کنید و از Crashlytics SDK برای NDK v18.3.6+ ( Firebase BoM v31.3.0+) استفاده کنید، می توانید گزارش های حافظه GWP-ASan را دریافت کنید. می‌توانید راه‌اندازی GWP-ASan خود را با استفاده از نمونه کد بومی در مستندات Android آزمایش کنید.

استثناهای غیر کشنده را گزارش کنید

علاوه بر گزارش خودکار خرابی‌های برنامه، Crashlytics به شما امکان می‌دهد استثناهای غیرمرگبار را ضبط کنید و دفعه بعد که برنامه‌تان راه‌اندازی شد، آنها را برای شما ارسال می‌کند.

از روش recordException برای ثبت استثناهای غیر کشنده در بلوک‌های catch برنامه خود استفاده کنید. به عنوان مثال:

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

علاوه بر این، شما همچنین می توانید کلیدهای سفارشی را به استثنای غیر کشنده خاص وصل کنید. به عنوان مثال:

KotlinJava
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
}
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 ظاهر می شوند. خلاصه شماره شامل تمام اطلاعات وضعیتی است که معمولاً از خرابی‌ها دریافت می‌کنید، به همراه خرابی‌ها بر اساس نسخه Android و دستگاه سخت‌افزار.

Crashlytics استثناها را در یک رشته پس‌زمینه اختصاصی پردازش می‌کند تا تأثیر عملکرد بر برنامه شما را به حداقل برساند. برای کاهش ترافیک شبکه کاربران، Crashlytics استثناهای ثبت شده را دسته‌بندی می‌کند و دفعه بعد که برنامه راه‌اندازی می‌شود، آنها را ارسال می‌کند.

سیاهههای مربوط به پودر سوخاری را دریافت کنید

گزارش‌های Breadcrumb به شما درک بهتری از تعاملاتی که کاربر با برنامه شما منجر به خرابی، رویداد غیرکشنده یا ANR می‌کند، می‌دهد. این گزارش‌ها می‌توانند هنگام تلاش برای بازتولید و رفع اشکال یک مشکل مفید باشند.

گزارش‌های Breadcrumb توسط Google Analytics ارائه می‌شوند، بنابراین برای دریافت گزارش‌های breadcrumb، باید Google Analytics را برای پروژه Firebase خود فعال کنید و Firebase SDK برای Google Analytics را به برنامه خود اضافه کنید . هنگامی که این الزامات برآورده شد، هنگام مشاهده جزئیات یک مشکل، گزارش‌های خرده نان به طور خودکار با داده‌های رویداد در برگه گزارش‌ها گنجانده می‌شوند.

Analytics SDK به‌طور خودکار رویداد screen_view ثبت می‌کند که به گزارش‌های خرده نان امکان می‌دهد فهرستی از صفحه‌های مشاهده شده قبل از خرابی، رویداد غیرمرگبار یا ANR را نشان دهند. یک سیاهه پودر screen_view حاوی یک پارامتر firebase_screen_class است.

گزارش‌های Breadcrumb همچنین با هر رویداد سفارشی که به صورت دستی در جلسه کاربر ثبت می‌کنید، پر می‌شوند، از جمله داده‌های پارامتر رویداد. این داده‌ها می‌توانند به نمایش مجموعه‌ای از اقدامات کاربر منجر به خرابی، رویداد غیرکشنده یا ANR کمک کنند.

توجه داشته باشید که می‌توانید جمع‌آوری و استفاده از داده‌های Google Analytics را کنترل کنید ، که شامل داده‌هایی است که گزارش‌های خرده نان را پر می‌کند.

فعال کردن گزارش انتخابی

به طور پیش فرض، Crashlytics به طور خودکار گزارش های خرابی را برای همه کاربران برنامه شما جمع آوری می کند. برای اینکه کاربران کنترل بیشتری بر روی داده‌هایی که ارسال می‌کنند، داشته باشید، می‌توانید با غیرفعال کردن گزارش‌دهی خودکار و ارسال داده‌ها به Crashlytics فقط در صورت انتخاب در کد، گزارش انتخاب را فعال کنید:

  1. در بلوک application فایل AndroidManifest.xml خود، یک تگ meta-data اضافه کنید تا مجموعه خودکار خاموش شود:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. با فراخوانی لغو مجموعه داده های Crashlytics در زمان اجرا، مجموعه را برای کاربران منتخب فعال کنید. مقدار لغو در سراسر راه اندازی برنامه شما باقی می ماند بنابراین Crashlytics می تواند به طور خودکار گزارش ها را جمع آوری کند. برای انصراف از گزارش خودکار خرابی، مقدار false به عنوان مقدار نادیده بگیرید. وقتی روی false تنظیم می شود، مقدار جدید تا اجرای بعدی برنامه اعمال نمی شود.

    KotlinJava
    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

داده‌های Crash Insights را مدیریت کنید

Crash Insights به شما کمک می‌کند با مقایسه ردیابی‌های پشته ناشناس خود با ردیابی‌های سایر برنامه‌های Firebase، مشکلات را حل کنید و به شما اطلاع می‌دهد که آیا مشکل شما بخشی از یک روند بزرگ‌تر است. برای بسیاری از مسائل، Crash Insights حتی منابعی را برای کمک به شما در رفع اشکال خرابی فراهم می کند.

Crash Insights از داده‌های خرابی انبوه برای شناسایی روندهای رایج پایداری استفاده می‌کند. اگر ترجیح می‌دهید داده‌های برنامه خود را به اشتراک نگذارید، می‌توانید از منوی Crash Insights در بالای فهرست مشکلات Crashlytics در کنسول Firebase ، از Crash Insights انصراف دهید.

،


در داشبورد Crashlytics ، می توانید روی یک مسئله کلیک کرده و گزارش رویداد مفصلی را دریافت کنید. شما می توانید این گزارش ها را سفارشی کنید تا به شما در درک بهتر آنچه در برنامه خود می افتد و شرایط مربوط به وقایع گزارش شده به Crashlytics .

  • اگر برنامه شما از Firebase SDK برای Google Analytics استفاده می کند ، به طور خودکار سیاهههای مربوط به خرده فروش را دریافت کنید. این سیاهههای مربوط به اقدامات کاربر منتهی به یک رویداد جمع آوری شده Crashlytics در برنامه شما ، به شما امکان پذیر است.

  • گزارش تصادف خودکار را خاموش کرده و گزارش دهی را برای کاربران خود فعال کنید . توجه داشته باشید که ، به طور پیش فرض ، Crashlytics به طور خودکار گزارش های خرابی را برای همه کاربران برنامه شما جمع می کند.

کلیدهای سفارشی اضافه کنید

کلیدهای سفارشی به شما کمک می کنند وضعیت خاص برنامه خود را که منجر به تصادف می شود ، بدست آورید. شما می توانید جفت های کلید/مقدار دلخواه را با گزارش های Crash خود مرتبط کنید ، سپس از کلیدهای سفارشی برای جستجو و فیلتر گزارش های خرابی در کنسول Firebase استفاده کنید.

  • در داشبورد Crashlytics ، می توانید مواردی را جستجو کنید که با یک کلید سفارشی مطابقت داشته باشد.

  • هنگامی که در حال بررسی یک مسئله خاص در کنسول هستید ، می توانید کلیدهای سفارشی مرتبط را برای هر رویداد ( Keys Subtab) مشاهده کنید و حتی رویدادها را با کلیدهای سفارشی فیلتر کنید (منوی فیلتر در بالای صفحه).

برای تنظیم جفت های کلید/مقدار از روش setCustomKey استفاده کنید. توجه داشته باشید که setCustomKey برای پارامتر value بیش از حد بارگذاری شده است تا هرگونه آرگومان اولیه یا String را بپذیرد. در اینجا چند نمونه آورده شده است:

KotlinJava
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
}
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 */);

همچنین می توانید با فراخوانی کلید و تنظیم آن بر روی یک مقدار متفاوت ، مقدار یک کلید موجود را تغییر دهید. به عنوان مثال:

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

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

با انتقال نمونه ای از CustomKeysAndValues ​​به روش setCustomKeys ، جفت های کلید/مقدار را به صورت عمده اضافه کنید:

KotlinJava

برای 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)
}
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 سیاههها را با داده های خرابی شما مرتبط می کند و آنها را در صفحه Crashlytics کنسول Firebase ، در زیر برگه Logs نمایش می دهد.

log برای کمک به مشکلات مشخص استفاده کنید. به عنوان مثال:

KotlinJava
Firebase.crashlytics.log("message")
FirebaseCrashlytics.getInstance().log("message");

شناسه های کاربر را تنظیم کنید

برای تشخیص یک مسئله ، اغلب مفید است که بدانید کدام یک از کاربران شما یک تصادف خاص را تجربه کرده اند. Crashlytics شامل راهی برای شناسایی ناشناس کاربران در گزارش های تصادف شما است.

برای افزودن شناسه های کاربر به گزارش های خود ، به هر کاربر یک شناسه منحصر به فرد را در قالب شماره شناسه ، نشانه یا مقدار هش داده اختصاص دهید:

KotlinJava
Firebase.crashlytics.setUserId("user123456789")
FirebaseCrashlytics.getInstance().setUserId("user123456789");

اگر بعد از تنظیم آن نیاز به پاک کردن شناسه کاربر دارید ، مقدار را در یک رشته خالی تنظیم کنید. پاکسازی شناسه کاربر سوابق موجود Crashlytics موجود را حذف نمی کند. اگر نیاز به حذف سوابق مرتبط با شناسه کاربر دارید ، با پشتیبانی Firebase تماس بگیرید .

(فقط Android NDK) به گزارش های خرابی NDK ابرداده اضافه کنید

شما می توانید به صورت اختیاری عنوان crashlytics.h را در کد C ++ خود درج کنید تا فوق داده به گزارش های خرابی NDK مانند کلیدهای سفارشی ، سیاهههای سفارشی ، شناسه های کاربر اضافه کنید. همه این گزینه ها در این صفحه در بالا شرح داده شده است.

crashlytics.h به عنوان یک کتابخانه فقط هدر C ++ در مخزن Firebase Android SDK Github در دسترس است.

برای دستورالعمل استفاده از API های NDK C ++ ، نظرات را در پرونده عنوان بخوانید.

شامل گزارش های GWP-ASAN برای اشکال زدایی در مورد فساد حافظه

Crashlytics می تواند با جمع آوری گزارش های GWP-ASAN ، تصادفات ناشی از خطاهای حافظه بومی را به شما کمک کند. این خطاهای مرتبط با حافظه می تواند با فساد حافظه در برنامه شما همراه باشد ، که عامل اصلی آسیب پذیری های امنیتی برنامه است.

  • وقتی می توانید جزئیات مسئله را در داشبورد Crashlytics کلیک کنید ، می توانید این داده ها را در یک برگه جدید "Treas Traces" مشاهده کنید.

  • همچنین می توانید از سیگنال جدید "GWP-ASAN گزارش" استفاده کنید و فیلتر کنید تا به سرعت همه مسائل را با این داده ها مشاهده کنید.

اگر صریحاً GWP-ASAN را در برنامه خود فعال کرده و از Crashlytics SDK برای NDK V18.3.6+ ( Firebase BoM V31.3.0+) استفاده کنید ، می توانید گزارش های حافظه GWP-Asan را دریافت کنید. می توانید با استفاده از کد بومی مثال در اسناد Android ، تنظیم GWP-ASAN خود را آزمایش کنید.

استثنائات غیر کشنده را گزارش کنید

Crashlytics علاوه بر گزارش خودکار تصادفات برنامه خود ، به شما امکان می دهد استثنائات غیر کشنده را ضبط کنید و دفعه بعد که برنامه شما راه اندازی می شود ، آنها را برای شما ارسال می کند.

از روش recordException برای ضبط استثنائات غیر کشنده در بلوک های catch برنامه خود استفاده کنید. به عنوان مثال:

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

علاوه بر این ، شما همچنین می توانید کلیدهای سفارشی را به استثناء خاص غیر کشنده وصل کنید. به عنوان مثال:

KotlinJava
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
}
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 ظاهر می شوند. خلاصه شماره شامل تمام اطلاعات دولتی است که به طور معمول از خرابی دریافت می کنید ، به همراه خرابی توسط نسخه Android و دستگاه سخت افزاری.

Crashlytics استثنائات مربوط به یک موضوع پس زمینه اختصاصی را برای به حداقل رساندن تأثیر عملکرد در برنامه شما انجام می دهد. برای کاهش ترافیک شبکه کاربران ، دسته های Crashlytics استثنائات را با هم وارد کرده و دفعه بعد که برنامه راه اندازی می شود ، آنها را ارسال می کند.

سیاهههای مربوط به خرده فروش را دریافت کنید

سیاهههای مربوط به نان های نان درک بهتر از تعامل هایی که کاربر با برنامه شما داشت منجر به یک رویداد تصادف ، غیر کشنده یا ANR می شود. این سیاهههای مربوط می توانند هنگام تلاش برای تولید مثل و اشکال زدایی یک مسئله مفید باشند.

سیاهههای مربوط به Breadcrumb از Google Analytics استفاده می شوند ، بنابراین برای به دست آوردن سیاهههای مربوط به نان ، باید Google Analytics را برای پروژه Firebase خود فعال کرده و SDK Firebase را برای Google Analytics به برنامه خود اضافه کنید . پس از برآورده شدن این الزامات ، هنگام مشاهده جزئیات یک مسئله ، سیاهههای مربوط به نان به طور خودکار با داده های یک رویداد در برگه سیاههها گنجانده می شوند.

Analytics SDK به طور خودکار رویداد screen_view را که باعث می شود سیاهههای مربوط به نان آتشی را قادر می سازد لیستی از صفحه نمایش های مشاهده شده قبل از تصادف ، غیر کشنده یا رویداد ANR را نشان دهد. یک ورود به سیستم Breadcrumb screen_view شامل یک پارامتر firebase_screen_class است.

سیاهههای مربوط به نان های نان نیز با هر رویدادی سفارشی که به صورت دستی در جلسه کاربر وارد می شوید ، از جمله داده های پارامتر رویداد ، جمع شده است. این داده ها می تواند به نمایش یک سری اقدامات کاربر منتهی به یک رویداد خرابی ، غیر کشنده یا ANR کمک کند.

توجه داشته باشید که می توانید مجموعه و استفاده از داده های Google Analytics را کنترل کنید ، که شامل داده هایی است که شامل سیاهههای مربوط به نان های نان است.

Enable opt-in reporting

به طور پیش فرض ، Crashlytics به طور خودکار گزارش های خرابی را برای همه کاربران برنامه شما جمع می کند. برای کنترل بیشتر کاربران بر داده های ارسال شده ، می توانید با غیرفعال کردن گزارش خودکار و فقط ارسال داده ها به Crashlytics هنگام انتخاب کد خود ، گزارش دهی را فعال کنید:

  1. در بلوک application پرونده AndroidManifest.xml خود ، یک برچسب meta-data را اضافه کنید تا مجموعه اتوماتیک را خاموش کنید:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. با فراخوانی مجموعه داده های Crashlytics در زمان اجرا ، مجموعه را برای کاربران انتخاب کنید. مقدار Override در راه اندازی برنامه شما ادامه دارد ، بنابراین Crashlytics می تواند به طور خودکار گزارش ها را جمع آوری کند. برای امتناع از گزارش تصادف اتوماتیک ، به عنوان مقدار false گرفته شود. هنگام تنظیم false ، مقدار جدید تا اجرای بعدی برنامه اعمال نمی شود.

    KotlinJava
    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

داده های بینش Crash را مدیریت کنید

Crash Insights به شما کمک می کند تا با مقایسه آثار پشته ناشناس خود در مورد اثری از سایر برنامه های Firebase ، مسائل را حل کنید و به شما اطلاع می دهد که آیا مسئله شما بخشی از یک روند بزرگتر است یا خیر. برای بسیاری از مسائل ، Crash Insights حتی منابعی را برای کمک به اشکال زدایی در مورد تصادف فراهم می کند.

Crash Insights از داده های سقوط جمع شده برای شناسایی روند پایداری مشترک استفاده می کند. اگر ترجیح می دهید داده های برنامه خود را به اشتراک نگذارید ، می توانید از منوی Crash Insights در بالای لیست شماره Crashlytics خود در کنسول Firebase خودداری کنید.

،


In the Crashlytics dashboard, you can click into an issue and get a detailed event report. You can customize those reports to help you better understand what's happening in your app and the circumstances around events reported to Crashlytics .

  • Automatically get breadcrumb logs if your app uses the Firebase SDK for Google Analytics . These logs give you visibility into user actions leading up to a Crashlytics -collected event in your app.

  • Turn off automatic crash reporting and enable opt-in reporting for your users. Note that, by default, Crashlytics automatically collects crash reports for all your app's users.

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. Note that setCustomKey is overloaded for the value parameter to accept any primitive or String argument. در اینجا چند نمونه آورده شده است:

KotlinJava
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
}
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 */);

You can also modify the value of an existing key by calling the key and setting it to a different value. به عنوان مثال:

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

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

Add key/value pairs in bulk by passing an instance of CustomKeysAndValues to the setCustomKeys instance method:

KotlinJava

For Kotlin, the existing functionality is simpler than using the CustomKeysAndValues builder.

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

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 Crashlytics page of the Firebase console , under the Logs tab.

Use log to help pinpoint issues. به عنوان مثال:

KotlinJava
Firebase.crashlytics.log("message")
FirebaseCrashlytics.getInstance().log("message");

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:

KotlinJava
Firebase.crashlytics.setUserId("user123456789")
FirebaseCrashlytics.getInstance().setUserId("user123456789");

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 .

(Android NDK only) Add metadata to NDK crash reports

You can optionally include the crashlytics.h header in your C++ code to add metadata to NDK crash reports, such as custom keys , custom logs , user identifiers . All these options are described on this page above.

crashlytics.h is available as a header-only C++ library in the Firebase Android SDK GitHub Repository .

Read the comments in the header file for instructions on using the NDK C++ APIs.

Include GWP-ASan reports to debug memory corruption issues

Crashlytics can help you debug crashes caused by native memory errors by collecting GWP-ASan reports. These memory-related errors can be associated with memory corruption within your app, which is the leading cause of app security vulnerabilities.

  • You can view this data in a new "Memory stack traces" tab when you click into an issue's details in the Crashlytics dashboard .

  • You can also use the new "GWP-ASan report" signal and filter to quickly view all issues with this data.

You can get GWP-ASan memory reports if you explicitly enable GWP-ASan in your app and use the Crashlytics SDK for NDK v18.3.6+ ( Firebase BoM v31.3.0+). You can test your GWP-ASan setup using the example native code in the Android documentation .

Report non-fatal exceptions

In addition to automatically reporting your app's crashes, Crashlytics lets you record non-fatal exceptions and sends them to you the next time your app launches.

Use the recordException method to record non-fatal exceptions in your app's catch blocks. به عنوان مثال:

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

Additionally, you can also attach custom keys to the specific non-fatal exception. به عنوان مثال:

KotlinJava
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
}
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
}

All recorded 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 Android 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 batches logged exceptions together and sends them the next time the app launches.

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. 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.

    KotlinJava
    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
    FirebaseCrashlytics.getInstance().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 .