Enregistrer l'ID de réponse d'annonce avec Firebase Crashlytics

Firebase Crashlytics est un outil de signalement de plantages léger et en temps réel qui facilite la gestion des problèmes de stabilité de votre application. Il vous permet de regrouper les plantages et de mettre en évidence les circonstances qui y sont liées afin de gagner du temps.

Ce guide explique comment intégrer Crashlytics à votre projet Android Studio afin de pouvoir consigner les ID de réponse d'annonce. Ensuite, lorsque vous résoudrez les problèmes de plantage dans votre application, vous pourrez rechercher l'ID de réponse d'annonce et utiliser le centre de vérification des annonces dans AdMob pour rechercher et bloquer les annonces.

Étape 1:Ajoutez Firebase à une application Android

  1. Si vous souhaitez essayer de vous connecter avec Firebase à partir d'une application propre, vous pouvez télécharger ou cloner les exemples du dépôt du SDK Google Mobile Ads pour Android sur GitHub. Ce guide utilise spécifiquement l'exemple Bannière.

    Si vous disposez déjà d'une application, vous devriez pouvoir passer à d'autres étapes avec le nom de son package. Les mêmes étapes peuvent également être appliquées à d'autres exemples du dépôt avec des adaptations mineures.

  2. Pour utiliser Firebase Crashlytics, vous devez créer un projet Firebase et y ajouter votre application. Si ce n'est pas déjà fait, créez un projet Firebase. Veillez à enregistrer votre application.

    1. Sur la page Crashlytics de la console Firebase, cliquez sur Configurer Crashlytics.

    2. Sur l'écran qui s'affiche, cliquez sur Non > Configurer une nouvelle application Firebase.

  3. Dans votre build.gradle, ajoutez les dépendances pour Google Analytics, Fabric et 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'
    }
    

    projet/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. Créez et exécutez votre application pour vous assurer que Crashlytics est correctement configuré. Une fois l'opération terminée, vous pourrez accéder au tableau de bord Crashlytics.

(Facultatif) Tester la configuration

En ajoutant un bouton de plantage, vous pouvez forcer le plantage de l'application à chaque pression sur un bouton.

Voici un exemple qui montre comment ajouter un bouton de plantage dans la méthode onCreate() d'un élément Activity:

MainActivity (extrait)

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))
}

Dans Android Studio, créez et exécutez votre application sur un émulateur ou un appareil connecté. Une fois l'application chargée, vous pouvez cliquer sur le bouton Plantage. Relancez l'application depuis l'appareil ou Android Studio pour que le journal des plantages soit importé dans Crashlyics.

Étape 2:Consignez l'ID de réponse d'annonce

Si vous chargez plusieurs annonces et que vous les affichez à des moments différents, nous vous recommandons de consigner chaque ID de réponse d'annonce avec une clé distincte. Par exemple, ce guide utilise un exemple qui ne comporte qu'une seule bannière. Par conséquent, nous journalisons l'ID de réponse d'annonce en tant que clé banner_ad_response_id dans l'extrait de code suivant. En effet, vous pouvez créer plusieurs paires clé / valeur personnalisées dans Firebase Crashlytics pour différents types et événements d'annonces (consultez AdListener pour connaître le cycle de vie des annonces). Pour en savoir plus sur la journalisation personnalisée, consultez Personnaliser les rapports d'erreur Firebase Crashlytics.

Ajoutez le code suivant à MyActivity.java. Elle utilise la fonction FirebaseCrashlytics.setCustomKey() de la fonction de rappel onAdLoaded() pour s'assurer que l'annonce a été chargée avant d'essayer d'appeler 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))
}

Félicitations ! Le banner_ad_response_id le plus récent s'affiche désormais dans la section clé des sessions de plantage sur votre tableau de bord Crashlytics. Notez qu'une heure peut s'écouler avant que certaines clés ne soient visibles dans votre tableau de bord.