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
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.
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.
Na stronie Crashlytics w konsoli Firebase kliknij Skonfiguruj Crashlytics.
Na wyświetlonym ekranie kliknij Nie > Skonfiguruj nową aplikację Firebase.
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() // ... } }
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)
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()
.
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.