Firebase Crashlytics ile Reklam İsteği Kimliği Kaydetme

Firebase Crashlytics, uygulamanızdaki kararlılık sorunlarını yönetmenizi kolaylaştıran hafif ve gerçek zamanlı bir kilitlenme raporlama 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 günlüğe kaydedebilmeniz için Crashlytics'in Android Studio projenize nasıl entegre edileceği açıklanmaktadır. Daha sonra, uygulamanızdaki kilitlenmelerle ilgili sorunları giderirken reklam yanıtı kimliğini arayabilir ve reklamları bulmak ve engellemek için AdMob

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

  1. Firebase ile temiz bir uygulamadan günlük kaydetmeyi denemek istiyorsanız GitHub'daki Android için Google Mobil Reklamlar SDK'sı örnekleri deposunu indirebilir veya klonlayabilirsiniz. Bu rehberde özellikle Banner Örneği kullanılmaktadır.

    Uygulamanız varsa uygulamanızın paket adını kullanarak diğer adımlara geçebilirsiniz. Aynı adımlar, küçük uyarlamalarla birlikte depodaki diğer örneklere de uygulanabilir.

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

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.4.2'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2'
        }
    }
    
    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ı derleyip çalıştırın. İşlem başarıyla tamamlandığında 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 derleyip ç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 kaydetmek iyi bir fikirdir. Örneğin, bu kılavuzda yalnızca bir banner reklam içeren bir örnek kullanılmaktadır. Bu nedenle, reklam yanıtı kimliğini aşağıdaki snippet'te banner_ad_response_id anahtarı olarak günlüğe kaydederiz. Evet, Firebase Crashlytics'te farklı reklam türleri ve reklam etkinlikleri için 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 dosyanıza aşağıdaki kodu ekleyin. Temel olarak, getResponseInfo()'i çağırmaya çalışmadan önce reklamın yüklenmesini sağlamak için onAdLoaded() geri çağırma işlevindeki 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 bölümde en son banner_ad_response_id göreceksiniz. Bazı anahtarların kontrol panelinizde görünmesinin bir saati bulabileceğini unutmayın.