La suite Firebase possède un module qui vous permet d’obtenir des informations et des rapports clairs et exploitables sur les problèmes que votre application peut rencontrer. C’est puissant, surtout si vous construisez une application de production qui est critique pour les utilisateurs. Chaque seconde perdue à fouiller dans les fichiers journaux se traduit probablement par des utilisateurs mécontents ou des pertes de revenus.

C’est pourquoi Firebase Crashlytics, un reporter de crash léger et en temps réel qui vous aide à suivre, prioriser et réparer les problèmes de stabilité qui érodent la qualité de votre application est fondamental. Il vous fait gagner du temps en regroupant intelligemment les pannes et en mettant en évidence les circonstances qui les ont provoquées.

Vous pouvez savoir si une panne particulière a un impact sur un grand nombre d’utilisateurs. Vous pouvez recevoir des alertes lorsqu’un problème s’aggrave soudainement et même identifier les lignes de code à l’origine des pannes.

Voici ses principales caractéristiques :

  1. Il rassemble les rapports de pannes et fournit des informations contextuelles tout en soulignant la gravité et la prévalence des pannes.
  2. Crashlytics propose des Crash Insights, des conseils utiles qui mettent en évidence les problèmes de stabilité courants et fournissent des ressources qui facilitent le dépannage, le triage et la résolution.
  3. Intégré avec Analytics
  4. Alertes en temps réel

Voyons maintenant comment configurer et utiliser Crashlytics.

Étape 1 : Ajouter Firebase à votre projet

Parce que Crashlytics est l’un des produits de la suite de produits firebase, vous devez ajouter firebase à votre projet. Nous avons expliqué en détail comment le faire [ici] (https://camposha.info/android-examples/add-firebase-to-android/).

Etape 2 : Activer Crashlytics dans la Console Firebase.

  • Allez sur le tableau de bord Crashlytics dans la Console Firebase.
  • Assurez-vous que votre application est sélectionnée dans la liste déroulante à côté de Crashlytics en haut de la page.
  • Cliquez sur Enable Crashlytics.

Étape 3 : Ajoutez le plugin Firebase Crashlytics à votre application.

Vous faites cela dans le fichier projects/build.gradle. Vérifiez le code ci-dessous pour voir comment :

buildscript {
    repositories {
        // Check that you have Google's Maven repository (if not, add it).
        google()
    }

    dependencies {
        // ...

        // Check that you have the Google services Gradle plugin v4.3.2 or later
        // (if not, add it).
        classpath 'com.google.gms:google-services:4.3.10'

        // Add the Crashlytics Gradle plugin
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
}

allprojects {
    repositories {
        // Check that you have Google's Maven repository (if not, add it).
        google()
    }
}

Après cela, venez dans le fichier app/build.gradle et appliquez le plugin crashlytics, en haut de ce fichier :

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin

// Apply the Crashlytics Gradle plugin
apply plugin: 'com.google.firebase.crashlytics'

Etape 4 : Ajouter les dépendances

Vous devez maintenant ajouter le SDK Firebase Crashlytics à votre application. Vous faites cela dans le fichier app/build.gradle sous la fermeture dependencies :

Pour un projet Kotlin :

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:28.4.1')

    // Declare the dependencies for the Crashlytics and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ktx'
    implementation 'com.google.firebase:firebase-analytics-ktx'
}

Pour un projet Java :

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:28.4.1')

    // Declare the dependencies for the Crashlytics and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics'
    implementation 'com.google.firebase:firebase-analytics'
}

Étape 5 : Forcer un test

Oui, vous devez forcer un test pour finir de configurer Crashlytics. Cela implique que nous allons intentionnellement forcer un crash pour voir les résultats dans notre tableau de bord Crashlytics.

Pour ce faire, par exemple, nous pouvons ajouter un bouton à notre application, puis lorsqu’il est cliqué, nous crashons l’application. Voici des exemples de code :

En Kotlin :

val crashButton = Button(this)
crashButton.text = "Test Crash"
crashButton.setOnClickListener {
   throw RuntimeException("Test Crash") // Force a crash
}

addContentView(crashButton, ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT,
       ViewGroup.LayoutParams.WRAP_CONTENT))

Et en Java :

Button crashButton = new Button(this);
crashButton.setText("Test 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));

Maintenant, lancez l’application. Ensuite, appuyez sur le bouton , l’application va se planter. Il suffit de se rendre sur le [Crashlytics dashboard] (https://console.firebase.google.com/project/_/crashlytics) de la Firebase Console pour voir votre test se planter.

C’est tout.

Voyons maintenant quelques exemples simples et isolés.

Exemple 1 : Exemple de Firebase Crashlytics – Kotlin et Java

Ceci est un exemple simple de crashlytique de Firebase. Il y a deux activités, une écrite en Kotlin, l’autre en Java.

Étape 1 : Ajouter Firebase à votre projet

Ajoutez Firebase à votre projet comme détaillé [ici] (https://camposha.info/android-examples/add-firebase-to-android/).

Step 2 : Ajouter les dépendances

Nous devons ajouter des dépendances à notre projet. Nous avons besoin de dépendances pour notre Crashlytics. Dans votre app/build.gradle ajoutez les dépendances comme suit :

dependencies {
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'

    implementation 'com.google.firebase:firebase-crashlytics:18.2.0'
    implementation 'com.google.firebase:firebase-crashlytics-ktx:18.2.0'

    // For an optimal experience using Crashlytics, add the Firebase SDK
    // for Google Analytics. This is recommended, but not required.
    implementation 'com.google.firebase:firebase-analytics:19.0.0'
}

Etape 3 : Ajouter la permission Internet

Pour se connecter à Firebase nous avons besoin d’une permission internet. Ajoutez la permission suivante dans votre fichier AndroidManifest.xml :

  <uses-permission android:name="android.permission.INTERNET"/>

Etape 4 : Créez la mise en page

Nous n’avons pas vraiment besoin de cette mise en page. Nous ne l’utilisons même pas. Nous l’incluons cependant ici pour vous montrer tout le code du projet :

**activity_main.xml`

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context=".MainActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"/>
</RelativeLayout>

Étape 5 : Écrire le code

Nous aurons à la fois du code Kotlin et du code Java. Voici l’activité principale pour Kotlin :

MainActivity.kt

import android.os.Bundle
import android.view.ViewGroup
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.crashlytics.ktx.setCustomKeys
import com.google.firebase.ktx.Firebase

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    fun setKeysBasic() {
        // [START crash_set_keys_basic]
        val crashlytics = Firebase.crashlytics
        crashlytics.setCustomKeys {
            key("my_string_key", "foo") // String value
            key("my_bool_key", true)    // boolean value
            key("my_double_key", 1.0)   // double value
            key("my_float_key", 1.0f)   // float value
            key("my_int_key", 1)        // int value
        }
        // [END crash_set_keys_basic]
    }

    fun resetKey() {
        // [START crash_re_set_key]
        val crashlytics = Firebase.crashlytics
        crashlytics.setCustomKeys {
            key("current_level", 3)
            key("last_UI_action", "logged_in")
        }
        // [END crash_re_set_key]
    }

    fun logReportAndPrint() {
        // [START crash_log_report_and_print]
        Firebase.crashlytics.log("message")
        // [END crash_log_report_and_print]
    }

    fun logReportOnly() {
        // [START crash_log_report_only]
        Firebase.crashlytics.log("message")
        // [END crash_log_report_only]
    }

    fun enableAtRuntime() {
        // [START crash_enable_at_runtime]
        Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
        // [END crash_enable_at_runtime]
    }

    fun setUserId() {
        // [START crash_set_user_id]
        Firebase.crashlytics.setUserId("user123456789")
        // [END crash_set_user_id]
    }

    @Throws(Exception::class)
    fun methodThatThrows() {
        throw Exception()
    }

    fun logCaughtEx() {
        // [START crash_log_caught_ex]
        try {
            methodThatThrows()
        } catch (e: Exception) {
            Firebase.crashlytics.recordException(e)
            // handle your exception here
        }
        // [END crash_log_caught_ex]
    }

    fun forceACrash() {
        // [START crash_force_crash]
        val crashButton = Button(this)
        crashButton.text = "Crash!"
        crashButton.setOnClickListener {
            throw RuntimeException() // Force a crash
        }

        addContentView(crashButton, ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT))
        // [END crash_force_crash]
    }
}

Et voici le code pour java :

**MainActivity.java`

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import com.google.firebase.crashlytics.FirebaseCrashlytics;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void setKeysBasic() {
        // [START crash_set_keys_basic]
        FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

        crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

        crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

        crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

        crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

        crashlytics.setCustomKey("my_int_key", 1 /* int value */);
        // [END crash_set_keys_basic]
    }

    public void resetKey() {
        // [START crash_re_set_key]
        FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

        crashlytics.setCustomKey("current_level", 3);
        crashlytics.setCustomKey("last_UI_action", "logged_in");
        // [END crash_re_set_key]
    }

    public void logReportAndPrint() {
        // [START crash_log_report_and_print]
        FirebaseCrashlytics.getInstance().log("message");
        // [END crash_log_report_and_print]
    }

    public void logReportOnly() {
        // [START crash_log_report_only]
        FirebaseCrashlytics.getInstance().log("message");
        // [END crash_log_report_only]
    }

    public void enableAtRuntime() {
        // [START crash_enable_at_runtime]
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
        // [END crash_enable_at_runtime]
    }

    public void setUserId() {
        // [START crash_set_user_id]
        FirebaseCrashlytics.getInstance().setUserId("user123456789");
        // [END crash_set_user_id]
    }

    public void methodThatThrows() throws Exception {
        throw new Exception();
    }

    public void logCaughtEx() {
        // [START crash_log_caught_ex]
        try {
            methodThatThrows();
        } catch (Exception e) {
            FirebaseCrashlytics.getInstance().recordException(e);
            // handle your exception here
        }
        // [END crash_log_caught_ex]
    }

    public void forceACrash() {
        // [START crash_force_crash]
        Button crashButton = new Button(this);
        crashButton.setText("Crash!");
        crashButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                throw new RuntimeException(); // Force a crash
            }
        });

        addContentView(crashButton, new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        // [END crash_force_crash]
    }
}

C’est tout.

Téléchargement

Téléchargez le projet ci-dessous :

Numéro Lien
1. Code de téléchargement