2 votes

Comment avoir un callback lorsqu'un crash se produit, en utilisant le SDK de Crashlytics ?

Contexte

Nous utilisons Crashlytics SDK pour gérer les pannes d'applications et obtenir les informations nécessaires à leur sujet.

Jusqu'à présent, les informations que le SDK a automatiquement recueillies étaient suffisantes

Le problème

J'aimerais ajouter plus d'informations pour chaque plantage, telles que : mémoire de tas disponible&total, pile d'activité,...

Le problème, c'est que je ne vois pas comment y parvenir.

Je sais que la façon dont le framework Android fonctionne avec les exceptions non gérées est assez simple (utilisation de Thread.setDefaultUncaughtExceptionHandler (Gestionnaire d'exception par défaut) ) et c'est probablement la façon dont le SDK fonctionne, mais je ne trouve pas où utiliser le listener du SDK lui-même.

Ce que j'ai essayé

  1. Le SDK dispose d'un écouteur, mais il semble qu'il ne s'agisse pas de la session en cours, comme le montre la figure suivante ici . Le nom de la fonction est "crashlyticsDidDetectCrashDuringPreviousExecution" , ce qui signifie qu'il s'agit de la session précédente. Le même callback était disponible auparavant dans les méthodes dépréciées.

  2. Il y a " Journalisation personnalisée " et " Clés personnalisées "Mais ces fonctions se déclenchent lorsque je les appelle (et non au moment où le crash se produit).

La question

Existe-t-il un moyen d'ajouter des informations supplémentaires à Crashlytics dès qu'un crash se produit ?

Si oui, comment ?

8voto

Clive Seebregts Points 1425

Essayer de créer un UncaughtExceptionHandler et utiliser Clé(s) personnalisée(s) pour stocker les informations que vous souhaitez associer à votre rapport d'accident.

  1. Créez votre UncaughtExceptionHandler personnalisé ( s'assurer qu'il transmettra l'exception au UncaughtExceptionHandler par défaut pour qu'elle soit traitée ultérieurement par Crashlytics ).

  2. Dans le uncaughtException ajoutez une logique personnalisée pour définir votre clé, par ex. Crashlytics.setString("available_memory", "5784");

  3. Consultez votre tableau de bord Crashlytics pour voir votre/vos clé(s) personnalisée(s) lorsque votre application se plante.

Créez une sous-classe d'application personnalisée pour contenir votre logique :

public class MyApplication extends Application {
   private static Thread.UncaughtExceptionHandler mDefaultUncaughtExceptionHandler;

   private static Thread.UncaughtExceptionHandler mCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
       @Override
       public void uncaughtException(Thread thread, Throwable ex) {
          // Custom logic goes here
          // Calculate available memory
          Crashlytics.setString("available_memory", "5784");
          // This will make Crashlytics do its job
          mDefaultUncaughtExceptionHandler.uncaughtException(thread, ex);
       }
   };

   @Override
   public void onCreate() {
     super.onCreate();

     // Order is important!
     // First, start Crashlytics
     Crashlytics.start(this);

     // Second, cache a reference to default uncaught exception handler
     mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
     // Third, set custom UncaughtExceptionHandler
     Thread.setDefaultUncaughtExceptionHandler(mCaughtExceptionHandler);
   }
}

N'oubliez pas de spécifier le nom de votre sous-classe Application dans la balise de votre AndroidManifest.xml

<application android:name="MyApplication">

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X