Статьи

Отчет о сбоях для Android-приложения с Crashlytics и Fabric

Эта статья была обновлена ​​18 января 2017 года. В частности: добавлено освещение ответов Crashlytics .

Fabric Library от Twitter предоставляет набор инструментов для дополнения и улучшения ваших приложений. В этом руководстве я сосредоточусь на функциях отчетов о сбоях, которые помогают точно определять и отслеживать сбои приложения.

Добавление тканевого плагина

Создайте новый проект в Android Studio, выбрав минимальный уровень API 18 и добавив пустое действие .

Откройте диспетчер плагинов для Android Studio, нажмите « Обзор репозиториев» , найдите Fabric и установите плагин. Перезапустите Android Studio, чтобы плагин вступил в силу, и на верхней панели инструментов появится новый значок.

Fabric Icon

При нажатии на значок откроется панель в правой части окна Android Studio. Нажмите кнопку питания, чтобы зарегистрироваться или войти в службу Fabric, затем нажмите Далее , Crashlytics и Install .

Fabric покажет вам изменения, которые необходимо внести в ваше приложение, отметьте их и нажмите « Применить» в правом нижнем углу экрана.

Force A Simple Crash

Поскольку это пример приложения, вы должны вызвать сбой, нажав кнопку в приложении.

Откройте файл activity_main.xml и удалите ненужный код «Плавающая кнопка панели действий».

В макете content_main.xml добавьте две кнопки для представления типов отчетов, поддерживаемых Crashlytics.

Замените TextView следующим кодом:

 < LinearLayout android:orientation = "vertical" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginTop = "50dp" > < Button android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Simple Crash" android:onClick = "forceCrash" android:layout_gravity = "center" /> < Button android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Extra Info Crash" android:onClick = "showUserDialog" android:layout_gravity = "center" android:layout_marginTop = "30dp" /> </ LinearLayout > 

Откройте класс MainActivity.java и удалите код «Плавающая кнопка». Перед onCreate() добавьте следующее:

 private EditText userIdentifierEditText, userEmailEditText, userNameEditText; private String userIdentifier, userEmail, userName; 

Эти переменные будут использоваться во втором типе отчетов о сбоях, который включает пользовательскую информацию.

Первый простой сбой вызывает RuntimeException которое вызывает сбой приложения.

Добавьте следующее после onCreate() :

 public void forceCrash (View view) { throw new RuntimeException( "This is a simple crash" ); } 

Поскольку представление вызывается нажатием кнопки, функция принимает представление в качестве параметра и должна быть public . При нажатии метод forceCrash RuntimeException и отправляет отчет на Fabric Dashboard. Информация, включенная в этот отчет, будет содержать строку кода, которая вызвала сбой, и общую информацию об устройстве.

Report Example

Принудительный сбой, который включает в себя информацию пользователя

Вторая кнопка имитирует сбой, который позволяет пользователю вводить информацию в диалог. Например, пользователи электронной почты или имена пользователей социальных сетей.

Добавьте нижеприведенную функцию после forceCrash(View view){} :

 public void logUser (String userIdentifier, String userEmail, String userName) { // TODO: Use the current user's information // You can call any combination of these three methods Crashlytics.setUserIdentifier(userIdentifier); Crashlytics.setUserEmail(userEmail); Crashlytics.setUserName(userName); } 

Функция требует три параметра типа String и добавляет их в отправленный отчет. Чтобы получить эти данные от пользователя, вам нужен пользовательский диалог с тремя полями ввода.

Создайте пользовательский макет с именем custom_dialog_layout.xml и добавьте следующий код:

 < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:orientation = "vertical" android:layout_width = "match_parent" android:layout_height = "match_parent" > < android.support.design.widget.TextInputLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginLeft = "10dp" android:layout_marginRight = "10dp" > < EditText android:layout_width = "match_parent" android:layout_height = "wrap_content" android:id = "@+id/userIdentifier" android:inputType = "number" android:hint = "User Identifier:" /> </ android.support.design.widget.TextInputLayout > < android.support.design.widget.TextInputLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginLeft = "10dp" android:layout_marginRight = "10dp" > < EditText android:layout_width = "match_parent" android:layout_height = "wrap_content" android:id = "@+id/userEmail" android:hint = "User Email:" /> </ android.support.design.widget.TextInputLayout > < android.support.design.widget.TextInputLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginLeft = "10dp" android:layout_marginRight = "10dp" > < EditText android:layout_width = "match_parent" android:layout_height = "wrap_content" android:id = "@+id/userName" android:hint = "User Name:" /> </ android.support.design.widget.TextInputLayout > </ LinearLayout > 

Добавьте следующий метод в MainActivity.java, который создает диалог, получает информацию, выполняет сбой и отправляет отчет:

 public void showUserDialog (View view) { LayoutInflater inflater = getLayoutInflater(); View alertLayout = inflater.inflate(R.layout.custom_dialog_layout, null ); userIdentifierEditText = (EditText) alertLayout.findViewById(R.id.userIdentifier); userEmailEditText = (EditText) alertLayout.findViewById(R.id.userEmail); userNameEditText = (EditText) alertLayout.findViewById(R.id.userName); AlertDialog.Builder alert = new AlertDialog.Builder( this ); alert.setTitle( "Information" ); alert.setView(alertLayout); alert.setCancelable( false ); alert.setNegativeButton( "Cancel" , new DialogInterface.OnClickListener() { @Override public void onClick (DialogInterface dialog, int which) { } }); alert.setPositiveButton( "Crash & Send" , new DialogInterface.OnClickListener() { @Override public void onClick (DialogInterface dialog, int which) { // code for matching password userIdentifier = userIdentifierEditText.getText().toString(); userEmail = userEmailEditText.getText().toString(); userName = userNameEditText.getText().toString(); if (!userIdentifier.equals( "" ) && !userEmail.equals( "" ) && !userName.equals( "" )) { logUser(userIdentifier, userEmail, userName); Toast.makeText(getBaseContext(), "Sending extra information..." , Toast.LENGTH_SHORT).show(); throw new RuntimeException( "This is a crash with extra information" ); } Toast.makeText(getBaseContext(), "Information not send! Please complete all fields..." , Toast.LENGTH_SHORT).show(); } }); AlertDialog dialog = alert.create(); dialog.show(); } 

При нажатии второй кнопки приложение отображает диалоговое окно, которое запрашивает ввод. При нажатии Crash & Send проверяется, имеют ли строки значения, выполняет сбой и отправляет отчет, содержащий информацию.

Crash log with user information

Crashlytics Dashboard

Чтобы просмотреть отчеты о сбоях, откройте панель инструментов Crashlytics отдельного приложения.

App Dashboard

Под графиком находятся сбои, соответствующие определенным строкам кода. Чтобы просмотреть более подробную информацию о сбое, щелкните элемент в списке.

Crash detail

Чтобы просмотреть дополнительную информацию о пользователе, отправившем отчет, нажмите * Просмотр последнего сбоя (Подробнее …) _

User Details

ответы

Fabric также предоставляет вам самые простые инструменты для сохранения пользовательских метрик, событий и поведения вашего приложения.

Для отслеживания любой активности или просмотра, которые посетил пользователь, просто добавьте этот код в любой метод:

 //New Answers data Answers.getInstance().logContentView(new ContentViewEvent() .putContentName("MainActivity") .putContentType("View") .putContentId("1234") .putCustomAttribute("Custom Number", 20) .putCustomAttribute("Screen Orientation", "Landscape")); 

Вы также можете создавать собственные события ответов, добавив:

 Answers.getInstance().logCustom(new CustomEvent("User registered") .putCustomAttribute("Custom Attribute", "Sample") .putCustomAttribute("Custom", 350)); 

Answers Data

Но «Ответы» предоставляет больше возможностей для метрик приложения со многими другими событиями, как показано ниже:

Answer Events

Вывод

Компонент Crashlytics в Fabric предоставляет быстрый метод добавления отчетов о сбоях в ваши приложения, помогая выявлять общие проблемы, с которыми сталкиваются пользователи, и улучшать ваше приложение.

Пожалуйста, дайте мне знать в комментариях ниже, если у вас есть какие-либо вопросы или проблемы .