Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

FirebaseCrashlyticsのクラッシュレポートをカスタマイズする

このガイドでは、Firebase Crashlytics SDK を使用してクラッシュ レポートをカスタマイズする方法について説明します。デフォルトでは、Crashlytics はアプリのすべてのユーザーのクラッシュ レポートを自動的に収集します (自動クラッシュ レポートをオフにして、代わりにユーザーのオプトイン レポートを有効にすることができます)。 Crashlytics には、すぐに使用できる 4 つのロギング メカニズムが用意されています。カスタム キーカスタム ログユーザー識別子キャッチされた例外です。

カスタム キーを追加する

カスタム キーは、クラッシュにつながるアプリの特定の状態を取得するのに役立ちます。任意のキーと値のペアをクラッシュ レポートに関連付けてから、カスタム キーを使用して、Firebase コンソールでクラッシュ レポートを検索およびフィルタリングできます。

  • Crashlytics ダッシュボードで、カスタム キーに一致する課題を検索できます。

  • コンソールで特定の問題を確認している場合、各イベントに関連付けられているカスタム キーを表示し ( [キー] サブタブ)、カスタム キーでイベントをフィルター処理することもできます (ページ上部の [フィルター] メニュー)。

キーと値のペアを設定するには、 setCustomKeyインスタンス メソッドを使用します。 setCustomKeyは、 valueパラメータがプリミティブまたはString引数を受け入れるようにオーバーロードされていることに注意してください。ここではいくつかの例を示します。

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("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("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

setCustomKeys CustomKeysAndValuesメソッドに渡すことで、キーと値のペアを一括で追加します。

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);

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)
}

カスタム ログ メッセージを追加する

クラッシュに至るイベントのコンテキストをより詳細に把握するために、カスタム Crashlytics ログをアプリに追加できます。 Crashlytics はログをクラッシュ データに関連付け、 Firebase コンソールの Crashlytics ページの [ログ] タブに表示します。

logを使用して問題を特定します。例えば:

Java

FirebaseCrashlytics.getInstance().log("message");

Kotlin+KTX

Firebase.crashlytics.log("message")

ユーザー識別子を設定する

問題を診断するには、どのユーザーが特定のクラッシュを経験したかを知ることが役立つことがよくあります。 Crashlytics には、クラッシュ レポートでユーザーを匿名で識別する方法が含まれています。

レポートにユーザー ID を追加するには、ID 番号、トークン、またはハッシュ値の形式で一意の識別子を各ユーザーに割り当てます。

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

設定後にユーザー識別子をクリアする必要がある場合は、値を空白文字列にリセットします。ユーザー ID をクリアしても、既存の Crashlytics レコードは削除されません。ユーザー ID に関連付けられたレコードを削除する必要がある場合は、 Firebase サポートにお問い合わせください。

(Android NDK のみ) NDK クラッシュ レポートにメタデータを追加する

カスタム キーカスタム ログユーザー識別子などのメタデータを NDK クラッシュ レポートに追加するために、必要に応じて C++ コードにcrashlytics.hヘッダーを含めることができます。これらのオプションはすべて、上記のこのページで説明されています。

crashlytics.hは、 Firebase Android SDK GitHub リポジトリでヘッダーのみの C++ ライブラリとして利用できます。

NDK C++ API の使用方法については、ヘッダー ファイルのコメントを参照してください。

致命的でない例外を報告する

Crashlytics では、アプリのクラッシュを自動的に報告するだけでなく、致命的ではない例外を記録して、アプリの次回起動時に送信することができます。

アプリのcatchブロックに致命的ではない例外を記録するには、 recordExceptionメソッドを使用します。例えば:

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

Kotlin+KTX

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

記録されたすべての例外は、致命的ではない問題として Firebase コンソールに表示されます。問題の概要には、クラッシュから通常取得するすべての状態情報と、Android のバージョンおよびハードウェア デバイスごとの内訳が含まれています。

Crashlytics は専用のバックグラウンド スレッドで例外を処理し、アプリのパフォーマンスへの影響を最小限に抑えます。ユーザーのネットワーク トラフィックを削減するために、Crashlytics はログに記録された例外をまとめてバッチ化し、アプリの次回起動時に送信します。

オプトイン レポートを有効にする

デフォルトでは、Crashlytics はアプリのすべてのユーザーのクラッシュ レポートを自動的に収集します。ユーザーが送信するデータをより詳細に制御できるようにするには、自動レポートを無効にし、コードで選択した場合にのみデータを Crashlytics に送信することで、オプトイン レポートを有効にすることができます。

  1. AndroidManifest.xmlファイルのapplicationブロックで、 meta-dataタグを追加して自動収集をオフにします。

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. 実行時に Crashlytics データ コレクションのオーバーライドを呼び出して、選択したユーザーのコレクションを有効にします。オーバーライド値はアプリの起動後も保持されるため、Crashlytics は自動的にレポートを収集できます。自動クラッシュ レポートをオプトアウトするには、オーバーライド値としてfalseを渡します。 falseに設定すると、新しい値はアプリの次回の実行まで適用されません。

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

Crash Insights データの管理

Crash Insights は、匿名化されたスタック トレースを他の Firebase アプリからのトレースと比較し、問題がより大きな傾向の一部であるかどうかを知らせることで、問題の解決に役立ちます。多くの問題について、Crash Insights はクラッシュのデバッグに役立つリソースも提供します。

Crash Insights は、集約されたクラッシュ データを使用して、一般的な安定性の傾向を特定します。アプリのデータを共有したくない場合は、 Firebase コンソールの Crashlytics の問題リストの上部にあるCrash Insightsメニューから Crash Insights をオプトアウトできます。