Logowanie identyfikatora reakcji na reklamę w Crashlytics

Firebase Crashlytics to lekkie narzędzie do raportowania awarii w czasie rzeczywistym, które ułatwia zarządzanie problemami ze stabilnością aplikacji. Crashlytics oszczędza czas potrzebny na rozwiązywanie problemów, inteligentnie grupując awarie i wyświetlając okoliczności, które do nich doprowadziły.

Z tego przewodnika dowiesz się, jak zintegrować Crashlytics z projektem Android Studio, aby rejestrować identyfikatory reakcji na reklamy. Później, gdy będziesz rozwiązywać problemy z awariami w aplikacji, możesz wyszukać identyfikator reakcji na reklamę i użyć Centrum oceny reklam w Ad Managerze, aby znaleźć i zablokować reklamy.

Krok 1. Dodaj Firebase do aplikacji na Androida

  1. Jeśli chcesz wypróbować logowanie za pomocą Firebase w nowej aplikacji, możesz pobrać lub sklonować Google Mobile Ads SDK (Legacy)przykłady na Androidaz repozytorium wGitHubie. W tym przewodniku używamy przykładowego banera.

    Jeśli masz już aplikację, możesz przejść do innych kroków, podając nazwę pakietu aplikacji. Te same kroki można też zastosować do innych przykładów w repozytorium, wprowadzając niewielkie zmiany.

  2. Aby korzystać z Firebase Crashlytics, musisz utworzyć projekt Firebase i dodać do niego aplikację. Jeśli nie masz jeszcze projektu Firebase, utwórz go. Pamiętaj, aby zarejestrować w nim aplikację.

    1. Na stronie Crashlytics w konsoli Firebase kliknij Skonfiguruj Crashlytics.

    2. Na wyświetlonym ekranie kliknij Nie > Skonfiguruj nową aplikację Firebase.

  3. W pliku build.gradle dodaj zależności dla Google Analytics, Fabric i 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 Google Mobile Ads SDK (Legacy)
        implementation 'com.google.android.gms:play-services-ads:25.4.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:20.0.6'
    }

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.5.0'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.7'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
  4. Skompiluj i uruchom aplikację, aby sprawdzić, czy Crashlytics jest prawidłowo skonfigurowany. Gdy to zrobisz, będziesz mieć dostęp do panelu Crashlytics.

(Opcjonalnie) Testowanie konfiguracji

Dodając przycisk awarii, możesz wymusić awarię aplikacji przy każdym naciśnięciu przycisku.

Oto przykład dodawania przycisku awaryjnego w metodzie onCreate() klasy Activity:

MainActivity (fragment)

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

W Android Studio skompiluj i uruchom aplikację w emulatorze lub na połączonym urządzeniu. Po wczytaniu aplikacji możesz kliknąć przycisk Crash (Awaria). Uruchom ponownie aplikację na urządzeniu lub w Android Studio, aby dziennik awarii został przesłany do Crashlytics.

Krok 2. Zaloguj identyfikator reakcji na reklamę

Jeśli wczytujesz kilka reklam i wyświetlasz je w różnych momentach, warto rejestrować identyfikator odpowiedzi każdej reklamy za pomocą osobnego klucza. Na przykład w tym przewodniku używamy przykładu, który zawiera tylko 1 baner reklamowy. Dlatego w poniższym fragmencie kodu rejestrujemy identyfikator odpowiedzi na reklamę jako klucz banner_ad_response_id. W Firebase Crashlytics możesz utworzyć wiele niestandardowych par klucz / wartość dla różnych typów reklam i zdarzeń związanych z reklamami (patrz AdListener w przypadku cyklu życia reklamy). Więcej informacji o rejestrowaniu niestandardowym znajdziesz w artykule Dostosowywanie raportów o awariach w Firebase Crashlytics.

Dodaj do pliku MyActivity.java ten kod: W zasadzie używa funkcji FirebaseCrashlytics.setCustomKey() w funkcji wywołania zwrotnego onAdLoaded(), aby mieć pewność, że reklama została załadowana przed próbą wywołania funkcji 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))
}

Gratulacje! W sekcji kluczowych informacji o sesjach z błędami na panelu Crashlytics możesz teraz zobaczyć najnowsze dane banner_ad_response_id. Pamiętaj, że niektóre klucze mogą być widoczne w panelu dopiero po godzinie.