Rejestrowanie identyfikatora reakcji na reklamę za pomocą Firebase 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 pozwala zaoszczędzić czas na rozwiązywanie problemów, ponieważ inteligentnie grupowanie awarii i wyróżnia okoliczności, które do nich prowadzą.

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

Krok 1. Dodaj Firebase do aplikacji na Androida

  1. Jeśli chcesz spróbować logowania za pomocą Firebase w czystej aplikacji, możesz pobrać lub sklonować przykłady pakietu SDK Google Ads na Androida z repozytorium na GitHubie. W tym przewodniku korzystamy z przykładu banera.

    Jeśli masz już aplikację, możesz przejść do dalszych czynności, podając nazwę jej pakietu. Te same czynności możesz też wykonać w przypadku innych przykładów w repozytorium, stosując drobne zmiany.

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

    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 dotyczące 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 the Google Mobile Ads SDK
        implementation 'com.google.android.gms:play-services-ads:23.6.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:19.4.0'
    }

    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.3'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
  4. Kompiluj i uruchamiaj aplikację, aby sprawdzić, czy Crashlytics jest prawidłowo skonfigurowana. 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 pokazujący, jak dodać przycisk awarii w metodzie onCreate() klasy Activity:

MainActivity (wycinek)

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

W Android Studio skompiluj i uruchom aplikację w emulatorze lub na połączonym urządzeniu. Po załadowaniu aplikacji możesz kliknąć przycisk Uruchom. Uruchom ponownie aplikację z urządzenia lub z Android Studio, aby plik dziennika awarii został przesłany do Crashlytics.

Krok 2. Zapisz identyfikator odpowiedzi na reklamę

Jeśli wczytujesz wiele reklam i wyświetlasz je w różnych momentach, warto zarejestrować identyfikator odpowiedzi reklamy za pomocą osobnego klucza. W tym przewodniku przykład zawiera tylko 1 baner reklamowy. Dlatego w tym fragmencie kodu zliczamy identyfikator odpowiedzi reklamy jako klucz banner_ad_response_id. W Firebase Crashlytics możesz tworzyć wiele par niestandardowych kluczy i wartości dla różnych typów reklam oraz zdarzeń reklamowych (patrz AdListener w cyklu życia reklamy). Więcej informacji o niestandardowym rejestrowaniu znajdziesz w artykule [GA4] Dostosowywanie raportów o awariach w Firebase Crashlytics.

Dodaj do pliku MyActivity.java ten kod: W podstawie używa on funkcji FirebaseCrashlytics.setCustomKey() w funkcji wywołania onAdLoaded(), aby mieć pewność, że reklama została załadowana, zanim spróbuje wywołać funkcję getResponseInfo().

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

Gratulacje! Najnowsze banner_ad_response_id znajdziesz teraz w sekcji kluczowych sesji awarii na panelu Crashlytics. Pamiętaj, że niektóre klucze mogą być widoczne w panelu dopiero po upływie godziny.