Firebase Crashlytics を使ってみる

このクイックスタートでは、Firebase コンソールで包括的なクラッシュ レポートを表示できるよう、Firebase Crashlytics SDK を使用してアプリに Firebase Crashlytics を設定する方法について説明し��す。

Crashlytics を設定するには、Firebase コンソールと IDE の両方でタスク(Firebase 構成ファイルと Crashlytics SDK の追加など)を行う必要があります。設定を完了するには、強制的にテスト クラッシュを発生させて、最初のクラッシュ レポートを Firebase に送信する必要があります。

始める前に

  1. まだ追加していない場合は、Unity プロジェクトに Firebase を追加します。Unity プロジェクトがない場合は、サンプルアプリをダウンロードできます。

  2. 推奨: クラッシュに遭遇していないユーザー数の表示、パンくずリストのログ、ベロシティ アラートなどの機能を利用するには、Firebase プロジェクトで Google アナリティクスを有効にする必要があります。

    • 既存の Firebase プロジェクトで Google アナリティクスが有効になっていない場合は、Firebase コンソールで、 > [プロジェクトの設定][統合] タブで Google アナリティクスを有効にします。

    • 新しい Firebase プロジェクトを作成する場合は、プロジェクトの作成ワークフローで Google アナリティクスを有効にします。

ステップ 1: アプリに Crashlytics SDK を追加する

Firebase プロジェクトに Unity プロジェクトが登録されている場合は、すでに Firebase Unity SDK をダウンロードし、Crashlytics パッケージを追加している可能性があります。

  1. Firebase Unity SDK をダウンロードし、適切な場所で解凍します。

    Firebase Unity SDK はプラットフォーム固有ではありません。

  2. 開いている Unity プロジェクトで、[Assets] > [Import Package] > [Custom Package] を選択します。

  3. 解凍した SDK の中から Crashlytics SDK(FirebaseCrashlytics.unitypackage)を選択してインポートします。

    その他のサポートされている Firebase プロダクトもインポートできます。

  4. [Import Unity Package] ウィンドウで [Import] をクリックします。

ステップ 2: Crashlytics を初期化する

  1. 新しい C# スクリプトを作成して、シーン内の GameObject に追加します。

    1. 最初のシーンを開き、空の GameObject を作成します(CrashlyticsInitializer という名前を付けます)。

    2. 新しいオブジェクトに対して、[Inspector] で [Add Component] をクリックします。

    3. CrashlyticsInit スクリプトを選択して、CrashlyticsInitializer オブジェクトに追加します。

  2. スクリプトの Start メソッドで Crashlytics を初期化します。

    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 のみ)シンボルのアップロードを設定する

このステップは、IL2CPP を使用する Android アプリでのみ必要です。

  • Unity の Mono スクリプト バックエンドを使用する Android アプリの場合、これらの手順は必要ありません。

  • Apple プラットフォーム アプリの場合、Xcode プロジェクトでのシンボルのアップロードが Firebase Unity Editor プラグインによって自動的に構成されるため、これらの手順は必要ありません。

Crashlytics の Unity SDK 8.6.1 以降には、NDK クラッシュ レポートが自動的に含まれます。これにより、Crashlytics は Android 上で Unity IL2CPP のクラッシュを自動的に報告できます。ただし、Crashlytics ダッシュボードにネイティブ ライブラリのクラッシュのシンボリケートされたスタック トレースを表示するには、Firebase CLI を使用してビルド時にシンボル情報をアップロードする必要があります。

シンボルのアップロードを設定するには、Firebase CLI をインストールするの手順に沿って操作します。

すでに CLI がインストールされている場合は、最新バージョンに更新してください。

ステップ 4: プロジェクトをビルドしてシンボルをアップロードする

iOS+(Apple プラットフォーム)

  1. [Build Settings] ダイアログで、プロジェクトを Xcode ワークスペースにエクスポートします。

  2. アプリをビルドします。

    Apple プラットフォームの場合は、Firebase Unity Editor プラグインによって Xcode プロジェクトが自動的に構成され、ビルドを行うたびに Crashlytics 対応のシンボル ファイルが生成されて Firebase サーバーにアップロードされます。

Android

  1. [Build Settings] ダイアログで、次のいずれかを行います。

    • Android Studio プロジェクトにエクスポートして、プロジェクトをビルドします。

    • APK を Unity Editor から直接ビルドします。
      ビルドする前に、[Build Settings] ダイアログで [Create symbols.zip] チェックボックスがオンになっていることを確認します。

  2. ビルドが完了したら、次の Firebase CLI コマンドを実行して、Crashlytics 互換のシンボル ファイルを生成し、Firebase サーバーにアップロードします。

    firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
    • FIREBASE_APP_ID: Firebase Android アプリ ID(パッケージ名ではありません)
      Firebase Android アプリ ID の例: 1:567383003300:android:17104a2ced0c9b9b

    • PATH/TO/SYMBOLS: CLI によって生成されたシンボル ファイルへのパス

      • Android Studio プロジェクトにエクスポートした場合: PATH/TO/SYMBOLSunityLibrary/symbols ディレクトリであり、Gradle または Android Studio でアプリをビルドすると、エクスポートされたプロジェクトのルートに作成されます。

      • Unity から直接 APK をビルドした場合: PATH/TO/SYMBOLS は、ビルドが完了した際に、プロジェクトのルート ディレクトリに生成される、圧縮されたシンボル ファイルのパスです(例: myproject/myapp-1.0-v100.symbols.zip)。

    Firebase CLI コマンドでシンボル ファイルの生成とアップロードを行う際に使用される高度なオプションを表示

    フラグ 説明
    --generator=csym

    デフォルトの Breakpad ジェネレーターではなく、古い cSYM シンボル ファイル ジェネレーターを使用します。

    このオプションの使用は推奨されません。デフォルトの Breakpad シンボル ファイル ジェネレーターを使用することをおすすめします。

    --generator=breakpad

    Breakpad シンボル ファイル ジェネレーターを使用します。

    デフォルトのシンボル ファイル生成は Breakpad です。このフラグは、ビルド構成に symbolGenerator { csym() } を追加したが、それをオーバーライドして Breakpad を使用する場合のみ使用します。

    --dry-run

    シンボル ファイルを生成するがアップロードは行いません。

    このフラグは、送信されるファイルの内容を調べる場合に役立ちます。

    --debug 追加のデバッグ情報が提供されます。

ステップ 5: 強制的にテスト クラッシュを発生させて設定を完了する

Crashlytics の設定を完了し、Firebase コンソールの Crashlytics ダッシュボードで最初のデータを確認するには、強制的にテスト クラッシュを発生させる必要があります。

  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: IL2CPP を使用する Android アプリの場合は、Firebase CLI crashlytics:symbols:upload コマンドを実行して、シンボル ファイルをアップロードします。

  3. アプリを実行します。アプリを実行したら、デバイスログを監視し、CrashlyticsTester で例外がトリガーされるのを待ちます。

    • iOS+: Xcode の下部ペインでログを確認します。

    • Android: ターミナルで adb logcat コマンドを実行してログを確認します。

  4. Firebase コンソールの Crashlytics ダッシュボードに移動して、テスト クラッシュを確認します。

    コンソールを更新し、5 分経過してもテスト クラッシュが表示されない場合は、デバッグ ロギングを有効にして、アプリがクラッシュ レポートを送信しているかどうかを確認してください。


これで完了です。Crashlytics がアプリのクラッシュをモニタリングするようになりました。すべてのレポートと統計情報を参照して調査するには、Crashlytics ダッシュボードにアクセスします。

次のステップ

  • Android アプリのクラッシュ レポートを Crashlytics ダッシュボードから直接 Google Play トラックでフィルタリングできるように、Google Play と統合する。これにより、ダッシュボードで特定のビルドに注目できます。