Firebase Crashlytics گزارشگر خرابی سبک و همزمان است که مدیریت مشکلات پایداری در برنامهتان را برایتان آسان میکند. Crashlytics با گروهبندی هوشمندانه خرابیها و برجسته کردن شرایطی که منجر به آنها میشود، در زمان عیبیابی شما صرفهجویی میکند.
این راهنما نحوه ادغام کردن Crashlytics را در پروژه «استودیو Android» شما توضیح میدهد تا بتوانید شناسههای پاسخ آگهی را ثبت کنید. بعداً، وقتی درحال عیبیابی خرابیهای برنامهتان هستید، میتوانید شناسه پاسخ آگهی را جستجو کنید و از «مرکز مرور آگهی» در Ad Manager برای پیدا کردن و مسدود کردن آگهیها استفاده کنید.
مرحله ۱: افزودن Firebase به برنامه Android
اگر میخواهید از برنامه پاکی با Firebase وارد سیستم شوید، میتوانید Google Mobile Ads SDK (Legacy) نمونه برای Android را در مخزن در GitHub بارگیری یا شبیهسازی کنید. این راهنما بهطور خاص از نمونه برنمایشی استفاده میکند.
اگر ازقبل برنامه دارید، باید بتوانید با نام بسته برنامهتان به مراحل دیگر بروید. همین مراحل را میتوان با اندکی تغییر برای مثالهای دیگر در مخزن نیز اعمال کرد.
برای استفاده از Firebase Crashlytics، باید پروژه Firebase ایجاد کنید و برنامهتان را به آن اضافه کنید. اگر قبلاً این کار را نکردهاید، پروژه Firebase ایجاد کنید. حتماً برنامه خود را در آن ثبت کنید.
در صفحه Crashlytics در کنسول Firebase، روی راهاندازی Crashlytics کلیک کنید.
در صفحهای که ظاهر میشود، روی نه > راهاندازی برنامه Firebase جدید کلیک کنید.

در build.gradle، وابستگیهای Google Analytics، Fabric، و Crashlytics را اضافه کنید.
app/build.gradle
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Add the Fabric plugin apply plugin: 'io.fabric' dependencies { // ... // Add Google Mobile Ads SDK (Legacy) implementation 'com.google.android.gms:play-services-ads:25.5.0' // Add the Firebase Crashlytics dependency. implementation 'com.google.firebase:firebase-crashlytics:21.0.0' }
project/build.gradle
buildscript { repositories { // ... // Add Google's Maven repository. google() } dependencies { // ... classpath 'com.google.gms:google-services:4.5.0' // Add the Fabric Crashlytics plugin. classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.8' } } allprojects { // ... repositories { // Check that Google's Maven repository is included (if not, add it). google() // ... } }برنامهتان را بسازید و اجرا کنید تا مطمئن شوید Crashlytics بهدرستی پیکربندی شده است. پساز موفقیتآمیز بودن، میتوانید به داشبورد Crashlytics دسترسی پیدا کنید.

(اختیاری): «راهاندازی» خود را آزمایش کنید
با افزودن دکمه خرابی میتوانید با هر بار فشار دادن دکمه، خرابی برنامه را اجباری کنید.
در اینجا نمونهای نشان داده شده است که نحوه افزودن دکمه خرابی در روش onCreate() از
Activity را نشان میدهد:
MainActivity (گزیده)
جاوا
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in // values/strings.xml. adView = findViewById(R.id.ad_view); // Start loading the ad in the background. adView.loadAd(new AdManagerAdRequest.Builder().build()); // Add a crash button. Button crashButton = new Button(this); crashButton.setText("Crash!"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); }
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in // values/strings.xml. adView = findViewById(R.id.ad_view) // Start loading the ad in the background. adView.loadAd(AdManagerAdRequest.Builder().build()) // Add a crash button. val crashButton = Button(this) crashButton.text = "Crash!" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) }
در Android Studio، برنامه را در شبیهساز یا دستگاه متصل بسازید و اجرا کنید. پساز بار شدن برنامه، میتوانید روی دکمه خرابی کلیک کنید. برنامه را از دستگاه یا «استودیو Android» مجدداً راهاندازی کنید تا گزارش خرابی در Crashlyics بارگذاری شود.
مرحله ۲: شناسه پاسخ آگهی را ثبت کنید
اگر چندین آگهی را بار میکنید و آنها را در زمانهای مختلف نشان میدهید، بهتر است
شناسه پاسخ هر آگهی را با کلید جداگانهای ثبت کنید. برای مثال، این راهنما از
نمونهای استفاده میکند که فقط یک آگهی برنمایی دارد. بنابراین، شناسه پاسخ آگهی را بهعنوان کلید banner_ad_response_id در تکهکد زیر ثبت میکنیم. درواقع میتوانید
چندین جفت کلید / مقدار سفارشی در Firebase Crashlytics برای انواع مختلف آگهی
و رویدادهای آگهی ایجاد کنید (برای
چرخه عمر آگهی، به
AdListener مراجعه کنید). برای اطلاعات بیشتر درباره گزارشگیری سفارشی، به سفارشیسازی گزارشهای خرابی Firebase Crashlytics مراجعه کنید.
کد زیر را به MyActivity.java اضافه کنید. اساساً، از تابع
FirebaseCrashlytics.setCustomKey()
در تابع برگشتی onAdLoaded() استفاده میکند تا مطمئن شود آگهی قبلاز تلاش برای فراخوانی getResponseInfo() بارگیری شده است.
جاوا
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in // values/strings.xml. adView = findViewById(R.id.ad_view); adView.setAdListener(new AdListener() { @Override public void onAdLoaded() { String adResponseId = adView.getResponseInfo().getResponseId(); FirebaseCrashlytics.getInstance().setCustomKey( "banner_ad_response_id", adResponseId); } }); // Start loading the ad in the background. adView.loadAd(new AdManagerAdRequest.Builder().build()); // Add a crash button. Button crashButton = new Button(this); crashButton.setText("Crash!"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); }
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in // values/strings.xml. adView = findViewById(R.id.ad_view) adView.adListener = object : AdListener() { override fun onAdLoaded() { mAdView.responseInfo?.responseId?.let { adResponseId -> FirebaseCrashlytics.getInstance().setCustomKey( "banner_ad_response_id", adResponseId) } } } // Start loading the ad in the background. adView.loadAd(AdManagerAdRequest.Builder().build()) // Add a crash button. val crashButton = Button(this) crashButton.text = "Crash!" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) }
تبریک! اکنون جدیدترین banner_ad_response_id
را در بخش کلیدی جلسههای خرابی در داشبورد Crashlytics خود خواهید دید. توجه داشته باشید که
ممکن است تا یک ساعت طول بکشد تا برخیاز کلیدها در داشبوردتان نمایان شوند.
