4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Crashlytics 非致命的なイベント 備忘録

Last updated at Posted at 2022-10-04

SDKについて

Crashlyticsの利用方法やSDKの使い方の詳細は以下を参照する
https://firebase.google.com/docs/crashlytics/customize-crash-reports?hl=ja&platform=android

非致命的なイベント

Crashlytics SDKを導入しただけでは取得してくれないCrash以外のExceptionを拾うための機能。以下でFirebaseに送信することが可能。

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

Firebase Console上でExceptionを確認することができる。
recordException(e)recordException(new Throwable("get Stack(任意文字列)"))とすることで差し込む場所のStack Traceを取ることも可能。
スクリーンショット 2022-10-04 10.11.08.png

Clashlyticsサイト記載の注意
保管される例外は、最新の 8 件のみです。アプリが 8 件を超える例外をスローすると、古い例外は失われます。

注意書きのように、例外の蓄積が8件までとなっているのでアプリ終了までに8件以上スローしてしまうと取るべき例外情報が破棄される可能性は留意しておく。

カスタムログ

非致命的なイベントと併せて詳細なログを送信することができる。

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

時系列で処理ルートや変数の移り変わりを例外と併せて出力することで、アプリがどのような状況になっているか確認することが可能
スクリーンショット 2022-10-04 10.11.51.png

recordException(e)がアプリ起動中に何度も呼び出される場合、recordException呼び出しまでに取得したログをCrashlyticsに送信する。送信してもログはクリアされず、アプリ終了まで残っている様子。上記スクリーンショットの操作の流れでrecordExceptionを再度呼び出した場合は、前述の送信のあとに蓄積したログも追加して送信する。
起動中にrecordExceptionを3回呼び出された場合には、次のようなログになる。
スクリーンショット 2022-10-04 10.13.12.png
Screen_Viewはイベントなので無視してほしい。
ConsoleUIだとスクロールが必要でスクリーンショットが取れなかったため、「.logをダウンロード」より取得している。
DetailActivityにrecordException(e)を仕込み、アプリ終了せずにActivityを3回開いたときに送信された場合はこのログとなる。

Clashlyticsサイト記載の注意
アプリの速度低下を避けるため、Crashlytics ではログのサイズを 64 KB に制限しています。セッションのログがこの制限を超えると、古いエントリからログが削除されます。

カスタムキー

例外と併せて任意のKey-Valueを送信することができる。
ログとは異なり、同一Keyを複数設定した場合にはValueが上書きされていくため、最終的にどのようなアプリ状態となっているのかを確認するために役立つ。
逆に上書きされてしまうため、状態遷移を記録することには向かない。

同一Keyでなければ、新たに記録されるためKey名を工夫することで欲しい状態を記録することは可能そうである。

Key-Valueは注意書きのように上限個数が決まっているため、利用時には個数を注意すること。

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

スクリーンショット 2022-10-04 10.11.35.png

Clashlyticsサイト記載の注意
最大 64 個の Key-Value ペアがサポートされます。このしきい値に達すると、それ以上値が保存されなくなります。各 Key-Value ペアの最大サイズは 1 KB です。

上限を超えた場合の動作

Crashlytics はアプリ終了で送信データを準備し、次回アプリ起動時にデータを送信します。
送信データの各蓄積上限での動作は以下のようになる。

カスタムログ 64KB

試しに10KBの1byte文字列を
FirebaseCrashlytics.getInstance().log(10KB stirng);で蓄積、
7回目にどうなるのかを確認した。

1回目のログから一部を破棄して64KBではなく、1回目のログが丸々破棄される60KBの動作となった。
カスタムログは例外スローが必要となるが、例外スローの上限数による破棄によって本ログの一部が破棄されるようなことはない。

例外スロー 8件

9件目以降から最古の例外スローが破棄される。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?