Mencatat ID Respons Iklan dengan Firebase Crashlytics

Firebase Crashlytics adalah solusi pelaporan error yang ringan dan bekerja secara realtime untuk memudahkan Anda mengelola masalah stabilitas di aplikasi. Crashlytics menghemat waktu pemecahan masalah dengan mengelompokkan error secara cerdas dan menandai situasi yang terjadi.

Panduan ini menjelaskan cara mengintegrasikan Crashlytics ke dalam project Android Studio sehingga Anda dapat mencatat ID respons iklan ke dalam log. Kemudian, saat memecahkan masalah error di aplikasi, Anda dapat mencari ID respons iklan dan menggunakan Pusat Peninjauan Iklan di Ad Manager untuk menemukan dan memblokir iklan.

Langkah 1: Tambahkan Firebase ke aplikasi Android

  1. Jika ingin mencoba logging dengan Firebase dari aplikasi yang bersih, Anda dapat mendownload atau meng-clone contoh Google Mobile Ads SDK untuk repositori Android di GitHub. Panduan ini secara khusus menggunakan Contoh Banner Contoh Banner.

    Jika sudah memiliki aplikasi, Anda dapat melanjutkan ke langkah lain dengan nama paket aplikasi. Langkah yang sama juga dapat diterapkan ke contoh lain dalam repositori dengan adaptasi kecil.

  2. Untuk menggunakan Firebase Crashlytics, Anda harus membuat project Firebase dan menambahkan aplikasi Anda ke project tersebut. Buat project Firebase jika Anda belum melakukannya. Pastikan untuk mendaftarkan aplikasi Anda ke aplikasi.

    1. Di halaman Crashlytics di Firebase console, klik Siapkan Crashlytics.

    2. Di layar yang muncul, klik No > Siapkan aplikasi Firebase baru.

  3. Di build.gradle, tambahkan dependensi untuk Google Analytics, Fabric, dan 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 the Google Mobile Ads SDK
        implementation 'com.google.android.gms:play-services-ads:22.4.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:18.4.1'
    }
    

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.3.15'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
    
  4. Build dan jalankan aplikasi Anda untuk memastikan Crashlytics dikonfigurasi dengan benar. Setelah berhasil, Anda akan dapat mengakses dasbor Crashlytics.

(Opsional): Uji Penyiapan Anda

Dengan Menambahkan tombol error Anda dapat memaksa error untuk menyebabkan error aplikasi setiap kali tombol ditekan.

Berikut adalah contoh yang menunjukkan cara menambahkan tombol error dalam metode onCreate() Activity:

MainActivity (kutipan)

Java

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

Di Android Studio, build dan jalankan aplikasi Anda di emulator atau perangkat yang terhubung. Setelah aplikasi dimuat, Anda dapat mengklik tombol Crash. Luncurkan ulang aplikasi dari perangkat atau Android Studio agar log error dapat diupload ke Crashlyics.

Langkah 2: Catat ID respons iklan

Jika Anda memuat beberapa iklan dan menampilkannya pada waktu yang berbeda, sebaiknya catat setiap ID respons iklan ke dalam log dengan kunci yang terpisah. Misalnya, panduan ini menggunakan contoh yang hanya memiliki satu iklan banner. Oleh karena itu, kami mencatat ID respons iklan sebagai kunci banner_ad_response_id dalam cuplikan berikut. Anda dapat membuat beberapa key-value pair kustom di Firebase Crashlytics untuk berbagai jenis iklan dan peristiwa iklan (lihat AdListener untuk siklus proses iklan). Buka Menyesuaikan laporan error Firebase Crashlytics untuk mengetahui informasi selengkapnya mengenai logging kustom.

Tambahkan kode berikut ke MyActivity.java Anda. Pada dasarnya, peristiwa ini menggunakan fungsi FirebaseCrashlytics.setCustomKey() dalam fungsi callback onAdLoaded() untuk memastikan bahwa iklan telah dimuat sebelum mencoba memanggil getResponseInfo().

Java

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

Selamat! Anda akan melihat banner_ad_response_id terbaru di bagian utama sesi error di dasbor Crashlytics Anda. Perhatikan bahwa beberapa kunci mungkin memerlukan waktu hingga satu jam untuk terlihat di dasbor Anda.