ID risposta annuncio di logging con Firebase Crashlytics

Firebase Crashlytics è un reporter sugli 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 raggruppando gli arresti anomali in modo intelligente ed evidenziando le circostanze che li causano.

Questa guida descrive come integrare Crashlytics nel progetto Android Studio in modo da poter registrare gli ID risposta annuncio. Successivamente, quando risolvi i problemi di arresto anomalo nella tua app, puoi cercare l'ID risposta di 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 a eseguire il logging con Firebase da un'app pulita, puoi scaricare o clonare gli esempi di SDK Google Mobile Ads per il repository Android su GitHub. Questa guida utilizza specificatamente l' esempio di banner.

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

  2. Per utilizzare Firebase Crashlytics, devi creare un progetto Firebase e aggiungervi l'app. Se non lo hai già 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. Nella 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:22.4.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:18.4.1'
    }
    

    progetto/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.3.15'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
    
  4. Crea ed esegui la tua app per assicurarti che Crashlytics sia configurato correttamente. Una volta completata l'operazione, potrai accedere alla dashboard di Crashlytics.

(Facoltativo) Testare la configurazione

Aggiungi un pulsante di arresto anomalo per forzare un arresto anomalo per l'app a ogni pressione del pulsante.

Ecco un esempio che mostra come aggiungere un pulsante di arresto anomalo nel metodo onCreate() di Activity:

Attività principale (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 la tua app su un emulatore o su un dispositivo connesso. Dopo il caricamento dell'app, puoi fare clic sul pulsante Arresto anomalo. Riavvia l'app dal dispositivo o da Android Studio per caricare il log degli arresti anomali in Crashlyics.

Passaggio 2: registra l'ID risposta annuncio

Se carichi più annunci e li pubblichi in momenti diversi, è consigliabile registrare ogni ID risposta dell'annuncio con una chiave separata. Ad esempio, questa guida utilizza un esempio che ha un solo annuncio banner. Pertanto, registriamo l'ID risposta annuncio come chiave banner_ad_response_id nel seguente snippet. Infatti, puoi creare più coppie chiave / valore personalizzate in Firebase Crashlytics per diversi tipi di annuncio ed eventi annuncio (vedi AdListener per il ciclo di vita dell'annuncio). Per saperne di più sul logging personalizzato, consulta Personalizzare 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 garantire 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 visualizzerai il banner_ad_response_id più recente nella sezione della chiave delle sessioni sugli arresti anomali nella dashboard di Crashlytics. Tieni presente che potrebbe essere necessaria fino a un'ora per rendere visibili alcune chiavi nella dashboard.