LoginSignup
7
2

More than 1 year has passed since last update.

【Navigation】 Single Activity構成時のアナリティクスのスクリーン計測Tips

Last updated at Posted at 2020-05-28

Navigationコンポーネントを使い、アプリをSingle Activity構成にした際のアナリティクス(Firebase Analytics)のTipsを紹介します。

存在感の強い MainActivity

アナリティクスを使う場合、Activityは自動で計測されるため、特に意識せずとも画面遷移がトラッキングされ便利です。
https://firebase.google.com/docs/analytics/screenviews

しかしながら、自動計測はActivityのみのため、Navigationコンポーネントを使ったSingle Activity構成の場合に、そのままだと 存在感の強いMainActivity が出来上がってしまいます。
スクリーンショット_2020-05-28_11_11_51.png

addOnDestinationChangedListener を使うとシュッと対応できる💡

存在感の強いMainActivityを無くすために、各Fragmentにトラッキング用の仕組みを入れても良いかと思いますが、Navigationの画面遷移時に呼ばれる NavController#addOnDestinationChangedListener を使うことでシュッと対応することができます。

サンプルコード

addOnDestinationChangedListener を使ったサンプルコードです。

MainActivity.kt

val navController: NavController = ...

navController.addOnDestinationChangedListener { _, destination, _ ->
    // ① 型チェック
    if (destination is FragmentNavigator.Destination) {
        // ② Fragmentのクラス名を取得
        val screenName = destination.className.split(".").last()
        // ③ 送信
        FirebaseAnalytics.getInstance(this).setCurrentScreen(this, screenName, screenName)
    }
}

ポイントを解説します。

① 型チェック

addOnDestinationChangedListenerdestination は型が NavDestination となっており、そのままだとクラス名が取得できません。

そこで、 FragmentNavigator.Destination かどうかをチェックし、スマートキャストでクラス名( className )を取得できるようにします。

ちなみにNavigationでDialogFragmentを使っている場合はこれだと対応出来ないので、 DialogFragmentNavigator.Destination かどうかのチェックも必要になりそうです。

② Fragmentのクラス名を取得

FragmentNavigator.Destination#classNamecom.example.ExampleFragment のようにパッケージ名も含んでいるため、 雑に split(".").last() とすることでFragmentのクラス名だけを抽出しています。

③ 送信

②で抽出した screenNamesetCurrentScreen() で送信します。
setCurrentScreen (Activity activity, String screenName, String screenClassOverride)

以上で、Single Activity構成時でも画面遷移時にいい感じにトラッキングができるようになりました。

まとめ

簡単ではありますが、Navigationコンポーネントを使い、アプリをSingle Activity構成にした際のアナリティクスのTipsを紹介しました。

addOnDestinationChangedListener 便利 :relaxed:

7
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
7
2