@@ -8,13 +8,19 @@ import androidx.activity.compose.setContent
88import androidx.activity.enableEdgeToEdge
99import androidx.activity.result.contract.ActivityResultContracts
1010import androidx.compose.runtime.Composable
11+ import androidx.compose.runtime.DisposableEffect
1112import androidx.compose.runtime.LaunchedEffect
1213import androidx.compose.runtime.getValue
1314import androidx.compose.runtime.mutableStateOf
1415import androidx.compose.runtime.setValue
16+ import androidx.navigation.NavController
1517import androidx.navigation.compose.NavHost
1618import androidx.navigation.compose.composable
1719import androidx.navigation.compose.rememberNavController
20+ import com.google.firebase.Firebase
21+ import com.google.firebase.analytics.FirebaseAnalytics
22+ import com.google.firebase.analytics.analytics
23+ import com.google.firebase.analytics.logEvent
1824import com.texthip.thip.data.manager.AuthStateManager
1925import com.texthip.thip.data.manager.TokenManager
2026import com.texthip.thip.ui.navigator.navigations.authNavigation
@@ -140,6 +146,25 @@ fun RootNavHost(
140146 notificationData : MainActivity .NotificationData ? = null
141147) {
142148 val navController = rememberNavController()
149+ val firebaseAnalytics = Firebase .analytics
150+
151+ DisposableEffect (navController) {
152+ val listener = NavController .OnDestinationChangedListener { _, destination, _ ->
153+ // 목적지의 route가 null이 아닐 경우에만 이벤트를 로깅
154+ destination.route?.let { route ->
155+ firebaseAnalytics.logEvent(FirebaseAnalytics .Event .SCREEN_VIEW ) {
156+ param(FirebaseAnalytics .Param .SCREEN_NAME , route)
157+ param(FirebaseAnalytics .Param .SCREEN_CLASS , route)
158+ }
159+ Log .d(" GA_Tracker" , " Screen viewed: $route " )
160+ }
161+ }
162+ navController.addOnDestinationChangedListener(listener)
163+
164+ onDispose {
165+ navController.removeOnDestinationChangedListener(listener)
166+ }
167+ }
143168
144169 LaunchedEffect (Unit ) {
145170 authStateManager.tokenExpiredEvent.collectLatest {
0 commit comments