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: アプリに Firebase 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
    using Firebase;
    
    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;
    
                    // 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 を使用してビルド時にシンボル情報をアップロードする必要があります。

シンボルのアップロードを設定するには、次の手順を行います。

  1. このページの手順に沿って Firebase CLI をインストールします。

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

  2. (Android API レベル 30 以上を使用するアプリの場合のみ)アプリの AndroidManifest.xml テンプレートを更新して、ポインタのタグ付けを無効にします。

    1. [Android Player Settings] > [Publishing Settings] > [Build] > [Custom Main Manifest] チェックボックスをオンにします。

    2. Assets/Plugins/Android/AndroidManifest.xml にあるマニフェスト テンプレートを開きます。

    3. アプリケーション タグに次の属性を追加します: <application android:allowNativeHeapPointerTagging="false" ... />

ステップ 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 non-fatal errors 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 にクラッシュ レポートが送信されます。

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

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


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

次のステップ

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