В этом кратком руководстве описывается, как настроить Firebase Crashlytics в вашем приложении с помощью Firebase Crashlytics SDK, чтобы вы могли получать подробные отчеты о сбоях в консоли Firebase .
Для настройки Crashlytics необходимо выполнить ряд действий как в консоли Firebase , так и в вашей IDE (например, добавить файл конфигурации Firebase и Crashlytics SDK). Для завершения настройки необходимо принудительно вызвать тестовый сбой, чтобы отправить первый отчёт о сбое в Firebase.
Прежде чем начать
Добавьте Firebase в свой проект Unity, если вы ещё этого не сделали. Если у вас нет проекта Unity, вы можете скачать пример приложения .
Рекомендуется : для автоматического получения журналов хлебных крошек для понимания действий пользователя, приводящих к сбою, нефатальному событию или событию ANR, вам необходимо включить Google Analytics в вашем проекте Firebase.
Если в вашем существующем проекте Firebase не включен Google Analytics , вы можете включить Google Analytics на вкладке «Интеграции» вашего проекта.
> Настройки проекта в консоли Firebase . Если вы создаете новый проект Firebase, включите Google Analytics во время процесса создания проекта.
Шаг 1 : Добавьте Crashlytics SDK в свое приложение
Обратите внимание, что при регистрации вашего проекта Unity в проекте Firebase вы, возможно, уже загрузили Firebase Unity SDK и добавили пакеты, описанные в следующих шагах.
Загрузите Firebase Unity SDK и распакуйте его в удобное место. Firebase Unity SDK не привязан к какой-либо платформе.
В открытом проекте Unity перейдите в раздел Assets > Import Package > Custom Package .
Из распакованного SDK выберите импорт Crashlytics SDK (
FirebaseCrashlytics.unitypackage).Чтобы воспользоваться журналами навигации , добавьте в приложение Firebase SDK для Google Analytics (
FirebaseAnalytics.unitypackage). Убедитесь, что Google Analytics включен в вашем проекте Firebase.В окне Импорт пакета Unity нажмите Импорт .
Шаг 2 : Инициализация Crashlytics
Создайте новый скрипт C#, затем добавьте его в
GameObjectна сцене.Откройте первую сцену, затем создайте пустой
GameObjectс именемCrashlyticsInitializer.Нажмите Добавить компонент в Инспекторе для нового объекта.
Выберите скрипт
Crashlytics Init, чтобы добавить его к объектуCrashlyticsInitializer.
Инициализируйте Crashlytics в методе
Startскрипта:using System.Collections; using System.Collections.Generic; using UnityEngine; // Import Firebase and Crashlytics using Firebase; using Firebase.Crashlytics; public class CrashlyticsInit : MonoBehaviour { // Use this for initialization void Start () { // Initialize Firebase Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var dependencyStatus = task.Result; if (dependencyStatus == Firebase.DependencyStatus.Available) { // Create and hold a reference to your FirebaseApp, // where app is a Firebase.FirebaseApp property of your application class. // Crashlytics will use the DefaultInstance, as well; // this ensures that Crashlytics is initialized. Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance; // When this property is set to true, Crashlytics will report all // uncaught exceptions as fatal events. This is the recommended behavior. Crashlytics.ReportUncaughtExceptionsAsFatal = true; // Set a flag here for indicating that your project is ready to use Firebase. } else { UnityEngine.Debug.LogError(System.String.Format( "Could not resolve all Firebase dependencies: {0}",dependencyStatus)); // Firebase Unity SDK is not safe to use here. } }); } // Update is called once per frame void Update() // ... }
Шаг 3 : (Только для Android) Настройте загрузку символов.
Этот шаг необходим только для приложений Android, использующих IL2CPP.
Для приложений Android, использующих скриптовый бэкэнд Mono Unity, эти шаги не требуются.
Для приложений платформы Apple эти шаги не требуются, поскольку плагин Firebase Unity Editor автоматически настраивает ваш проект Xcode для загрузки символов.
В Unity SDK 8.6.1+ от Crashlytics автоматически включена функция отчётности о сбоях NDK, что позволяет Crashlytics автоматически сообщать о сбоях Unity IL2CPP на Android. Однако, чтобы увидеть символизированные трассировки стека для сбоев нативной библиотеки на панели управления Crashlytics , необходимо загрузить информацию о символах во время сборки с помощью Firebase CLI.
Чтобы настроить загрузку символов, следуйте инструкциям по установке Firebase CLI .
Если вы уже установили CLI, обязательно обновите его до последней версии .
Шаг 4 : Создайте свой проект и загрузите символы.
iOS+ (платформа Apple)
В диалоговом окне «Параметры сборки» экспортируйте свой проект в рабочее пространство Xcode.
Создайте свое приложение.
Для платформ Apple плагин Firebase Unity Editor автоматически настраивает ваш проект Xcode для генерации и загрузки совместимого с Crashlytics файла символов на серверы Firebase для каждой сборки.
Андроид
В диалоговом окне «Параметры сборки» выполните одно из следующих действий:
Экспортируйте в проект Android Studio для сборки своего проекта; или
Создавайте свой APK прямо в редакторе Unity.
Перед сборкой убедитесь, что в диалоговом окне « Параметры сборки» установлен флажок « Создать символы.zip» .
После завершения сборки сгенерируйте файл символов, совместимый с Crashlytics и загрузите его на серверы Firebase, выполнив следующую команду Firebase CLI:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : идентификатор вашего приложения Firebase Android (не имя вашего пакета)
Пример идентификатора приложения Firebase для Android:1:567383003300:android:17104a2ced0c9b9bВот два способа найти идентификатор приложения Firebase:
В файле
google-services.jsonваш идентификатор приложения — это значениеmobilesdk_app_id; илиВ консоли Firebase перейдите в настройки проекта . Прокрутите вниз до карточки «Ваши приложения» , затем нажмите на нужное приложение Firebase, чтобы узнать его идентификатор.
PATH/TO/SYMBOLS : Путь к файлу символов, созданному CLI
Экспортировано в проект Android Studio — PATH/TO/SYMBOLS — это каталог
unityLibrary/symbols, который создается в корне экспортированного проекта после сборки приложения через Gradle или Android Studio.Сборка APK производилась непосредственно в Unity. PATH/TO/SYMBOLS — это путь к архивному файлу символов, сгенерированному в корневом каталоге проекта после завершения сборки (например:
myproject/myapp-1.0-v100.symbols.zip).
Просмотреть расширенные параметры использования команды Firebase CLI для создания и загрузки файлов символов.
Флаг Описание --generator=csymИспользует устаревший генератор файлов символов cSYM вместо генератора Breakpad по умолчанию.
Не рекомендуется к использованию. Мы рекомендуем использовать стандартный генератор файлов символов Breakpad.
--generator=breakpadИспользует генератор файлов символов Breakpad
Обратите внимание, что по умолчанию для создания файла символов используется Breakpad. Используйте этот флаг только если вы добавили
symbolGenerator { csym() }в конфигурации вашей сборки, и вы хотите переопределить его, чтобы вместо него использовать Breakpad.--dry-runГенерирует файлы символов, но не загружает их
Этот флаг полезен, если вы хотите проверить содержимое отправляемых файлов.
--debugПредоставляет дополнительную отладочную информацию
Шаг 5 : принудительное выполнение тестового сбоя для завершения настройки
Чтобы завершить настройку Crashlytics и увидеть начальные данные на панели управления Crashlytics консоли Firebase , необходимо принудительно выполнить тестовый сбой.
Найдите существующий
GameObjectи добавьте к нему следующий скрипт. Этот скрипт вызовет сбой теста через несколько секунд после запуска приложения.using System; using UnityEngine; public class CrashlyticsTester : MonoBehaviour { int updatesBeforeException; // Use this for initialization void Start () { updatesBeforeException = 0; } // Update is called once per frame void Update() { // Call the exception-throwing method here so that it's run // every frame update throwExceptionEvery60Updates(); } // A method that tests your Crashlytics implementation by throwing an // exception every 60 frame updates. You should see reports in the // Firebase console a few minutes after running your app with this method. void throwExceptionEvery60Updates() { if (updatesBeforeException > 0) { updatesBeforeException--; } else { // Set the counter to 60 updates updatesBeforeException = 60; // Throw an exception to test your Crashlytics implementation throw new System.Exception("test exception please ignore"); } } }
Build your app and upload symbol information after your build finishes.
iOS+ : The Firebase Unity Editor plugin automatically configures your Xcode project to upload your symbol file.
Android : For your Android apps that use IL2CPP, run the Firebase CLI
crashlytics:symbols:uploadcommand to upload your symbol file.
Run your app. Once your app is running, watch the device log and wait for the exception to trigger from the
CrashlyticsTester.iOS+ : View logs in the bottom pane of Xcode.
Android : View logs by running the following command in the terminal:
adb logcat.
Go to the Crashlytics dashboard of the Firebase console to see your test crash.
If you've refreshed the console and you're still not seeing the test crash after five minutes, enable debug logging to see if your app is sending crash reports.
And that's it! Crashlytics is now monitoring your app for crashes. Visit the Crashlytics dashboard to view and investigate all your reports and statistics.
Следующие шаги
- (Recommended) For Android apps that use IL2CPP, get help debugging crashes caused by native memory errors by collecting GWP-ASan reports . These memory-related errors can be associated with memory corruption within your app, which is the leading cause of app security vulnerabilities. To take advantage of this debugging feature, make sure your app uses the latest Crashlytics SDK for Unity (v10.7.0+) and has GWP-ASan explicitly enabled (requires you to modify your Android App Manifest ).
- Customize your crash report setup by adding opt-in reporting, logs, keys, and tracking of non-fatal errors.
- Integrate with Google Play so that you can filter your Android app's crash reports by Google Play track directly in the Crashlytics dashboard. This allows you to better focus your dashboard on specific builds.