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 :
- Il rassemble les rapports de pannes et fournit des informations contextuelles tout en soulignant la gravité et la prévalence des pannes.
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.- Intégré avec
Analytics
- 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 |