Firebase Crashlytics ile reklam yanıtı kimliğini günlüğe kaydetme

Platform seçin: Android iOS Unity

Firebase Crashlytics, uygulamanızdaki kararlılık sorunlarını kolayca yönetmenizi sağlayan hafif ve anlık bir kilitlenme raporu aracıdır. Crashlytics, kilitlenmeleri akıllıca gruplandırarak ve kilitlenmelere yol açan koşulları vurgulayarak sorun giderme süresini kısaltır.

Bu kılavuzda, reklam yanıtı kimliklerini kaydedebilmeniz için Crashlytics'i Android Studio projenize nasıl entegre edeceğiniz açıklanmaktadır. Daha sonra, uygulamanızdaki kilitlenmelerle ilgili sorunları giderirken reklam yanıtı kimliğini arayabilir ve reklamları bulup engellemek için AdMob'daki Reklam İnceleme Merkezi'ni kullanabilirsiniz.

1. adım: Firebase'i bir Android uygulamasına ekleyin

  1. Temiz bir uygulamadan Firebase ile oturum açmayı denemek isterseniz GitHub'daki Google Mobile Ads SDK örnekleri için Android depoyu indirebilir veya klonlayabilirsiniz. Bu kılavuzda özellikle Banner Örneği kullanılmaktadır.

    Halihazırda bir uygulamanız varsa uygulamanızın paket adıyla diğer adımlara geçebilirsiniz. Aynı adımlar, küçük uyarlamalarla birlikte depodaki diğer örnekler için de geçerlidir.

  2. Firebase Crashlytics'i kullanmak için bir Firebase projesi oluşturmanız ve uygulamanızı bu projeye eklemeniz gerekir. Henüz oluşturmadıysanız bir Firebase projesi oluşturun. Uygulamanızı bu hizmete kaydettiğinizden emin olun.

    1. Firebase konsolunun Crashlytics sayfasında Crashlytics'i ayarla'yı tıklayın.

    2. Görüntülenen ekranda Hayır > Yeni bir Firebase uygulaması oluştur'u tıklayın.

  3. build.gradle dosyanıza Google Analytics, Fabric ve Crashlytics bağımlılıklarını ekleyin.

    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:24.5.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:20.0.1'
    }

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.4.3'
    
            // 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'in doğru şekilde yapılandırıldığından emin olmak için uygulamanızı oluşturup çalıştırın. İşlem başarıyla tamamlandıktan sonra Crashlytics kontrol paneline erişebilirsiniz.

(İsteğe bağlı): Kurulumunuzu test etme

Kilitlenme düğmesi ekleyerek her düğmeye basıldığında uygulamanın kilitlenmesini sağlayabilirsiniz.

Aşağıda, Activity sınıfının onCreate() yöntemine kilitlenme düğmesinin nasıl ekleneceğini gösteren bir örnek verilmiştir:

MainActivity (alıntı)

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 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'da uygulamanızı bir emülatörde veya bağlı bir cihazda oluşturup çalıştırın. Uygulama yüklendikten sonra Kilitlenme düğmesini tıklayabilirsiniz. Kilitlenme günlüğünün Crashlytics'e yüklenmesi için uygulamayı cihazdan veya Android Studio'dan yeniden başlatın.

2. adım: Reklam yanıtı kimliğini günlüğe kaydedin

Birden fazla reklam yükleyip bunları farklı zamanlarda gösteriyorsanız her reklam yanıtı kimliğini ayrı bir anahtarla günlüğe kaydetmeniz önerilir. Örneğin, bu kılavuzda yalnızca bir banner reklam içeren bir örnek kullanılıyor. Bu nedenle, reklam yanıtı kimliğini aşağıdaki snippet'te banner_ad_response_id anahtarı olarak günlüğe kaydederiz. Gerçekten de farklı reklam türleri ve reklam etkinlikleri için Firebase Crashlytics'te birden fazla özel anahtar / değer çifti oluşturabilirsiniz (reklamın yaşam döngüsü için AdListener bölümüne bakın). Özel günlük kaydı hakkında daha fazla bilgi için Firebase Crashlytics kilitlenme raporlarınızı özelleştirme başlıklı makaleyi inceleyin.

MyActivity.java dosyasına aşağıdaki kodu ekleyin. Temel olarak, getResponseInfo() çağrılmaya çalışılmadan önce reklamın yüklendiğinden emin olmak için onAdLoaded() geri çağırma işlevinde FirebaseCrashlytics.setCustomKey() işlevini kullanır.

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

Tebrikler! Artık Crashlytics kontrol panelinizdeki kilitli oturumların önemli bölümünde en son banner_ad_response_id gösterilecek. Bazı anahtarların kontrol panelinizde görünmesinin bir saati bulabileceğini unutmayın.