0
1

More than 1 year has passed since last update.

firebase tracking eventの実装

Posted at

初めに

今回は、FirebaseTrackingEventの汎用的な実装方法を紹介していこうと思います。

本文

まずは、どの画面からでも呼び出せるようにFirebaseTrackingEventinterfaceを作っていきます。

interface TrackingService {
    fun track(
        trackingEvent: TrackingEvent,
    )
}

次に、interfaceの本実装をしていきます。

class TrackingServiceImpl @Inject constructor(
    private val firebaseAnalytics: FirebaseAnalytics
) : TrackingService {
    override fun track(trackingEvent: TrackingEvent) {
        firebaseAnalytics.logEvent(
            trackingEvent.key,
            trackingEvent.parameters.toBundle(),
        )
    }
}

// TrackingEventのパラメータをBundleに詰め替える拡張関数
fun Map<String, Any>.toBundle(): Bundle = Bundle().apply {
    this@toBundle.forEach { (key, value) ->
        when (value) {
            is String -> this.putString(key, value)
            is Int -> this.putInt(key, value)
            is Long -> this.putLong(key, value)
            is Boolean -> this.putBoolean(key, value)
            else -> throw IllegalArgumentException()
        }
    }
}

次にinterfaceの本実装側で出てきたTrackingEventというデータクラスを実装します。
これはtracking時にデータを格納する際に利用するデータクラスです

abstract class TrackingEvent(
    val key: String,
    val parameters: Map<String, Any> = emptyMap(),
)

最後に先述のコードを使った凡例を書いて終わりにしようと思います

class SomthingFragmentButtonTapEvent(example: Example) : TrackingEvent(
    key = "somthing_fragment_button_tap",
    parameters = mapOf("example" to example)
)

最後に

触る機会が少なく、アプリを初めから作ってないとわからない部分だったりするので何かのお役に立てれば幸いです。
備忘録としての役割が強いので、わかりづらかったら申し訳ないです

0
1
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
0
1