شناسه پاسخ آگهی را در Crashlytics ثبت کنید

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

این راهنما نحوه ادغام Crashlytics در پروژه «استودیو Android» را شرح می‌دهد تا بتوانید شناسه‌های پاسخ آگهی را ثبت کنید. بعداً، وقتی خرابی‌های برنامه‌تان را عیب‌یابی می‌کنید، می‌توانید شناسه پاسخ آگهی را جستجو کنید و از «مرکز بازبینی آگهی» در AdMob برای پیدا کردن و مسدود کردن آگهی‌ها استفاده کنید.

مرحله ۱: افزودن Firebase به برنامه Android

  1. اگر می‌خواهید ورود به سیستم با Firebase را از یک برنامه تمیز امتحان کنید، می‌توانید نمونه‌های Google Mobile Ads SDK (Legacy) برای Android را بارگیری یا شبیه‌سازی کنید مخزن در GitHub. این راهنما به‌طور خاص از نمونه برنما استفاده می‌کند.

    اگر ازقبل برنامه دارید، باید بتوانید با نام بسته برنامه‌تان به مراحل دیگر بروید. همین مراحل را می‌توان با تغییرات جزئی برای دیگر نمونه‌های موجود در مخزن نیز اعمال کرد.

  2. برای استفاده از Firebase Crashlytics، باید پروژه Firebase ایجاد کنید و برنامه‌تان را به آن اضافه کنید. اگر قبلاً پروژه Firebase ایجاد نکرده‌اید، این کار را انجام دهید. حتماً برنامه‌تان را در آن ثبت کنید.

    1. در صفحه Crashlytics در کنسول Firebase، روی راه‌اندازی Crashlytics کلیک کنید.

    2. در صفحه‌ای که نشان داده می‌شود، روی نه > راه‌اندازی برنامه Firebase جدید کلیک کنید.

  3. در 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.1'
    }

    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()
    
           // ...
        }
    }
  4. برنامه‌تان را بسازید و اجرا کنید تا مطمئن شوید Crashlytics به‌درستی پیکربندی شده است. پس‌از موفقیت، می‌توانید به داشبورد Crashlytics دسترسی پیدا کنید.

(اختیاری): آزمایش کردن راه‌اندازی

با افزودن دکمه خرابی می‌توانید با هر بار فشار دادن دکمه، خرابی اجباری برای ایجاد خرابی برنامه ایجاد کنید.

در اینجا نمونه‌ای آورده شده است که نحوه افزودن دکمه ازکارافتادن را در روش onCreate() Activity نشان می‌دهد:

MainActivity (excerpt)

جاوا

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 AdRequest.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(AdRequest.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 AdRequest.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(AdRequest.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 خود خواهید دید. توجه داشته باشید که ممکن است تا یک ساعت طول بکشد تا برخی‌از کلیدها در داشبوردتان نمایان شوند.