本記事は、サムザップ Advent Calendar 2020 #2 の12/25の記事です。
クラッシュレポート解析ツールをStandaloneアプリケーションでも使えるようにした時のことを執筆していこうと思います。
ツール選び
調べてみると世の中には意外と多くのクラッシュレポート解析ツールがあるんですね。
候補となったツールは以下の通りです。
|ツール名|対応プラットフォーム|
|:--|:--|:--|:--|
|Smart Beat|Android, iOS, Webアプリ|
|Firebase Crashlytics|Android, iOS|
|Unity Cloud Diagnostics|PC, Mac, Linux, Android, iOS, WebGL|
|App Center Diagnostics|Android, iOS|
|Unity BackTrace|Xbox, Google Stadia, PS4, iOS, Android, Windows, Mac, Linux|
|Splunk MINT|iOS, Android, HTML5, Windows 8, Windows Phone|
|Crittercism|iOS, Android, Windows Phone, HTML5||
|DeployGate|iOS, Android|
|Bugsnag|iOS, Android, macOS, Windows, WebGL|
|RAYGUN|Windows Desktop, Mac, iOS, Android|
|Countly|iOS, Android, Windows|
|InstaBug|iOS, Android|
Windowsに対応されているもので、Unityプラグインがあって、料金もそこそこで、レポート数の上限がそこそこ多くて、Smart Beatと同じような機能を備えてて…(けっこう条件が厳しい)
最終選考まで通過したのはBugsnagとRAYGUNで、最終的に選んだのはBugsnagの方でした!
iOS, Android, macOS, Windows, WebGLに対応されており、必要だったのはWindowsですが、将来Macも対応することになっても安心。
今回はそんなBugsnagの使い方をご紹介します。
Bugsnag紹介
ダッシュボードを開くとレポートの一覧が現れます。同じレポートはまとめて表示してくれてます。
レポートを選択すると、まとめられたレポートが全件表示されます。
レポート毎にスタックトレースや端末情報、ユーザ情報が確認でき、パンくずも見れます。
パンくずはアプリ側で自由に設定できます。
Bugsnag実装
まずはUnityパッケージ入手
BugsnagトップページからPricesを選択すると各プランごとのお値段が現れます。
LiteプランでもStandardプランでもどちらでも良いので「START FREE TRIAL」ボタンを押してメールアドレスなどを登録するとUnityパッケージとAPIキー(後述)が入手できます。
準備をしよう
UnityパッケージをインポートしたらUnity側でレポートを通知するための準備をしていきましょう。
BugsnagのUnityガイドがあるので簡単です。
英語だけど画像もあり、すごくわかりやすい。
作成したGameObjectにBugsnagBehaviourをAddComponentします。
BugsnagBehaviourのインスペクタにAPIキーを登録します。
APIキーはBugsnagのアカウントを登録した際に発行されます。
GameObjectを作らずコードからでもBugsnagの初期化が行なえます。
Bugsnag.Init("your-api-key-here");
レポートを送信しよう
Excptionが発生した場合や、エラーログが出力された場合は自動的にBugsnagがレポートの送信を行います。
レポートを自動送信するログレベルはBugsnagBehaviourのインスペクタNotify Level
から設定できます。
コードからでも設定できます。
Bugsnag.Configuration.NotifyLevel = LogType.Warning;
レポートを意図的に送信することもできます。
Bugsnag.Notify(new System.Exception("Non-fatal"));
カスタマイズしてみよう
送信するレポートをカスタマイズすることができます。
以下の方法でレポートに任意の情報を付加させることができます。
Bugsnag.Metadata.Add("system", new Dictionary<string, string>() {
{ "subsystem", "Player Mechanics" }
});
パンくずを使ってみよう
レポートが送信されるまでにどのような遷移をたどったのかを設定したりできます。
使用用途は自由なので任意の情報を残すことができます。
Bugsnag.LeaveBreadcrumb(
"Button clicked",
BreadcrumbType.Navigation,
new Dictionary<string, string>() {{ "panel", panel.Name }}
);
ユーザーIDを設定しよう
各レポートの影響を受けるユーザ数を調査するのに役立ちます。
デフォルトで一意のIDが設定されますが、ソシャゲであればおそらくユーザーを一意に識別するIDが存在するかと思います。
ゲーム内でのユーザーIDを設定しておけば、対象のユーザーに起きた事象を調査することができます。
Bugsnag.User.Id = "userId";
最後に
Bugsnagいかがでしたでしょうか?
自分は実装してみてなんて簡単なんだ!と驚きました。
SmartBeatより劣る点としてはスクリーンショット撮影機能がないことですね。
スマホのゲーム制作を開始する段階でPCでの配信も視野に入れている場合はBugsnagを検討してみても良いかと思います。
※説明を端折った部分もあるのでもっと詳しく知りたい方は公式ドキュメントを参考にしてみてください。
以上となります。
メリークリスマス&良いお年を!