Anzeigenantwort-ID mit Firebase Crashlytics erfassen

Firebase Crashlytics ist ein schlankes Tool, das Abstürze in Echtzeit meldet und Ihnen hilft, Stabilitätsprobleme in Ihrer App zu beheben. Crashlytics spart Ihnen Zeit bei der Fehlerbehebung, da Abstürze intelligent gruppiert und die Umstände, die zu ihnen führen, hervorgehoben werden.

In dieser Anleitung wird beschrieben, wie Sie Crashlytics in Ihr Android Studio-Projekt einbinden, damit Sie Anzeigenantwort-IDs protokollieren können. Wenn Sie später Fehlerbehebungen für Abstürze in Ihrer App durchführen, können Sie die Anzeigenantwort-ID nachschlagen und das Überprüfungszentrum für Anzeigen in AdMob verwenden, um die Anzeigen zu finden und zu blockieren.

Schritt 1:Firebase zu einer Android-Anwendung hinzufügen

  1. Wenn Sie die Protokollierung mit Firebase in einer neuen App ausprobieren möchten, können Sie das Repository mit den Google Mobile Ads SDK-Beispielen für Android auf GitHub herunterladen oder klonen. In diesem Leitfaden wird speziell das Bannerbeispiel verwendet.

    Wenn Sie bereits eine App haben, sollten Sie mit dem Paketnamen Ihrer App mit den anderen Schritten fortfahren können. Die gleichen Schritte können mit geringfügigen Anpassungen auch auf andere Beispiele im Repository angewendet werden.

  2. Wenn Sie Firebase Crashlytics verwenden möchten, müssen Sie ein Firebase-Projekt erstellen und Ihre App hinzufügen. Erstellen Sie ein Firebase-Projekt, wenn nicht bereits geschehen. Registrieren Sie Ihre App für diese.

    1. Klicken Sie in der Firebase Console auf der Crashlytics-Seite auf Crashlytics einrichten.

    2. Klicken Sie auf dem angezeigten Bildschirm auf Nein > Neue Firebase-App einrichten.

  3. Fügen Sie in „build.gradle“ die Abhängigkeiten für Google Analytics, Fabric und Crashlytics hinzu.

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

    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.4'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
  4. Erstellen und führen Sie Ihre App aus, um sicherzustellen, dass Crashlytics richtig konfiguriert ist. Danach können Sie auf das Crashlytics-Dashboard zugreifen.

Optional: Einrichtung testen

Wenn Sie eine Absturztaste hinzufügen, können Sie einen Absturz erzwingen, indem Sie bei jedem Tastendruck einen App-Absturz verursachen.

Hier ist ein Beispiel, das zeigt, wie Sie in der Methode onCreate() eines Activity eine Absturztaste hinzufügen:

MainActivity (Auszug)

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

Erstellen Sie Ihre App in Android Studio und führen Sie sie auf einem Emulator oder einem verbundenen Gerät aus. Nachdem die App geladen wurde, können Sie auf die Schaltfläche Absturz klicken. Starte die App auf dem Gerät oder in Android Studio neu, damit das Absturzprotokoll in Crashlytics hochgeladen wird.

Schritt 2:Anzeigenantwort-ID protokollieren

Wenn Sie mehrere Anzeigen laden und zu unterschiedlichen Zeiten präsentieren, empfiehlt es sich, jede Anzeigenantwort-ID mit einem separaten Schlüssel zu protokollieren. In diesem Leitfaden wird beispielsweise ein Beispiel mit nur einer Banneranzeige verwendet. Daher protokollieren wir die Anzeigenantwort-ID als banner_ad_response_id-Schlüssel im folgenden Snippet. Sie können in Firebase Crashlytics mehrere benutzerdefinierte Schlüssel / Wert-Paare für verschiedene Anzeigentypen und Anzeigenereignisse erstellen (siehe AdListener für den Lebenszyklus von Anzeigen). Weitere Informationen zum benutzerdefinierten Logging finden Sie unter Absturzberichte in Firebase Crashlytics anpassen.

Fügen Sie Ihrer MyActivity.java den folgenden Code hinzu. Dabei wird die Funktion FirebaseCrashlytics.setCustomKey() in der Callback-Funktion onAdLoaded() verwendet, um sicherzustellen, dass die Anzeige geladen wurde, bevor getResponseInfo() aufgerufen wird.

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

Glückwunsch! Die neuesten banner_ad_response_id werden jetzt im Hauptbereich von Absturzsitzungen in Ihrem Crashlytics-Dashboard angezeigt. Es kann bis zu einer Stunde dauern, bis einige Schlüssel in Ihrem Dashboard angezeigt werden.