Firebase Crashlytics è uno strumento leggero per la generazione di report sugli arresti anomali in tempo reale che ti consente di gestire facilmente i problemi di stabilità della tua app. Crashlytics ti fa risparmiare tempo nella risoluzione dei problemi raggruppando in modo intelligente gli arresti anomali ed evidenziando le circostanze che li hanno causati.
Questa guida descrive come integrare Crashlytics nel tuo progetto Android Studio in modo da poter registrare gli ID risposta degli annunci. In un secondo momento, quando risolvi i problemi relativi agli arresti anomali della tua app, puoi cercare al volo l'ID risposta annuncio e utilizzare il Centro revisione annunci in AdMob per trovare e bloccare gli annunci.
Passaggio 1: aggiungi Firebase a un'app per Android
Se vuoi provare a eseguire il logging con Firebase da un'app pulita, puoi scaricare o clonare il repository di esempi di Google Mobile Ads SDK (Legacy) per Android su GitHub. Questa guida utilizza nello specifico l'esempio di banner.
Se hai già un'app, dovresti essere in grado di procedere con gli altri passaggi con il nome del pacchetto della tua app. Gli stessi passaggi possono essere applicati anche ad altri esempi nel repository con piccoli adattamenti.
Per utilizzare Firebase Crashlytics, devi creare un progetto Firebase e aggiungervi la tua app. Se non l'hai ancora fatto, crea un progetto Firebase. Assicurati di registrare la tua app.
Nella pagina Crashlytics della console Firebase, fai clic su Configura Crashlytics.
Nella schermata visualizzata, fai clic su No > Configura una nuova app Firebase.

Nel file build.gradle, aggiungi le dipendenze per Google Analytics, Fabric e 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.5.0' // Add the Firebase Crashlytics dependency. implementation 'com.google.firebase:firebase-crashlytics:21.0.1' }
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.8' } } allprojects { // ... repositories { // Check that Google's Maven repository is included (if not, add it). google() // ... } }Crea ed esegui la tua app per assicurarti che Crashlytics sia configurato correttamente. Una volta completata la procedura, potrai accedere alla dashboard di Crashlytics.

(Facoltativo) Testa la configurazione
Aggiungendo un pulsante di arresto anomalo, puoi forzare un arresto anomalo dell'app ogni volta che premi il pulsante.
Ecco un esempio che mostra come aggiungere un pulsante di arresto anomalo nel metodo onCreate() di un
Activity:
MainActivity (estratto)
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)) }
In Android Studio, crea ed esegui l'app su un emulatore o su un dispositivo connesso. Dopo il caricamento dell'app, puoi fare clic sul pulsante Crash. Riavvia l'app dal dispositivo o da Android Studio per caricare il log degli arresti anomali su Crashlytics.
Passaggio 2: registra l'ID risposta annuncio
Se carichi più annunci e li mostri in momenti diversi, è consigliabile registrare ogni ID risposta all'annuncio con una chiave separata. Ad esempio, questa guida utilizza un esempio con un solo annuncio banner. Pertanto, registriamo l'ID risposta annuncio come chiave banner_ad_response_id nello snippet seguente. In effetti, puoi creare più coppie chiave-valore personalizzate in Firebase Crashlytics per diversi tipi di annunci ed eventi di annunci (consulta AdListener per il ciclo di vita degli annunci). Per saperne di più sul logging personalizzato, consulta Personalizza i report sugli arresti anomali di Firebase Crashlytics.
Aggiungi il seguente codice al tuo MyActivity.java. In sostanza, utilizza la funzione FirebaseCrashlytics.setCustomKey() nella funzione di callback onAdLoaded() per assicurarsi che l'annuncio sia stato caricato prima di tentare di chiamare 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)) }
Complimenti! Ora vedrai il banner_ad_response_id più recente nella sezione chiave delle sessioni con arresto anomalo nella dashboard di Crashlytics. Tieni presente che alcune chiavi potrebbero richiedere fino a un'ora per essere visibili nella dashboard.
