このクイックスタートでは、Firebase コンソールで包括的なクラッシュ レポートを表示できるよう、Firebase Crashlytics SDK を使用してアプリに Firebase Crashlytics を設定する方法について説明します。
Crashlytics を設定するには、Firebase コンソールと IDE の両方でタスク(Firebase 構成ファイルと Crashlytics SDK の追加など)を行う必要があります。設定を完了するには、強制的にテスト クラッシュを発生させて、最初のクラッシュ レポートを Firebase に送信する必要があります。
始める前に
まだ追加していない場合は、Unity プロジェクトに Firebase を追加します。Unity プロジェクトがない場合は、サンプルアプリをダウンロードできます。
推奨: パンくずリストのログを自動的に取得して、クラッシュ イベント、非致命的イベント、ANR イベントに至るまでのユーザー操作を把握するには、Firebase プロジェクトで Google Analytics を有効にする必要があります。
既存の Firebase プロジェクトで Google Analytics が有効になっていない場合は、Firebase コンソールで
[ の [ ] > [プロジェクトの設定]統合] タブで Google Analytics を有効にします。新しい Firebase プロジェクトを作成する場合は、プロジェクトの作成ワークフローで Google Analytics を有効にします。
ステップ 1: アプリに Crashlytics SDK を追加する
Firebase プロジェクトに Unity プロジェクトが登録されている場合は、すでに Firebase Unity SDK をダウンロードし、次の手順で説明するパッケージを追加している可能性があります。
Firebase Unity SDK をダウンロードし、適切な場所で解凍します。 Firebase Unity SDK はプラットフォーム固有ではありません。
開いている Unity プロジェクトで、[Assets] > [Import Package] > [Custom Package] を選択します。
解凍した SDK の中から Crashlytics SDK(
FirebaseCrashlytics.unitypackage
)を選択してインポートします。パンくずリストのログを利用するには、Google Analytics 用の Firebase SDK もアプリ(
FirebaseAnalytics.unitypackage
)に追加します。Firebase プロジェクトで Google アナリティクスが有効になっていることを確認してください。[Import Unity Package] ウィンドウで [Import] をクリックします。
ステップ 2: Crashlytics を初期化する
新しい C# スクリプトを作成して、シーン内の
GameObject
に追加します。最初のシーンを開き、空の
GameObject
を作成します(CrashlyticsInitializer
という名前を付けます)。新しいオブジェクトに対して、[Inspector] で [Add Component] をクリックします。
CrashlyticsInit
スクリプトを選択して、CrashlyticsInitializer
オブジェクトに追加します。
スクリプトの
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 プラットフォーム)
[Build Settings] ダイアログで、プロジェクトを Xcode ワークスペースにエクスポートします。
アプリをビルドします。
Apple プラットフォームの場合は、Firebase Unity Editor プラグインによって Xcode プロジェクトが自動的に構成され、ビルドを行うたびに Crashlytics 対応のシンボル ファイルが生成されて Firebase サーバーにアップロードされます。
Android
[Build Settings] ダイアログで、次のいずれかを行います。
Android Studio プロジェクトにエクスポートして、プロジェクトをビルドします。
APK を Unity Editor から直接ビルドします。
ビルドする前に、[Build Settings] ダイアログで [Create symbols.zip] チェックボックスがオンになっていることを確認します。
ビルドが完了したら、次の 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/SYMBOLS は
unityLibrary/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 です。このフラグは、ビルド構成に
を追加したが、それをオーバーライドして Breakpad を使用する場合のみ使用します。symbolGenerator { csym() }
--dry-run
シンボル ファイルを生成するがアップロードは行いません。
このフラグは、送信されるファイルの内容を調べる場合に役立ちます。
--debug
追加のデバッグ情報が提供されます。
ステップ 5: 強制的にテスト クラッシュを発生させて設定を完了する
Crashlytics の設定を完了し、Firebase コンソールの Crashlytics ダッシュボードで最初のデータを確認するには、強制的にテスト クラッシュを発生させる必要があります。
既存の
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"); } } }
アプリをビルドし、ビルドの完了後にシンボル情報をアップロードします。
iOS+: Firebase Unity Editor プラグインが、シンボル ファイルをアップロードするように Xcode プロジェクトを自動的に構成します。
Android: IL2CPP を使用する Android アプリの場合は、Firebase CLI の
crashlytics:symbols:upload
コマンドを実行して、シンボル ファイルをアップロードします。
アプリを実行します。アプリを実行したら、デバイスログを監視し、
CrashlyticsTester
で例外がトリガーされるのを待ちます。iOS+: Xcode の下部ペインでログを確認します。
Android: ターミナルで
adb logcat
コマンドを実行してログを確認します。
Firebase コンソールの Crashlytics ダッシュボードに移動して、テスト クラッシュを確認します。
コンソールを更新し、5 分経過してもテスト クラッシュが表示されない場合は、デバッグ ロギングを有効にして、アプリがクラッシュ レポートを送信しているかどうかを確認してください。
これで完了です。Crashlytics がアプリのクラッシュをモニタリングするようになりました。すべてのレポートと統計情報を参照して調査するには、Crashlytics ダッシュボードにアクセスします。
次のステップ
- (推奨) IL2CPP を使用する Android アプリの場合、GWP-ASan レポートを収集すると、ネイティブ メモリエラーに起因するクラッシュのデバッグに役立つ情報が得られます。このようなメモリ関連のエラーは、アプリのセキュリティの脆弱性の主な原因である、アプリ内のメモリ破損に関連している可能性があります。このデバッグ機能を利用するには、アプリで最新の Crashlytics SDK for Unity(v10.7.0 以降)を使用しており、GWP-ASan を明示的に有効にしていることを確認してください(アプリ マニフェストを変更する必要があります)。
- クラッシュ レポートの設定をカスタマイズするために、オプトイン レポート、ログ、キー、非致命的なエラーの追跡を追加する。
- Android アプリのクラッシュ レポートを Crashlytics ダッシュボードから直接 Google Play トラックでフィルタリングできるように、Google Play と統合する。これにより、ダッシュボードで特定のビルドに注目できます。