Registrazione dell'ID risposta annuncio con Firebase Crashlytics

Seleziona la piattaforma: Android iOS Unity

Firebase Crashlytics è uno strumento di segnalazione 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 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 annuncio. In un secondo momento, quando risolvi i problemi relativi agli arresti anomali nella 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 l'accesso con Firebase da un'app pulita, puoi scaricare o clonare gli esempi dell'SDK Google Mobile Ads per Android dal repository su GitHub. Questa guida utilizza in modo specifico l'esempio di banner.

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

  2. 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.

    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: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()
    
           // ...
        }
    }
  4. Crea ed esegui l'app per assicurarti che Crashlytics sia configurato correttamente. Una volta completata l'operazione, potrai accedere alla dashboard di Crashlytics.

(Facoltativo): testa la configurazione

Se aggiungi un pulsante di arresto anomalo puoi 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 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 su Crashlytics.

Passaggio 2: registra l'ID risposta annuncio

Se carichi più annunci e li mostri in momenti diversi, è consigliabile registrare ogni ID risposta 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 nel seguente snippet. Infatti, puoi creare più coppie chiave / valore personalizzate in Firebase Crashlytics per diversi tipi di annunci ed eventi pubblicitari (vedi AdListener per il 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 l'banner_ad_response_id più recente nella sezione principale delle sessioni di arresto anomalo nella dashboard di Crashlytics. Tieni presente che potrebbe essere necessaria fino a un'ora prima che alcune chiavi diventino visibili nella dashboard.