A suíte Firebase
tem um módulo que permite que você obtenha insights e relatórios claros e acionáveis sobre os problemas em que seu aplicativo pode estar se metendo. Isto é poderoso especialmente se você está construindo um aplicativo de produção que é crítico para os usuários. Cada segundo desperdiçado escavando em arquivos de log provavelmente resulta em insatisfação dos usuários ou perda de receita.
Assim, 'Firerebase Crashlytics', um repórter leve e em tempo real que ajuda a rastrear, priorizar e corrigir problemas de estabilidade que corroem a qualidade de seu aplicativo, é fundamental. Ele economiza seu tempo na solução de problemas ao agrupar inteligentemente os crashes e destacar as circunstâncias que os levam até eles.
Você pode descobrir se um determinado acidente está causando impacto em muitos usuários. Você pode receber alertas quando um problema aumenta de repente e até mesmo identificar quais linhas de código estão causando falhas.
Aqui estão suas principais características:
- Ele cura relatórios de colisões e fornece informações contextuais enquanto destaca a gravidade e prevalência das colisões.
- Crashlytics' oferece Crash Insights, dicas úteis que destacam os problemas comuns de estabilidade e fornecem recursos que facilitam a solução de problemas, a triagem e a resolução dos mesmos.
- Integrado com "Analíticos".
- Alertas em tempo real
Vejamos agora como configurar e utilizar o `Crashlytics'.
Passo 1: Adicione Firebase
ao seu projeto
Como 'Crashlytics' é um dos produtos do conjunto firebase, você precisa adicionar firebase ao seu projeto. Nós abordamos em detalhes como fazer isso aqui.
Passo 2: Habilite o Crashlytics' no
Firebase Console'.
- Vá para o painel [Crashlytics dashboard] (https://console.firebase.google.com/project/_/crashlytics) no `Firebase Console'.
- Certifique-se de que seu aplicativo esteja selecionado no menu suspenso ao lado de Crashlytics no topo da página.
Clique em **Enable Crashlytics
***.
Passo 3: Adicione o plugin `Firebase Crashlytics' ao seu aplicativo.
Você faz isso no arquivo `projects/build.gradle'. Verifique o código abaixo para ver como:
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()
}
}
Depois disso, venha para o app/build.gradle
e aplique o plugin crashlytics, na parte superior desse arquivo:
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'
Passo 4: Adicionar Dependências
Agora você precisa adicionar o SDK Firebase Crashlytics' ao seu aplicativo. Você faz isso dentro do arquivo
app/build.gradle sob o fechamento
dependencies`:
Para um projeto 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'
}
Para um projeto 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'
}
Passo 5: Forçar um teste
Sim, você precisa forçar um teste para terminar de montar o "Crashlytics". Isto implica que forçaremos intencionalmente uma colisão para ver os resultados em nosso painel de 'Crashlytics'.
Para fazer isto, por exemplo, podemos adicionar um botão ao nosso aplicativo, depois, quando clicado, travamos o aplicativo. Aqui estão exemplos de códigos:
Em 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))
E em 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));
Agora execute o aplicativo. Em seguida, pressione o botão, o aplicativo irá cair. Basta navegar até o painel [Crashlytics dashboard] (https://console.firebase.google.com/project/_/crashlytics) do Firebase Console
para ver o crash de seu teste.
É isso aí.
Vejamos agora alguns exemplos simples e isolados.
Exemplo 1: Exemplo Crashlytics do
Firebase Crashlytics' - Kotlin e Java
Este é um exemplo simples de "base de dados". Há duas atividades
, uma escrita em Kotlin, a outra em Java.
Passo 1: Adicione o Firebase
ao seu projeto
Adicione Firebase
ao seu projeto como detalhado aqui.
Passo 2: Adicionar Dependências
Precisamos acrescentar dependências ao nosso projeto. Precisamos de dependências para nossos Crashlytics'. Em seu
app/build.gradle` adicione dependências da seguinte forma:
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'
}
Passo 3: Adicionar permissão para Internet
Para conectar-se ao Firebase
, precisamos de permissão de internet. Adicione a seguinte permissão em seu arquivo AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET"/>
Passo 4: Criar layout
Nós realmente não precisamos deste layout. Nós nem sequer usamos. Entretanto, incluímo-lo aqui para mostrar-lhe todo o código do projeto:
**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>
Passo 5: Escrever Código
Teremos tanto o código Kotlin quanto o código Java. Aqui está a principal atividade
de 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]
}
}
E aqui está o código para 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]
}
}
É isso aí.
Download
Faça o download do projeto abaixo:
Número | Link | Link | |
---|---|---|---|
1. | Código de download | Código de download | [Código de download |