Сообщения об ошибках и сбоях
Сообщения об ошибках и сбоях
Мониторинг сбоев, ошибок ANR и других неполадок имеет решающее значение для обеспечения бесперебойной работы приложения. Эти проблемы могут привести к удалению приложения, негативным отзывам и потере доверия пользователей. Проактивное обнаружение и устранение этих ошибок позволяет разработчикам повысить стабильность приложения и сохранить вовлеченность пользователей. Ключ-АСТРОМ предоставляет подробную информацию об этих ошибках, включая трассировку стека, сведения о сеансах и информацию, специфичную для устройства, что позволяет быстро выявлять первопричины и внедрять исправления.
Автоматическая система отчетности о сбоях
ЕдиныйАгент перехватывает все необработанные исключения. Отчет о сбое включает время возникновения и полную трассировку стека исключения.
Как правило, информация о сбое отправляется сразу после его возникновения, поэтому пользователю не нужно перезапускать приложение. Однако в некоторых случаях приложение следует открыть повторно в течение 10 минут, чтобы отчет о сбое был отправлен. Обратите внимание, что Ключ-АСТРОМ не отправляет отчеты о сбоях, которым более 10 минут (поскольку такие отчеты больше не могут быть сопоставлены в кластере Ключ-АСТРОМ).
Вы можете отключить отправку отчетов об ошибках с помощью соответствующего свойства crashReporting.
Настройка через Groovy DSL
astromkey {
configurations {
sampleConfig {
crashReporting false
}
}
}
Настройка через Kotlin DSL
configure<com.astromkey.tools.android.dsl.AstromkeyExtension> {
configurations {
create("sampleConfig") {
crashReporting(false)
}
}
}
ANR
ЕдиныйАгент сообщает об ошибках ANR только на устройствах с Android 11 и выше. На более старых версиях Android событие ошибки ANR недоступно.
Эти события отправляются только в том случае, если пользователь перезапускает мобильное приложение в течение 10 минут.
С помощью RUM Ключ-АСТРОМ автоматически фиксирует ошибки «Приложение не отвечает» (ANR). Мониторинг ошибок ANR крайне важен, поскольку они вызывают недовольство пользователя. Основная проблема заключается в том, что основной поток приложения, отвечающий за обновление пользовательского интерфейса, не может обрабатывать события ввода пользователя или отрисовывать изображение, что приводит к закрытию приложения. В официальной документации Android приведены примеры и способы диагностики этих ошибок.
По умолчанию эта функция включена. Чтобы отключить её, используйте следующие параметры конфигурации:
Отключение при ручном запуске агента
Kotlin
Astromkey.startup(this, AstromkeyConfigurationBuilder("<YourApplicationID>", "<ProvidedBeaconUrl>")
.withAnrReporting(false)
.buildConfiguration()
)
Java
Astromkey.startup(this, new AstromkeyConfigurationBuilder("<YourApplicationID>", "<ProvidedBeaconUrl>")
.withAnrReporting(false)
.buildConfiguration()
);
Отключение через Gradle DSL
Groovy
astromkey {
configurations {
sampleConfig {
anrReporting false
}
}
}
Kotlin
configure<com.astromkey.tools.android.dsl.AstromkeyExtension> {
configurations {
create("sampleConfig") {
anrReporting(false)
}
}
}
Ограничения
- Несколько ошибок ANR в одной сессии — в редких случаях может произойти несколько ошибок ANR до перезапуска приложения. Ключ-АСТРОМ будет отправлять отдельные события для каждой ошибки ANR, даже если они относятся к одной и той же сессии.
- Неизвестные случаи ANR — в некоторых случаях ANR может отсутствовать четкая информация о типе или субъекте. Тем не менее, такие случаи сообщаются с учетом имеющейся информации.
- Системные ограничения — качество данных ANR определяется операционной системой Android. Отсутствие трассировок стека или неполные данные о субъектах могут возникать из-за: перезаписи общего хранилища для трассировок, серьезных сбоев (например, повреждения памяти), поведения пользовательской прошивки.
Сбои нативных приложений
ЕдиныйАгент сообщает о сбоях нативных приложений только на устройствах с Android 11 или выше. На более старых версиях Android событие «Сбой нативного приложения» недоступно.
Эти события отправляются только в том случае, если пользователь перезапускает мобильное приложение в течение 10 минут.
Сбои, вызванные нативными компонентами, — это сбои, возникающие в коде C/C++, добавленном через NDK. В официальной документации Android приведены примеры и способы их диагностики.
По умолчанию эта функция включена. Чтобы отключить её, используйте следующие параметры конфигурации:
Отключение при ручном запуске агента
Kotlin
Astromkey.startup(this, AstromkeyConfigurationBuilder("<YourApplicationID>", "<ProvidedBeaconUrl>")
.withNativeCrashReporting(false)
.buildConfiguration()
)
Java
Astromkey.startup(this, new AstromkeyConfigurationBuilder("<YourApplicationID>", "<ProvidedBeaconUrl>")
.withNativeCrashReporting(false)
.buildConfiguration()
);
Отключение через Gradle DSL
Groovy
astromkey {
configurations {
sampleConfig {
nativeCrashReporting false
}
}
}
Kotlin
configure<com.astromkey.tools.android.dsl.AstromkeyExtension> {
configurations {
create("sampleConfig") {
nativeCrashReporting(false)
}
}
}
Ограничения
- Пустые трассировки стека — в некоторых случаях система Android может возвращать нулевую трассировку стека из-за перезаписанного общего хранилища, серьезных сбоев (например, поврежденной библиотеки libc) и поведения пользовательской прошивки.
- Множественные сбои в течение одной сессии — если до перезапуска приложения происходит несколько сбоев в работе нативных приложений, Ключ-АСТРОМ отправит отдельные события для каждого сбоя.
Сообщение об ошибках вручную
Для ошибок, которые вы обрабатываете в своем коде, но которые все же хотите сообщать в Ключ-АСТРОМ, используйте API для ручного создания отчетов.
Используйте Astromkey.sendExceptionEvent(ExceptionEventData exceptionEventData) для сообщения об исключениях с полным контекстом и пользовательскими свойствами:
Kotlin
try {
// код, который может вызвать исключение
} catch (exception: Exception) {
Astromkey.sendExceptionEvent(
ExceptionEventData(exception)
.addEventProperty("event_properties.<YourPropertyName>", "<YourPropertyValue>")
)
}
Java
try {
// код, который может вызвать исключение
} catch (Exception exception) {
Astromkey.sendExceptionEvent(
new ExceptionEventData(exception)
.addEventProperty("event_properties.<YourPropertyName>", "<YourPropertyValue>")
);
}