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

Firebase Crashlytics, uygulamanızdaki kararlılık sorunlarını yönetmenizi kolaylaştıran basit ve gerçek zamanlı bir kilitlenme raporudur. Crashlytics, kilitlenmeleri akıllıca gruplandırarak ve bu kilitlenmelere yol açan koşulları vurgulayarak sorun giderme süresini kısaltır.

Bu kılavuzda, reklam yanıtı kimliklerini günlüğe kaydetmek 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 Ad Manager 'daki Reklam İnceleme Merkezi'ni kullanabilirsiniz.

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

  1. Temiz bir uygulamadan Firebase ile giriş yapmayı denemek istiyorsanız GitHub'da Android repository için Google Mobile Ads SDK'sı örneklerini indirebilir veya klonlayabilirsiniz. Bu rehberde özellikle Banner Örneği.

    Zaten bir uygulamanız varsa uygulamanızın paket adını kullanarak diğer adımlara geçebilirsiniz. Aynı adımlar, küçük düzenlemelerle depodaki diğer örneklere de uygulanabilir.

  2. Firebase Crashlytics'i kullanabilmek 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ı kaydettiğinizden emin olun.

    1. Firebase konsolunun Crashlytics sayfasında Crashlytics'i kur'u tıklayın.

    2. Açılan ekranda Hayır > Yeni Firebase uygulaması oluştur'u tıklayın.

  3. build.gradle dosyanıza Google Analytics, Fabric ve Crashlytics'i bağımlı olarak ekleyin.

    uygulama/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'
    }
    

    proje/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. Crashlytics'in doğru yapılandırıldığından emin olmak için uygulamanızı oluşturup çalıştırın. İşlem başarılı olduğunda Crashlytics kontrol paneline erişebilirsiniz.

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

Çökme düğmesi ekleyerek her düğmeye basarak uygulama kilitlenmesine neden olan bir kilitlenmeyi zorlayabilirsiniz.

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

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

Android Studio'da uygulamanızı bir emülatörde veya bağlı bir cihazda derleyip çalıştırın. Uygulama yüklendikten sonra Crash düğmesini tıklayabilirsiniz. Kilitlenme günlüğünün Crashlyics'e yüklenmesi için uygulamayı cihazdan veya Android Studio'dan yeniden başlatın.

2. Adım: Reklam yanıtı kimliğini kaydedin

Birden fazla reklam yükleyip farklı zamanlarda gösterirseniz her bir reklam yanıtı kimliğini ayrı bir anahtarla günlüğe kaydetmek iyi bir fikirdir. Örneğin, bu kılavuzda yalnızca bir banner reklam içeren bir örnek kullanılır. Bu nedenle, reklam yanıt kimliğini aşağıdaki snippet'te banner_ad_response_id anahtarı olarak kaydederiz. 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 adresine bakın). Özel günlük kaydı hakkında daha fazla bilgi edinmek için Firebase Crashlytics kilitlenme raporlarınızı özelleştirme sayfasını ziyaret edin.

MyActivity.java kodunuza aşağıdaki kodu ekleyin. Esasen, getResponseInfo() çağrısına başlamadan önce reklamın yüklendiğinden emin olmak 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 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))
}

Tebrikler! En yeni banner_ad_response_id bilgilerini artık Crashlytics kontrol panelinizdeki kilitlenme oturumlarının önemli bölümünde göreceksiniz. Bazı anahtarların kontrol panelinizde görünür hale gelmesinin bir saat sürebileceğini unutmayın.