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 dzięki inteligentnemu grupowaniu awarii i wskazywaniu 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 aplikacji, możesz sprawdzić identyfikator odpowiedzi reklamy i użyć Centrum oceny reklam na koncie 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 pliku, który zawiera przykładowy baner.
Jeśli masz już aplikację, możesz przejść do dalszych czynności z nazwą pakietu tej aplikacji. 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.5.0' // Add the Firebase Crashlytics dependency. implementation 'com.google.firebase:firebase-crashlytics:19.2.1' }
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.2' } } 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
Dodanie przycisku wywołującego awarię pozwala wymusić awarię aplikacji po każdym naciśnięciu przycisku.
Oto przykład pokazujący, jak dodać przycisk awarii w metodzie onCreate()
klasy Activity
:
MainActivity (wycinek)
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)) }
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 sporządzić raport o zawieszeniu i przesłać go 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 rejestrujemy 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 sekcji Cykl ż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 zwrotnego onAdLoaded()
, aby mieć pewność, że reklama została załadowana, zanim spróbuje wywołać funkcję 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 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)) }
Gratulacje! Najnowsze banner_ad_response_id
zobaczysz w sekcji kluczowych sesji awarii na panelu Crashlytics. Pamiętaj, że niektóre klucze mogą być widoczne w panelu dopiero po upływie godziny.