Skip to content

Commit 9cde977

Browse files
authored
Merge pull request #377 from Runnect/feature/firebase-event-tracking
feat: Firebase Analytics 이벤트 계측 확장 (Phase 1/2/3, 64개)
2 parents 52d9af3 + 6d2aebe commit 9cde977

19 files changed

Lines changed: 367 additions & 29 deletions

File tree

app/src/main/java/com/runnect/runnect/presentation/countdown/CountDownActivity.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import com.runnect.runnect.binding.BindingActivity
1212
import com.runnect.runnect.data.dto.CourseData
1313
import com.runnect.runnect.databinding.ActivityCountDownBinding
1414
import com.runnect.runnect.presentation.run.RunActivity
15+
import com.runnect.runnect.util.analytics.Analytics
16+
import com.runnect.runnect.util.analytics.EventName
17+
import com.runnect.runnect.util.analytics.EventName.Param
1518
import com.runnect.runnect.util.extension.getCompatibleParcelableExtra
1619
import timber.log.Timber
1720

@@ -21,6 +24,11 @@ class CountDownActivity: BindingActivity<ActivityCountDownBinding>(R.layout.acti
2124
override fun onCreate(savedInstanceState: Bundle?) {
2225
super.onCreate(savedInstanceState)
2326

27+
Analytics.logEvent(
28+
EventName.VIEW_COUNTDOWN,
29+
Param.COURSE_ID to courseData?.courseId
30+
)
31+
2432
val intentToRun = Intent(this, RunActivity::class.java)
2533
val numList = arrayListOf(
2634
AppCompatResources.getDrawable(this, R.drawable.anim_num1),
@@ -32,6 +40,10 @@ class CountDownActivity: BindingActivity<ActivityCountDownBinding>(R.layout.acti
3240
}
3341

3442
override fun onBackPressed() {
43+
Analytics.logEvent(
44+
EventName.CLICK_CANCEL_COUNTDOWN,
45+
Param.COURSE_ID to courseData?.courseId
46+
)
3547
finish()
3648
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right)
3749
}

app/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ import com.runnect.runnect.presentation.profile.ProfileActivity
3939
import com.runnect.runnect.presentation.scheme.SchemeActivity
4040
import com.runnect.runnect.presentation.state.UiStateV2
4141
import com.runnect.runnect.util.analytics.Analytics
42+
import com.runnect.runnect.util.analytics.EventName
4243
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_SHARE
4344
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_USER_PROFILE
45+
import com.runnect.runnect.util.analytics.EventName.Param
4446
import com.runnect.runnect.util.analytics.EventName.VIEW_COURSE_DETAIL
4547
import com.runnect.runnect.util.custom.dialog.CommonDialogFragment
4648
import com.runnect.runnect.util.custom.dialog.CommonDialogText
@@ -187,6 +189,11 @@ class CourseDetailActivity :
187189
}
188190

189191
private fun navigateToCountDownScreen() {
192+
Analytics.logEvent(
193+
EventName.CLICK_RUN_FROM_DETAIL,
194+
Param.COURSE_ID to courseDetail.courseId,
195+
Param.DISTANCE_M to courseDetail.distance
196+
)
190197
Intent(
191198
this@CourseDetailActivity,
192199
CountDownActivity::class.java
@@ -545,6 +552,12 @@ class CourseDetailActivity :
545552
val response = state.data
546553
binding.tvCourseDetailScrapCount.text = response.scrapCount.toString()
547554
binding.ivCourseDetailScrap.isSelected = response.scrapTF
555+
if (!response.scrapTF) {
556+
Analytics.logEvent(
557+
EventName.CLICK_UNSCRAP,
558+
Param.COURSE_ID to publicCourseId
559+
)
560+
}
548561
}
549562

550563
is UiStateV2.Failure -> {

app/src/main/java/com/runnect/runnect/presentation/discover/pick/DiscoverPickActivity.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import com.runnect.runnect.presentation.discover.pick.adapter.DiscoverPickAdapte
1414
import com.runnect.runnect.presentation.discover.upload.DiscoverUploadActivity
1515
import com.runnect.runnect.presentation.search.SearchActivity
1616
import com.runnect.runnect.presentation.state.UiStateV2
17+
import com.runnect.runnect.util.analytics.Analytics
18+
import com.runnect.runnect.util.analytics.EventName
1719
import com.runnect.runnect.util.custom.deco.GridSpacingItemDecoration
1820
import com.runnect.runnect.util.extension.applyScreenEnterAnimation
1921
import com.runnect.runnect.util.extension.navigateToPreviousScreenWithAnimation
@@ -30,6 +32,7 @@ class DiscoverPickActivity :
3032
super.onCreate(savedInstanceState)
3133
binding.vm = viewModel
3234
binding.lifecycleOwner = this
35+
Analytics.logEvent(EventName.VIEW_DISCOVER_PICK)
3336

3437
initLayout()
3538
addListener()

app/src/main/java/com/runnect/runnect/presentation/discover/search/DiscoverSearchActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ import com.runnect.runnect.presentation.discover.model.EditableDiscoverCourse
2424
import com.runnect.runnect.presentation.discover.search.adapter.DiscoverSearchAdapter
2525
import com.runnect.runnect.presentation.state.UiStateV2
2626
import com.runnect.runnect.util.analytics.Analytics
27+
import com.runnect.runnect.util.analytics.EventName
2728
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_TRY_SEARCH_COURSE
29+
import com.runnect.runnect.util.analytics.EventName.Param
2830
import com.runnect.runnect.util.analytics.EventName.VIEW_COURSE_SEARCH
2931
import com.runnect.runnect.util.custom.deco.GridSpacingItemDecoration
3032
import com.runnect.runnect.util.extension.applyScreenEnterAnimation
@@ -173,6 +175,11 @@ class DiscoverSearchActivity :
173175
dismissProgressBar()
174176
showRecyclerView()
175177
searchAdapter.submitList(state.data)
178+
Analytics.logEvent(
179+
EventName.ACTION_COURSE_SEARCH_EXECUTE,
180+
Param.KEYWORD to binding.etDiscoverSearchTitle.text.toString(),
181+
Param.RESULT_COUNT to (state.data?.size ?: 0)
182+
)
176183
}
177184

178185
else -> {

app/src/main/java/com/runnect/runnect/presentation/discover/upload/DiscoverUploadActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import com.runnect.runnect.presentation.event.ScreenRefreshEvent
1818
import com.runnect.runnect.presentation.event.ScreenRefreshEventBus
1919
import com.runnect.runnect.presentation.state.UiState
2020
import com.runnect.runnect.util.analytics.Analytics
21+
import com.runnect.runnect.util.analytics.EventName
2122
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_COURSE_UPLOAD
23+
import com.runnect.runnect.util.analytics.EventName.Param
2224
import com.runnect.runnect.util.analytics.EventName.VIEW_COURSE_UPLOAD
2325
import com.runnect.runnect.util.extension.applyScreenExitAnimation
2426
import com.runnect.runnect.util.extension.getCompatibleParcelableExtra
@@ -113,6 +115,11 @@ class DiscoverUploadActivity :
113115
}
114116

115117
private fun handleReturnToDiscover() {
118+
Analytics.logEvent(
119+
EventName.ACTION_COURSE_UPLOAD_COMPLETE,
120+
Param.COURSE_ID to viewModel.id,
121+
Param.DISTANCE_M to uploadCourse?.distance?.toDoubleOrNull()
122+
)
116123
showToast("업로드 완료!")
117124
binding.indeterminateBar.isVisible = false
118125

app/src/main/java/com/runnect/runnect/presentation/draw/DrawActivity.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.runnect.runnect.presentation.draw
22

3+
import kotlin.math.roundToInt
34
import android.content.Intent
45
import android.graphics.Bitmap
56
import android.graphics.Color
@@ -49,6 +50,7 @@ import com.runnect.runnect.presentation.state.UiState
4950
import com.runnect.runnect.util.DepartureSetMode
5051
import com.runnect.runnect.util.analytics.Analytics
5152
import com.runnect.runnect.util.analytics.EventName
53+
import com.runnect.runnect.util.analytics.EventName.Param
5254
import com.runnect.runnect.util.custom.dialog.RequireLoginDialogFragment
5355
import com.runnect.runnect.util.extension.PermissionUtil
5456
import com.runnect.runnect.util.extension.hideKeyboard
@@ -110,6 +112,7 @@ class DrawActivity : BindingActivity<ActivityDrawBinding>(R.layout.activity_draw
110112
binding.model = viewModel
111113
binding.lifecycleOwner = this
112114

115+
Analytics.logEvent(EventName.VIEW_COURSE_DRAWING)
113116
initMapView()
114117
getSearchIntent()
115118
addObserver()
@@ -492,6 +495,14 @@ class DrawActivity : BindingActivity<ActivityDrawBinding>(R.layout.activity_draw
492495
UiState.Loading -> showLoadingBar()
493496
UiState.Success -> {
494497
hideLoadingBar()
498+
val distanceM = ((viewModel.distanceSum.value ?: 0f) * 1000f).roundToInt()
499+
Analytics.logEvent(
500+
EventName.ACTION_COURSE_DRAWING_COMPLETE,
501+
Param.COURSE_ID to viewModel.uploadCourseId,
502+
Param.DISTANCE_M to distanceM,
503+
Param.POINT_COUNT to touchList.size,
504+
Param.DEPARTURE_NAME to viewModel.departureName
505+
)
495506
notifyCreateFinish()
496507
}
497508

@@ -552,6 +563,12 @@ class DrawActivity : BindingActivity<ActivityDrawBinding>(R.layout.activity_draw
552563
dialog.dismiss()
553564
}
554565
}
566+
val resultDistanceM = ((viewModel.distanceSum.value ?: 0f) * 1000f).roundToInt()
567+
Analytics.logEvent(
568+
EventName.VIEW_COURSE_COMPLETE_RESULT,
569+
Param.COURSE_ID to viewModel.uploadCourseId,
570+
Param.DISTANCE_M to resultDistanceM
571+
)
555572
dialog.show()
556573
}
557574

app/src/main/java/com/runnect/runnect/presentation/endrun/EndRunActivity.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ import com.runnect.runnect.databinding.ActivityEndRunBinding
1919
import com.runnect.runnect.presentation.MainActivity
2020
import com.runnect.runnect.presentation.state.UiState
2121
import com.runnect.runnect.util.analytics.Analytics
22+
import com.runnect.runnect.util.analytics.EventName
2223
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_BACK_RUNNING_TRACKING
2324
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_STORE_RUNNING_TRACKING
25+
import com.runnect.runnect.util.analytics.EventName.Param
2426
import com.runnect.runnect.util.custom.toast.RunnectToast
2527
import com.runnect.runnect.util.extension.hideKeyboard
2628
import com.runnect.runnect.util.extension.round
@@ -60,6 +62,15 @@ class EndRunActivity: BindingActivity<ActivityEndRunBinding>(R.layout.activity_e
6062
backBtn()
6163
editTextController()
6264
getIntentValue()
65+
66+
val totalTimeSec = ((runToEndRunData.timerHour ?: 0) * 3600) + ((runToEndRunData.timerMinute ?: 0) * 60) + (runToEndRunData.timerSecond ?: 0)
67+
Analytics.logEvent(
68+
EventName.VIEW_END_RUN,
69+
Param.COURSE_ID to runToEndRunData.courseId,
70+
Param.TOTAL_DISTANCE_M to runToEndRunData.totalDistance,
71+
Param.TOTAL_TIME_SEC to totalTimeSec
72+
)
73+
6374
setTimerViewModelValue()
6475
transferMinuteForCalcPace()
6576
setPaceViewModelValue()
@@ -157,6 +168,10 @@ class EndRunActivity: BindingActivity<ActivityEndRunBinding>(R.layout.activity_e
157168
private fun saveRecord() {
158169
binding.btnEndRunSave.setOnClickListener {
159170
Analytics.logClickedItemEvent(EVENT_CLICK_STORE_RUNNING_TRACKING)
171+
Analytics.logEvent(
172+
EventName.CLICK_SAVE_RUN_RECORD,
173+
Param.COURSE_ID to viewModel.courseId.value
174+
)
160175
viewModel.postRecord(
161176
RequestPostRunningHistory(
162177
courseId = viewModel.courseId.value!!,

app/src/main/java/com/runnect/runnect/presentation/login/GiveNicknameActivity.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import com.runnect.runnect.binding.BindingActivity
1111
import com.runnect.runnect.databinding.ActivityGiveNicknameBinding
1212
import com.runnect.runnect.presentation.MainActivity
1313
import com.runnect.runnect.presentation.state.UiState
14+
import com.runnect.runnect.util.analytics.Analytics
15+
import com.runnect.runnect.util.analytics.EventName
16+
import com.runnect.runnect.util.analytics.EventName.Param
1417
import com.runnect.runnect.util.extension.hideKeyboard
1518
import com.runnect.runnect.util.extension.showToast
1619
import com.runnect.runnect.util.preference.AuthUtil.saveToken
@@ -24,6 +27,7 @@ class GiveNicknameActivity :
2427
super.onCreate(savedInstanceState)
2528
binding.vm = viewModel
2629
binding.lifecycleOwner = this
30+
Analytics.logEvent(EventName.VIEW_GIVE_NICKNAME)
2731
addListener()
2832
addObserver()
2933
}
@@ -70,6 +74,10 @@ class GiveNicknameActivity :
7074
}
7175

7276
private fun handleSuccessfulSignup() {
77+
Analytics.logEvent(
78+
EventName.ACTION_NICKNAME_COMPLETE,
79+
Param.NICKNAME_LENGTH to (viewModel.nickName.value?.length ?: 0)
80+
)
7381
saveSignTokenInfo()
7482
showToast("회원가입 되었습니다")
7583
binding.indeterminateBar.isVisible = false

app/src/main/java/com/runnect/runnect/presentation/login/LoginActivity.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import com.runnect.runnect.databinding.ActivityLoginBinding
1313
import com.runnect.runnect.presentation.MainActivity
1414
import com.runnect.runnect.presentation.state.UiState
1515
import com.runnect.runnect.util.analytics.Analytics
16+
import com.runnect.runnect.util.analytics.EventName
1617
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_VISITOR
1718
import com.runnect.runnect.util.analytics.EventName.EVENT_VIEW_SOCIAL_LOGIN
19+
import com.runnect.runnect.util.analytics.EventName.Param
1820
import com.runnect.runnect.util.extension.showSnackbar
1921
import com.runnect.runnect.util.extension.showToast
2022
import com.runnect.runnect.util.preference.AuthUtil.getAccessToken
@@ -106,19 +108,37 @@ class LoginActivity :
106108
}
107109
}
108110
viewModel.errorMessage.observe(this) {
111+
val method = if (::socialLogin.isInitialized && socialLogin is GoogleLogin) "google" else "kakao"
112+
Analytics.logEvent(
113+
EventName.ACTION_LOGIN_FAIL,
114+
Param.METHOD to method,
115+
Param.ERROR_CODE to "LOGIN_FAIL"
116+
)
109117
showSnackbar(binding.root, it)
110118
Timber.tag(ContentValues.TAG).d("로그인 통신 실패: $it")
111119
}
112120
}
113121

114122
private fun handleSuccessfulLogin() {
123+
val method = if (::socialLogin.isInitialized && socialLogin is GoogleLogin) "google" else "kakao"
124+
Analytics.logEvent(
125+
EventName.ACTION_LOGIN_SUCCESS,
126+
Param.METHOD to method,
127+
Param.IS_NEW_USER to false
128+
)
115129
saveSignTokenInfo()
116130
moveToMain()
117131
Toast.makeText(this@LoginActivity, MESSAGE_LOGIN_SUCCESS, Toast.LENGTH_SHORT).show()
118132
binding.indeterminateBar.isVisible = false
119133
}
120134

121135
private fun handleSuccessfulSignup() {
136+
val method = if (::socialLogin.isInitialized && socialLogin is GoogleLogin) "google" else "kakao"
137+
Analytics.logEvent(
138+
EventName.ACTION_LOGIN_SUCCESS,
139+
Param.METHOD to method,
140+
Param.IS_NEW_USER to true
141+
)
122142
saveSignTokenInfo()
123143
moveToGiveNickName()
124144
}

app/src/main/java/com/runnect/runnect/presentation/mypage/editname/MyPageEditNameActivity.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import com.runnect.runnect.R
1313
import com.runnect.runnect.binding.BindingActivity
1414
import com.runnect.runnect.databinding.ActivityMyPageEditNameBinding
1515
import com.runnect.runnect.presentation.state.UiState
16+
import com.runnect.runnect.util.analytics.Analytics
17+
import com.runnect.runnect.util.analytics.EventName
18+
import com.runnect.runnect.util.analytics.EventName.Param
1619
import com.runnect.runnect.util.extension.hideKeyboard
1720
import com.runnect.runnect.util.extension.showToast
1821
import dagger.hilt.android.AndroidEntryPoint
@@ -25,6 +28,7 @@ class MyPageEditNameActivity :
2528
super.onCreate(savedInstanceState)
2629
binding.vm = viewModel
2730
binding.lifecycleOwner = this
31+
Analytics.logEvent(EventName.VIEW_EDIT_PROFILE)
2832
initLayout()
2933
addListener()
3034
addObserver()
@@ -66,6 +70,10 @@ class MyPageEditNameActivity :
6670
UiState.Loading -> binding.indeterminateBar.isVisible = true
6771
UiState.Success -> {
6872
binding.indeterminateBar.isVisible = false
73+
Analytics.logEvent(
74+
EventName.ACTION_EDIT_PROFILE_COMPLETE,
75+
Param.CHANGED_FIELDS to "nickname"
76+
)
6977
setResult(
7078
RESULT_OK,
7179
Intent().putExtra(EXTRA_NICK_NAME, viewModel.nickName.value)

0 commit comments

Comments
 (0)