アプリクラッシュ、なるべく早く検知して修正したいですよね。
とはいえ、どこでクラッシュしたか分からなければ、修正することもできない…。
Firebase Crashlytics を使うと、ユーザーがアプリクラッシュした際に、開発者が通知を受けることが出来ます。
なお、Firebase には他にも便利な機能が色々あるので、興味があればこちらもご覧ください。
Firebase フェーズ
Firebase の登録
最初のセットアップはどの機能でも共通です。詳しくはこちら。
Crashlytics を有効にする


この状態にしておく
設定ファイルをダウンロード
「設定ファイル」をダウンロードします。
2つのファイルは、この後作成する unity プロジェクトに含めるので、取っておいてください。
左上の歯車 - プロジェクトを設定


2つのファイルをダウンロード
unityフェーズ
基本的にはこちらの記事と一緒です。今回は dotnet4/FirebaseCrashlytics.unitypackage をインストールしてください。
また、設定ファイルを忘れずにいれておきましょう。

エラーを強制的に発生させる
ボタンクリックしたら以下のコードを実行するようにし、Android実機で実行します。
エラーボタンを押した後、一旦アプリを終了し、再起動してください。
Crashlytics はアプリを再起動するタイミングでサーバーに通知がいくようです。
Sample.cs: public void ClickError() { try { throw new System.ApplicationException("crash test"); } catch (System.InvalidOperationException ex) { Crashlytics.LogException(ex); } }

Firebase 確認フェーズ
無事サーバーに通知が行くと、以下のように表示されます。
イベントの種類は「クラッシュ」ではなく、今回は「非重大」にしてください。

sample.cs をクリックすると、次のように表示されます。

この不具合を修正した場合、右上の「閉じる」という青いボタンを押します。
すると、イベントは「解決した」扱いになり、次回からは表示されなくなります。

もう一度表示したい場合は「問題の状態 = "新規"」を、「解決済み / ミュート」にしてください。

その他の情報
送信される情報
〇 Unity API のエラー
〇 System.~Exception
✖ Unity.Debug.LogError()
Debug.LogError() を表示させたい場合は、Debug.LogError() のラッパーメソッドや logMessageReceived イベントなどで、throw new System.ApplicationException() する…等の手段が考えられます。
送信されるタイミング
エラー(クラッシュ)した後、一旦アプリを落として再起動するタイミング
クラッシュした後、アプリを再起動せず即削除すると、不具合は報告されない…。
よろしければ Twitter をフォローしてもらえると嬉しいです!