ثبت شناسه پاسخ آگهی با Firebase Crashlytics

پلتفرم مورد نظر: اندروید، iOS و یونیتی

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

این راهنما نحوه ادغام Crashlytics در پروژه اندروید استودیو شما را شرح می‌دهد تا بتوانید شناسه‌های پاسخ به تبلیغات را ثبت کنید. بعداً، هنگامی که در برنامه خود خرابی‌ها را عیب‌یابی می‌کنید، می‌توانید شناسه پاسخ به تبلیغات را جستجو کرده و از مرکز بررسی تبلیغات در Ad Manager برای یافتن و مسدود کردن تبلیغات استفاده کنید.

مرحله 1: اضافه کردن Firebase به یک برنامه اندروید

  1. اگر می‌خواهید از یک برنامه‌ی ساده، لاگ‌گیری با فایربیس را امتحان کنید، می‌توانید نمونه‌های SDK تبلیغات موبایلی گوگل را برای مخزن اندروید در گیت‌هاب دانلود یا کلون کنید. این راهنما به‌طور خاص از مثال بنر استفاده می‌کند.

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

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

    1. در صفحه Crashlytics کنسول Firebase، روی Set up Crashlytics کلیک کنید.

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

  3. در build.gradle خود، وابستگی‌های Google Analytics، Fabric و Crashlytics را اضافه کنید.

    برنامه/ساخت.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
        implementation 'com.google.android.gms:play-services-ads:24.8.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:20.0.3'
    }

    پروژه/ساخت.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.4.4'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.6'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
  4. برنامه خود را بسازید و اجرا کنید تا مطمئن شوید که Crashlytics به درستی پیکربندی شده است. پس از موفقیت، می‌توانید به داشبورد Crashlytics دسترسی پیدا کنید.

(اختیاری): تنظیمات خود را آزمایش کنید

با اضافه کردن یک دکمه‌ی کرش، می‌توانید با هر بار فشار دادن دکمه، باعث کرش شدن برنامه شوید.

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

فعالیت اصلی (گزیده)

جاوا

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

کاتلین

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

در اندروید استودیو، برنامه خود را روی یک شبیه‌ساز یا یک دستگاه متصل بسازید و اجرا کنید. پس از بارگذاری برنامه، می‌توانید روی دکمه Crash کلیک کنید. برنامه را از دستگاه یا اندروید استودیو مجدداً اجرا کنید تا گزارش خرابی در 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));
}

کاتلین

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