クラッシュと例外

このドキュメントでは、Android 向け Google アナリティクス SDK v4 を使った クラッシュと例外の測定についての概要を説明します。

概要

クラッシュと例外の測定では、アプリで発生するキャッチ済みおよびキャッチされなかったクラッシュと例外の数とタイプを測定できます。例外には次のフィールドがあります。

フィールド名 タイプ 必須 説明
説明 String × 例外の説明で、最大 100 文字です。null を使用できます。
isFatal boolean はい 例外が致命的かどうかを示します。 true の場合は致命的です。

クラッシュと例外のデータは、主にクラッシュと例外レポートに 表示されます。

捕捉された例外

捕捉された例外とは、アプリの例外ハンドラのコードで定義 したエラーです(データのリクエスト時にネットワーク接続の タイムアウトが発生した場合など)。

捕捉された例外を測定するには、トラッカーの例外フィールドに値を設定し、 ヒットを送信します。次の例をご覧ください。

// Get tracker.
Tracker t =
    ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(TrackerName.APP_TRACKER);

// Build and send exception.
t.send(new HitBuilders.ExceptionBuilder()
    .setDescription(getExceptionMethod() + ":" + getExceptionLocation())
    .setFatal(getExceptionFatal())
    .build());

getTracker メソッドの詳細については、 高度な構成をご覧ください。

捕捉されなかった例外

捕捉されなかった例外は、アプリの実行時に予期しない事態が発生した インスタンス(多くの場合は致命的でアプリがクラッシュしたインスタンス) を表します。捕捉されなかった例外は、ga_reportUncaughtExceptions 設定値を設定するか、ExceptionReporter クラスを使用することで、Google アナリティクスに自動的に送信できます。

自動設定

アプリでキャッチされなかった例外をすべて自動的に Google アナリティクスに送信するには、XML 構成ファイルに次の行を追加します。

<bool name="ga_reportUncaughtExceptions">true</bool>

自動例外測定を使用して例外を送信すると、その例外は Thread のデフォルト例外ハンドラに渡されます。

高度な実装

高度な実装を使用していて、ga_reportUncaughtExceptions 構成値を使用しない場合は、キャッチされない例外の自動測定を実装するには、ExceptionReporter クラスを使用します。

ExceptionReporter は、アプリ内の特定のスレッドまたはすべてのスレッドで、キャッチされない例外のデフォルト ハンドラとして機能します。Google アナリティクスに例外を送信した後、ExceptionReporter クラスは必要に応じて、指定した捕捉されていない例外ハンドラに例外を渡すことができます。

次のコードは、新しい ExceptionReporter オブジェクトを作成し、捕捉されなかった新しいデフォルトの例外ハンドラとして設定します。その結果、捕捉されなかった例外はすべて Google アナリティクスに送られて、捕捉されなかった例外の以前のハンドラに渡されます。ほとんどのアプリでは、デフォルト ハンドラがその例外をログに記録して、アプリを停止します。

Thread.UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,
    Thread.getDefaultUncaughtExceptionHandler(),
    context);

// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);

自動例外測定を使う場合は、次の点にご注意ください。

  • 自動例外測定を使って送られた例外はすべて、Google アナリティクスで致命的な例外としてレポートされます。
  • Description フィールドは、例外の種類、クラス名、メソッド名、スレッド名を使ってデフォルトで自動的に設定されます。

例外説明の解析

SDK には、例外の説明を取得して Google アナリティクスに送信するプロセスを簡素化するための StandardExceptionParser が用意されています。

// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
    TrackerName.APP_TRACKER);

// Using StandardExceptionParser to get an Exception description.
try {
    // Request some scores from the network.
    ArrayList<Integer> highScores = getHighScoresFromCloud();
} catch (IOException e) {
    t.send(new HitBuilders.ExceptionBuilder()
        .setDescription(new StandardExceptionParser(this, null)
            .getDescription(Thread.currentThread().getName(), e))
        .setFatal(false)
        .build()
    );

    ... // Display alert to user that high scores are currently unavailable.
}

独自のパーサーを実装するには、ExceptionParser インターフェースを実装し、Google アナリティクスに例外を送信するときに、その setDescription メソッドを呼び出します。