Crashlytics ダッシュボードで問題をクリックすると、詳細なイベント レポートが表示されます。これらのレポートをカスタマイズすると、アプリの動作や、Crashlytics に報告されるイベントに関する状況を詳細に把握できるようになります。
アプリを計測可能にして、カスタムキー、カスタム ログ メッセージ、ユーザー ID をログに記録するようにします。
Crashlytics に例外を報告します。
アプリで Google アナリティクス用の Firebase SDK を使用している場合、パンくずリストのログを自動的に取得します。これらのログで、Crashlytics がアプリ内で収集するイベントにつながるユーザー アクションを確認できます。
自動クラッシュ レポートをオフにし、ユーザーに対してオプトイン レポートを有効にします。デフォルトでは、Crashlytics は自動的にアプリの全ユーザーを対象にクラッシュ レポートを収集します。
カスタムキーを追加する
カスタムキーを使用して、クラッシュにつながったアプリの特定の状態を把握できます。任意の Key-Value ペアをクラッシュ レポートに関連付けてから、Firebase コンソールでカスタムキーを使用してクラッシュ レポートを検索、フィルタできます。
Crashlytics ダッシュボードで、カスタムキーと一致する問題を検索できます。
コンソールで特定の問題を確認するには、各イベントに関連付けられているカスタムキーを表示します([キー] サブタブ)。カスタムキーでイベントをフィルタすることもできます(ページ上部にある [フィルタ] メニュー)。
Key-Value ペアを設定するには、setCustomKey
インスタンス メソッドを使用します。value
パラメータで任意のプリミティブ型または String
型の引数を受け入れられるよう、setCustomKey
は多重定義されています。次に例を示します。
Kotlin+KTX
val crashlytics = Firebase.crashlytics crashlytics.setCustomKeys { key("my_string_key", "foo") // String value key("my_bool_key", true) // boolean value key("my_double_key", 1.0) // double value key("my_float_key", 1.0f) // float value key("my_int_key", 1) // int value }
Java
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance(); crashlytics.setCustomKey("my_string_key", "foo" /* string value */); crashlytics.setCustomKey("my_bool_key", true /* boolean value */); crashlytics.setCustomKey("my_double_key", 1.0 /* double value */); crashlytics.setCustomKey("my_float_key", 1.0f /* float value */); crashlytics.setCustomKey("my_int_key", 1 /* int value */);
既存のキーの値を変更するには、そのキーを呼び出して別の値を設定します。次に例を示します。
Kotlin+KTX
val crashlytics = Firebase.crashlytics crashlytics.setCustomKeys { key("current_level", 3) key("last_UI_action", "logged_in") }
Java
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance(); crashlytics.setCustomKey("current_level", 3); crashlytics.setCustomKey("last_UI_action", "logged_in");
複数の Key-Value ペアを一括で追加するには、CustomKeysAndValues
のインスタンスを setCustomKeys
インスタンス メソッドに渡します。
Kotlin+KTX
Kotlin の既存の機能は、CustomKeysAndValues
ビルダーを使用するよりも簡単です。
crashlytics.setCustomKeys { key("str_key", "hello") key("bool_key", true) key("int_key", 1) key("long_key", 1L) key("float_key", 1.0f) key("double_key", 1.0) }
Java
CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder() .putString("string key", "string value") .putString("string key 2", "string value 2") .putBoolean("boolean key", True) .putBoolean("boolean key 2", False) .putFloat("float key", 1.01) .putFloat("float key 2", 2.02) .build(); FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);
カスタムログ メッセージを追加する
クラッシュにつながったイベントのコンテキストをさらに詳細に把握するには、カスタム Crashlytics ログをアプリに追加します。Crashlytics はログをクラッシュ データに関連付け、Firebase コンソールの [Crashlytics] ページにある [Logs] タブに表示します。
log
を使用して、問題を特定できるようにします。次に例を示します。
Kotlin+KTX
Firebase.crashlytics.log("message")
Java
FirebaseCrashlytics.getInstance().log("message");
ユーザー ID を設定する
問題を診断する際には、多くの場合、特定のクラッシュがどのユーザーで発生したかを把握すると役立ちます。Crashlytics には、クラッシュ レポート内でユーザーを匿名で識別する手段が用意されています。
レポートにユーザー ID を追加するには、各ユーザーに ID 番号、トークン、またはハッシュ値の形で一意の ID を割り当てます。
Kotlin+KTX
Firebase.crashlytics.setUserId("user123456789")
Java
FirebaseCrashlytics.getInstance().setUserId("user123456789");
ユーザー ID を設定後にクリアする必要が生じた場合は、ID の値を空白の文字列にリセットします。ユーザー ID をクリアしても、既存の Crashlytics レコードが削除されることはありません。ユーザー ID に関連付けられたレコードを削除する必要がある場合は、Firebase サポートにお問い合わせください。
(Android NDK のみ)NDK クラッシュ レポートにメタデータを追加する
必要に応じて、C++ コードに crashlytics.h
ヘッダーを組み込んで、NDK クラッシュ レポートにメタデータ(カスタムキー、カスタムログ、ユーザー ID など)を追加できます。これらのオプションについては、このページの前半の説明をご覧ください。
crashlytics.h
は、ヘッダーのみの C++ ライブラリとして Firebase Android SDK GitHub リポジトリに用意されています。
NDK C++ API の使用方法については、ヘッダー ファイル内のコメントをご覧ください。
GWP-ASan レポートを追加してメモリ破損の問題をデバッグする
Crashlytics では、GWP-ASan レポートを収集して、ネイティブ メモリエラーに起因するクラッシュをデバッグできます。このようなメモリ関連のエラーは、アプリのセキュリティの脆弱性の主な原因である、アプリ内のメモリ破損に関連している可能性があります。
このデータは、Crashlytics ダッシュボードで問題の詳細をクリックすると、新しい [メモリ スタック トレース] タブで確認できます。
新しい「GWP-ASan レポート」シグナルとフィルタを使用して、このデータに関連するすべての問題をすばやく表示することもできます。
アプリで GWP-ASan を明示的に有効にし、Crashlytics SDK for NDK v18.3.6 以降(Firebase BoM v31.3.0 以降)を使用すると、GWP-ASan メモリレポートを取得できます。GWP-ASan のセットアップは、Android のドキュメントに記載されているネイティブ コードの例を使用してテストできます。
致命的でない例外を報告する
Crashlytics では自動的にアプリのクラッシュを報告するだけでなく、非致命的な例外を記録して、アプリの次回の起動時にユーザーに送信することもできます。
recordException
メソッドを使用して、非致命的な例外をアプリの catch
ブロックに記録します。次に例を示します。
Kotlin+KTX
try { methodThatThrows() } catch (e: Exception) { Firebase.crashlytics.recordException(e) // handle your exception here }
Java
try { methodThatThrows(); } catch (Exception e) { FirebaseCrashlytics.getInstance().recordException(e); // handle your exception here }
記録された例外は、いずれも Firebase コンソールでは非致命的な問題として表示されます。問題の概要には、クラッシュの場合に通常表示されるすべての状態情報に加え、Android バージョンおよびハードウェア デバイスごとの内訳が示されます。
Crashlytics はアプリのパフォーマンスへの影響を最小限に抑えるために、専用のバックグラウンド スレッドで例外を処理します。さらに、ユーザーのネットワーク トラフィックを減らすために、Crashlytics はログに記録された例外をバッチにまとめ、アプリの次回の起動時に送信します。
パンくずリストのログを取得する
パンくずリストのログで、クラッシュ イベント、非致命的イベント、ANR イベントに至るまでにユーザーがアプリで行った操作を詳しく把握できます。これらのログは、問題の再現とデバッグを行う際に役立ちます。
パンくずリストのログは Google アナリティクスを利用しているため、パンくずリストのログを取得するには、Firebase プロジェクトで Google アナリティクスを有効にして、Google アナリティクス用の Firebase SD をアプリに追加する必要があります。これらの要件を満たしている場合に、問題の詳細を表示すると、[ログ] タブにパンくずリストのログとイベントのデータが自動的に追加されます。
アナリティクス SDK は screen_view
イベントを自動的にログに記録します。これにより、パンくずリストログに、クラッシュ イベント、非致命的イベント、ANR イベントの前の表示画面の一覧を示すことができます。screen_view
パンくずリストログには firebase_screen_class
パラメータが含まれます。
パンくずリストログには、ユーザーのセッション内で手動で記録したカスタム イベント(イベントのパラメータ データなど)も入力されます。このデータは、クラッシュ イベント、非致命的イベント、ANR イベントにつながる一連のユーザー操作を把握するのに役立ちます。
パンくずリストのログに入力されるデータを含め、Google アナリティクス データの収集と使用を制御できます。
オプトイン レポートを有効にする
デフォルトでは、Crashlytics は自動的にアプリの全ユーザーを対象にクラッシュ レポートを収集します。どのデータを送信するかをユーザーが細かく制御できるようにするには、オプトイン レポートを有効にします。これを行うには、自動レポートを無効にし、コード内で選択した場合のみデータを Crashlytics に送信するようにします。
AndroidManifest.xml
ファイルのapplication
ブロックに、meta-data
タグを追加して自動収集を無効にします。<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
実行時に Crashlytics データ収集オーバーライドを呼び出して、選択したユーザーに対して収集を有効にします。オーバーライド値はアプリが再起動されても維持されるため、Crashlytics は自動的にレポートを収集できます。自動クラッシュ レポートを無効にするには、オーバーライド値として
false
を渡します。false
に設定した場合、この新しい値はアプリが次回実行されるまで適用されません。Kotlin+KTX
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
クラッシュ分析データを管理する
クラッシュ分析では、匿名化されたスタック トレースと他の Firebase アプリのトレースを比較して、発生した問題がより大きい傾向の一部であるかどうかが通知されるので、問題の解決に役立ちます。また、多くの問題について、クラッシュのデバッグに役立つリソースも提供されます。
クラッシュ分析は、集計されたクラッシュ データを使用して、一般的な安定性の傾向を特定します。アプリのデータを共有しない場合は、Firebase コンソールの Crashlytics 問題リストの最上部にある [クラッシュ分析情報の設定] メニューからクラッシュ分析を無効にできます。