Как начать работу с Crashlytics для Unity

Выберите платформу: iOS+ Android Android NDK Flutter Unity


Из этого руководства вы узнаете, как начать работу с Firebase Crashlytics в проекте Unity.

После того как вы настроите Firebase Crashlytics SDK в приложении, в консоли Firebase станут доступны подробные отчеты о сбоях.

Настройка Crashlytics требует выполнения задач как в консоли Firebase, так и в IDE (например, добавления файла конфигурации Firebase и SDK Crashlytics). Чтобы завершить настройку, вам нужно вызвать тестовый сбой, чтобы отправить первый отчет о сбое в Firebase.

Подготовка

  1. Если вы ещё этого не сделали, добавьте Firebase в проект Unity. Если у вас нет проекта Unity, вы можете скачать пример приложения.

  2. Рекомендуется. Чтобы автоматически получать журналы навигации и понимать, какие действия пользователя привели к сбою, некритической ошибке или событию ANR, включите Google Analytics в проекте Firebase.

    • Если вы создаете новый проект Firebase, включите Google Analytics в процессе его создания.

    • Если вы используете имеющийся проект Firebase, в котором не включена Google Analytics, откройте Настройки > Интеграции на консоли Firebase и включите ее.

Шаг 1. Добавьте в приложение SDK Crashlytics

Обратите внимание, что при регистрации проекта Unity в проекте Firebase вы могли уже скачать Firebase Unity SDK и добавить пакеты, описанные в следующих шагах.

  1. Скачайте Firebase Unity SDK и распакуйте его в удобном месте. Firebase Unity SDK не зависит от платформы.

  2. В открытом проекте Unity выберите Assets (Ресурсы) > Import Package (Импортировать пакет) > Custom Package (Собственный пакет).

  3. В распакованном SDK выберите для импорта файл Crashlytics SDK (FirebaseCrashlytics.unitypackage).

    Чтобы использовать журналы навигационной цепочки, добавьте в приложение Firebase SDK для Google Analytics (FirebaseAnalytics.unitypackage). Убедитесь, что в проекте Firebase включена Google Аналитика.

  4. В окне Import Unity Package нажмите Import.

Шаг 2. Инициализируйте Crashlytics

  1. Создайте новый скрипт C# и добавьте его в GameObject на сцене.

    1. Откройте первую сцену и создайте пустой объект GameObject с названием CrashlyticsInitializer.

    2. Нажмите Add Component (Добавить компонент) в Inspector (Инспектор) для нового объекта.

    3. Выберите скрипт CrashlyticsInit, чтобы добавить его в объект CrashlyticsInitializer.

  2. Инициализируйте 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 для загрузки символов.

В Crashlytics SDK для Unity (версия 8.6.1 и более поздние) автоматически включена функция отправки отчетов о сбоях NDK, которая позволяет Crashlytics автоматически сообщать о сбоях IL2CPP в Unity на устройствах Android. Однако, чтобы видеть расшифрованные стеки вызовов для сбоев нативных библиотек на панели управления Crashlytics, необходимо загрузить информацию о символах во время сборки с помощью интерфейса командной строки Firebase.

Чтобы настроить загрузку символов, следуйте инструкциям по установке Firebase CLI.

Если вы уже установили CLI, обновите его до последней версии.

Шаг 4. Создайте проект и загрузите символы

iOS+ (платформа Apple)

  1. В диалоговом окне Build Settings (Настройки сборки) экспортируйте проект в рабочую область Xcode.

  2. Создайте приложение.

    Для платформ Apple плагин Firebase Unity Editor автоматически настраивает проект Xcode так, чтобы для каждой сборки создавался и загружался на серверы Firebase файл символов, совместимый с Crashlytics.

Android

  1. В диалоговом окне Настройки сборки выполните одно из следующих действий:

    • Экспортировать в проект Android Studio, чтобы создать проект.

    • Создавайте APK-файлы прямо в редакторе Unity.
      Перед сборкой убедитесь, что в диалоговом окне Настройки сборки установлен флажок Создать symbols.zip.

  2. После завершения сборки создайте файл символов, совместимый с Crashlytics, и загрузите его на серверы Firebase, выполнив следующую команду интерфейса командной строки Firebase:

    firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
    • FIREBASE_APP_ID: идентификатор приложения Firebase для Android (не название пакета)
      Пример идентификатора приложения Firebase для Android: 1:567383003300:android:17104a2ced0c9b9b

    • 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).

    Как использовать команду CLI Firebase для создания и загрузки файла символов

    Пометка Описание
    --generator=csym

    Использует устаревший генератор файлов символов cSYM вместо генератора Breakpad по умолчанию.

    Не рекомендуется использовать. Рекомендуем использовать генератор файлов символов Breakpad по умолчанию.

    --generator=breakpad

    Использует генератор файлов символов Breakpad

    По умолчанию для создания файлов символов используется Breakpad. Используйте этот флаг, только если вы добавили symbolGenerator { csym() } в конфигурацию сборки и хотите переопределить его, чтобы использовать Breakpad.

    --dry-run

    Создает файлы символов, но не загружает их.

    Этот флаг полезен, если вы хотите проверить содержимое отправляемых файлов.

    --debug Предоставляет дополнительную информацию для отладки

Шаг 5. Завершите настройку, вызвав сбой приложения

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

  1. Найдите существующий тег 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");
            }
        }
    }
  2. Создайте приложение и загрузите информацию о символах после завершения сборки.

    • iOS+: плагин Firebase Unity Editor автоматически настраивает проект Xcode для загрузки файла символов.

    • Android. Для приложений Android, в которых используется IL2CPP, выполните команду Firebase CLI crashlytics:symbols:upload, чтобы загрузить файл символов.

  3. Запустите приложение. Когда оно начнет работать, следите за журналом устройства и ждите, пока исключение не будет вызвано из CrashlyticsTester.

    • iOS и более поздние версии. Журналы можно посмотреть в нижней панели Xcode.

    • Android. Чтобы посмотреть журналы, выполните в терминале следующую команду:adb logcat.

  4. В консоли Firebase перейдите на панель DevOps & Engagement > Crashlytics, чтобы проверить отчет о сбое при тестировании.

    Если вы обновили консоль, но тестовое падение не появилось в течение пяти минут, включите ведение журнала отладки, чтобы проверить, отправляет ли ваше приложение отчеты о падениях.


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

Дальнейшие действия

  • (Рекомендуется) Если в приложении Android используется IL2CPP, вы можете собирать отчеты GWP-ASan, чтобы отлаживать сбои, вызванные ошибками нативной памяти. Эти ошибки памяти могут быть связаны с повреждением памяти в приложении, которое является основной причиной уязвимостей в системе безопасности. Чтобы использовать эту функцию отладки, убедитесь, что в вашем приложении используется последняя версия Crashlytics SDK для Unity (10.7.0 или более поздняя) и GWP-ASan включен явным образом (для этого необходимо изменить манифест приложения Android).

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

  • Экспортируйте данные в BigQuery или Cloud Logging, чтобы использовать расширенные функции анализа, например отправлять запросы к данным, создавать собственные сводки и настраивать специальные оповещения.