クラッシュと例外 - Android SDK v2(従来版)

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

概要

クラッシュと例外の測定では、アプリで発生した、捕捉されたクラッシュと例外の数と種類を測定できます。Google アナリティクスの例外は、次のもので構成されます。

  • String (省略可)説明 - 例外の説明(最大 100 文字)。null を使用できます。
  • boolean isFatal - 例外が致命的かどうかを示します。true は致命的です。

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

捕捉された例外

キャッチされた例外は、例外処理コードを定義したアプリ内のエラーです。これらのエラーは通常、アプリの通常の使用中に発生し、アプリで回復させたいエラーです(データのリクエスト中にネットワーク接続がタイムアウトすることなど)。

キャッチされた例外を測定するには、例外処理コードの catch ブロックに sendException() を追加します。

次の例では、アプリがクラウドからハイスコアのリストを読み込もうとしています。ネットワーク接続が遅いためにリクエストがタイムアウトした場合は、ユーザーに対して処理する前に、Google アナリティクスに例外を送信します。

try {
  ArrayList highScores = getHighScores();            // Get scores from the cloud.
} catch (IOException e) {
  Tracker myTracker = EasyTracker.getTracker();      // Get a reference to tracker.
  myTracker.sendException(e.getMessage(), false);    // false indicates non-fatal exception.

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

捕捉されなかった例外

キャッチされない例外は、アプリの実行時に予期しない状況が発生し、多くの場合致命的であり、その結果アプリがクラッシュするインスタンスを表します。キャッチされなかった例外は、EasyTracker または ExceptionReporter クラスを使用して Google アナリティクスに自動的に送信できます。

EasyTracker の使用

EasyTracker を使用してアプリでキャッチされなかったすべての例外を自動的に送信するには、次の行を analytics.xml ファイルに追加します。

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

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

自動例外測定を使用する場合は、次の点に注意してください。

  • 自動例外測定を使って送られた例外はすべて、Google アナリティクスで致命的な例外としてレポートされます。
  • 説明フィールドは、スタック トレースを使用して自動的に入力されます。

高度な実装

EasyTracker を使用していない場合は、キャッチされない例外の自動測定を実装するには、ExceptionReporter クラスを使用します。これは、EasyTracker が自動例外レポートを処理するために実装するクラスと同じです。

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

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

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,                                        // Currently used Tracker.
    GAServiceManager.getInstance(),                   // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());     // Current default uncaught exception handler.

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

ExceptionParser の使用

この SDK には ExceptionParser インターフェースが用意されています。このインターフェースを実装すると、捕捉されなかった例外を Google アナリティクスに送信する際に、スタック トレースから最も関連性の高い説明を取得できます。ExceptionParser インターフェースには 1 つのメソッド(getDescription(String threadName, Throwable t))があります。

捕捉されなかった例外を Google アナリティクスに送信するときに、ExceptionParser を使用するよう Tracker を設定するには、次の例のように setExceptionParser(ExceptionParser parser) を呼び出します。

// Where myParser represents your implementation of ExceptionParser.
ExceptionParser parser = new myParser(context);

// Where myTracker is an instance of Tracker.
myTracker.setExceptionParser(parser);

トラッカーは、パーサーの getDescription() メソッドを使用して、Google アナリティクスに送信される、キャッチされなかった例外の説明フィールドにデータを入力します。