ID risposta annuncio di logging con Firebase Crashlytics

Firebase Crashlytics è uno strumento di reporting degli arresti anomali leggero e in tempo reale che ti consente di gestire facilmente i problemi di stabilità della tua app. Crashlytics ti fa risparmiare tempo per la risoluzione dei problemi agrupando in modo intelligente gli arresti anomali ed evidenziando le circostanze che li hanno causati.

Questa guida descrive come integrare Crashlytics nel progetto Android Studio per poter registrare gli ID risposta all'annuncio. In un secondo momento, quando risolvi i problemi di arresto anomalo della tua app, puoi cercare l'ID risposta annuncio e utilizzare il Centro revisione annunci in AdMob per trovare e bloccare gli annunci.

Passaggio 1: aggiungi Firebase a un'applicazione Android

  1. Se vuoi provare ad accedere con Firebase da un'app pulita, puoi scaricare o clonare il repository di esempi dell'SDK Google Mobile Ads per Android su GitHub. Questa guida utilizza nello specifico il esempio di banner.

    Se hai già un'app, dovresti essere in grado di procedere con gli altri passaggi con il nome del pacchetto dell'app. Gli stessi passaggi possono essere applicati anche ad altri esempi nel repository con adattamenti minori.

  2. Per utilizzare Firebase Crashlytics, devi creare un progetto Firebase e aggiungere la tua app. Se non l'hai ancora fatto, crea un progetto Firebase. Assicurati di registrare la tua app.

    1. Nella pagina Crashlytics della Console Firebase, fai clic su Configura Crashlytics.

    2. Nella schermata visualizzata, fai clic su No > Configura una nuova app Firebase.

  3. In 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 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()
    
           // ...
        }
    }
    
  4. Compila ed esegui l'app per assicurarti che Crashlytics sia configurato correttamente. Al termine dell'operazione, potrai accedere alla dashboard di Crashlytics.

(Facoltativo) Testare la configurazione

Aggiungi un pulsante di arresto anomalo per forzare un arresto anomalo dell'app a ogni pressione del 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 un dispositivo connesso. Dopo aver caricato l'app, puoi fare clic sul pulsante Incidente. Riavviare l'app dal dispositivo o da Android Studio per il caricamento del log degli arresti anomali su Crashlytics.

Passaggio 2: registra l'ID risposta annuncio

Se carichi più annunci e li mostri in momenti diversi, ti consigliamo di registrare ogni ID risposta all'annuncio con una chiave separata. Ad esempio, questa guida utilizza un esempio che contiene un solo annuncio banner. Di conseguenza, nel seguente snippet registriamo l'ID risposta annuncio come chiave banner_ad_response_id. Infatti, puoi creare più coppie chiave / valore personalizzate in Firebase Crashlytics per diversi tipi di annunci e eventi correlati (consulta AdListener per informazioni sul ciclo di vita dell'annuncio). Per saperne di più sulla registrazione personalizzata, consulta Personalizzare i report sugli arresti anomali di Firebase Crashlytics.

Aggiungi il seguente codice a 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 delle sessioni di arresto anomalo della dashboard di Crashlytics. Tieni presente che per alcune chiavi potrebbe essere necessaria fino a un'ora prima che diventino visibili nella dashboard.