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, ponieważ inteligentnie grupuje awarie i wyświetla okoliczności, które do nich doprowadziły.
Z tego przewodnika dowiesz się, jak zintegrować Crashlytics z projektem Android Studio, aby rejestrować identyfikatory odpowiedzi na reklamy. Później, gdy będziesz rozwiązywać problemy z awariami w aplikacji, możesz wyszukać 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 wypróbować logowanie za pomocą Firebase w czystej aplikacji, możesz pobrać lub sklonować repozytorium z przykładami pakietu SDK Google Mobile Ads na Androida w GitHubie. W tym przewodniku używamy konkretnie 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.
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ę.
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 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:24.5.0' // Add the Firebase Crashlytics dependency. implementation 'com.google.firebase:firebase-crashlytics:20.0.1' }
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.6' } } allprojects { // ... repositories { // Check that Google's Maven repository is included (if not, add it). google() // ... } }
Skompiluj i uruchom aplikację, aby sprawdzić, czy Crashlytics jest prawidłowo skonfigurowany. Po zakończeniu tego procesu uzyskasz dostęp do panelu Crashlytics.
(Opcjonalnie) Testowanie konfiguracji
Dodając przycisk awarii, możesz wymusić awarię aplikacji przy każdym naciśnięciu przycisku.
Ten przykład pokazuje, jak dodać przycisk awaryjny w metodzie onCreate()
elementu 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 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 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. Zapisz identyfikator odpowiedzi 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 tym fragmencie kodu rejestrujemy identyfikator odpowiedzi reklamy 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 ten kod do pliku MyActivity.java
. 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 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! W sekcji kluczowych sesji awarii w panelu Crashlytics zobaczysz teraz najnowsze banner_ad_response_id
. Pamiętaj, że niektóre klucze mogą pojawić się w panelu dopiero po godzinie.