[FEAT/#912] 데이터 트래킹 로그 정리 - #917
Open
nahy-512 wants to merge 27 commits into
Open
Conversation
- view_page 공통 이벤트로 변경 (logGlobalAction 사용) - click_write_diary.textfield 이벤트 추가 - click_write_diary.back_modal 이벤트 명명 변경 (modal -> back_modal) - click_write_diary.scan_text 이벤트 추가 - click_write_diary.submit_entry 이벤트 명명 변경 (submit_cta -> submit_entry) - click_dropdown 공통 이벤트로 마이그레이션 (logGlobalAction 사용)
- view_page 공통 이벤트로 변경 (logGlobalAction 사용) - click_vocabulary.sort_changed 이벤트 명명 변경 (voca_sort_changed -> sort_changed) - click_vocabulary.voca_lookup 이벤트 마이그레이션 (logPageAction 사용)
- view_page 공통 이벤트로 변경 (logGlobalAction 사용) - click_toast_action 공통 이벤트로 마이그레이션 (logGlobalAction 사용) - click_feedback.post_diary 이벤트 명명 변경 (submitted_post_diary -> post_diary)
- view_page 공통 이벤트로 통일 (logGlobalAction 사용) - click_feed.refresh 이벤트 마이그레이션 (logPageAction 사용) - MY_FEED 페이지 진입도 view_page 공통 이벤트로 통일
- view_page 공통 이벤트로 변경 (logGlobalAction 사용) - FEED_PROFILE 페이지 명시 - profile_user_id 속성 유지
- click_home.more_menu 이벤트 마이그레이션 (logPageAction 사용) - click_home.switch_language 이벤트 마이그레이션 (logPageAction 사용) - 속성 정리 (불필요한 중복 속성 제거)
- 피드에서 프로필 클릭 시 이벤트 기록 - profile_user_id, entry_source 속성 추가
- 기록 살리기 버튼 클릭 시 이벤트 기록
- FEED_PROFILE 제거 (USER_PROFILE과 동일 의미) - MYPAGE 추가 - FeedProfileScreen에서 targetUserId 기준으로 MY_FEED/USER_PROFILE 구분 * userId 0: 나의 피드 프로필 (my_feed) * 그 외: 타인의 프로필 (user_profile)
HilingualLoadErrorView에 page 파라미터를 추가해 컴포넌트 내부에서 이벤트를 수집한다.
호출부마다 중복 계측하지 않도록 하고, page가 null이면 수집하지 않는다.
- LoadErrorViewAction별 이벤트 매핑
* NotFound -> click_{page}.empty_data_confirm
* Back -> click_{page}.server_error_confirm
* Retry -> click_{page}.server_error_retry
* 탑바 뒤로가기 -> click_{page}.server_error_go_back
- page 전달 화면
* home, vocabulary, feed, posted_diary, feedback, mypage
* my_feed/user_profile (FeedProfileScreen)
전역 네트워크 에러 오버레이는 MainScreen 한 곳에서만 노출되므로,
현재 백스택을 Page로 변환하는 매퍼를 추가해 화면별로 이벤트를 수집한다.
- click_{page}.network_error_retry: 다시 시도 버튼
- click_{page}.network_error_go_back: 탑바 뒤로가기
- route -> Page 매핑
* Home/Voca/Feed/MyPage/DiaryWrite/DiaryFeedback/FeedDiary
* FeedProfileGraph는 userId로 my_feed/user_profile 구분
* 대응 화면이 없으면 수집하지 않음
- AI_FEEDBACK 제거에 따라 DiaryWriteScreen의 재요청 이벤트를
click_feedback_loading.server_error_retry로 변경
- 매퍼에서 참조할 수 있도록 FeedProfileGraph 공개
- view_home.page -> view_page 공통 이벤트로 변경 - click_home.profile을 logPageAction으로 변경 - click_home.diary_write를 logPageAction으로 변경 - view_home.opend_diary_view -> click_home.diary_view (오탈자 수정, 트리거 view -> click, entry_source 속성 추가)
화면별로 나뉘어 수집되던 공통 컴포넌트 액션을 공통명으로 통합하고, 남아있던 구 logEvent 호출을 모두 제거한다. - click_write_diary.back_diary/click_feedback.back_feedback -> click_back - click_feedback.bookmark_action -> bookmark_action - click_feed.empathy_action -> click_empathy_action - view_posted_diary.page -> view_page - click_posted_diary.feedback_toggle -> click_posted_diary.toggle - click_feedback.toggle을 logPageAction으로 변경 공통 이벤트는 page 프로퍼티를 자동으로 부여하므로 수동 page 전달을 제거
푸시 알림 클릭으로 진입한 경우 도착 화면과 알림 종류를 함께 수집한다. - 알림 PendingIntent에 notification_type extra 추가 (daily/weekly/social) - MainActivity에서 extra를 소비해 MainScreen으로 전달 - 딥링크 이동이 성공한 뒤 도착 화면을 page 프로퍼티로 수집 - presentation:main에 core:notification 의존성 추가
기록 살리기 보상형 광고의 시청 결과를 수집한다. - completed: 보상 획득 - dismissed: 중도 이탈 - failed: 광고 로드 실패 보상 획득 후에도 닫힘 콜백이 호출되므로 플래그로 중복 수집을 막는다.
- view_page: 온보딩 진입 - click_onboarding.skip: 건너뛰기 클릭 onboarding_step에 이탈 시점 페이지 번호(1부터)를 담는다
- click_vocab_pronunciation_btn_play: 재생 시작 시점만 수집 (정지는 제외) - bookmark_action: 단어장 목록/상세 모달 북마크 토글
DiaryCard의 TTS 재생 버튼 클릭을 수집한다. 호출부마다 중복 계측하지 않도록 컴포넌트 내부에서 수집하고, page가 null이면 수집하지 않는다. - GrammarSpellingTab -> DiaryCard로 page 전달 - feedback(피드백), posted_diary(게시된 일기)에서 수집 - 재생 시작 시점만 수집 (일시정지는 제외)
- LoadErrorView의 Back 타입 버튼을 server_error_go_back으로 변경
버튼 문구가 '이전 페이지로 돌아가기'이므로 탑바 뒤로가기와 동일한 이벤트로 수집한다
- HilingualErrorDialog 확인 버튼 수집 추가
* DialogType.ERROR -> click_{page}.server_error_confirm
* DialogType.NOT_FOUND -> click_{page}.empty_data_confirm
* 전역 다이얼로그이므로 MainScreen의 route 매퍼로 화면을 판별한다
공통 이벤트가 피드에서만 수집되고 있어 나머지 화면을 추가한다. - click_empathy_action: posted_diary, my_feed/user_profile 추가 - bookmark_action: posted_diary 추천 표현 탭 추가
타인의 프로필에서 팔로우 버튼을 클릭했을 때 수집한다. 액션 버튼이 차단 해제/팔로우/언팔로우를 겸하므로 차단 상태가 아니고 아직 팔로우하지 않은 경우에만 수집한다. entry_id에는 대상 사용자 id를 담는다.
단어장에서는 북마크 수집이 필요하지 않아 제거한다. 이로써 bookmark_action은 일기 화면 두 곳에서만 동일한 스키마로 수집된다.
모든 호출부가 logGlobalAction/logPageAction으로 이관되어 사용처가 없는 logEvent 오버로드 3개를 제거한다.
style: 이벤트 호출부의 불필요한 주석 제거 코드가 그대로 말하고 있는 내용을 반복하는 주석을 정리한다. - FeedProfileScreen: userId 0 분기, 액션 버튼 조건 설명 - MainScreen: 푸시 알림 진입 조건 설명 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
showInterstitialAd가 닫힘/표시실패/로드실패를 onAdDismissed 하나로 넘겨주고 있어 결과를 구분할 수 없다. InterstitialAdResult를 반환하도록 바꾸고 이벤트를 수집한다. - DISMISSED -> completed - FAILED -> failed (로드 실패, 표시 실패, Activity 종료) - page는 feedback_loading 전면 광고는 보상형과 달리 중도 이탈 신호가 없어 두 가지 결과만 수집된다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related issue 🛠
Work Description ✏️
이벤트 네이밍 변경안 기준으로 Amplitude 이벤트 수집을 정비했습니다.
1. Tracker API를 Global / Page로 분리
이벤트 유형이 공통/화면 종속 두 가지로 나뉘게 됨에 따라 이벤트 네이밍 형태도 달라져 기존
logEvent오버로딩으로만 쓰던 것을 이벤트 유형이 구분되도록 메서드를 나눴습니다.page프로퍼티는logGlobalAction이 내부에서 주입합니다.2. 공통 컴포넌트 내부에서 계측
에러 화면은 12곳에서 호출해 호출부마다 붙이면 누락이 생기기에
page만 내려주고 컴포넌트 안에서 이벤트를 쏩니다.page가null이면 수집하지 않습니다.HilingualLoadErrorViewserver_error_retry/server_error_go_back/empty_data_confirmHilingualErrorDialogserver_error_confirm/empty_data_confirmHilingualNetworkErrorViewnetwork_error_retry/network_error_go_backDiaryCarddiary_pronunciation_btn_play3. route → Page 매퍼 추가
네트워크 에러 오버레이와 에러 다이얼로그는
MainScreen전역에 하나뿐이라, 현재 백스택을Page로 변환하는 매퍼를 추가했습니다. 피드 프로필은userId로my_feed/user_profile을 구분합니다.4. Page enum 정비
FEEDBACK_LOADING,USER_PROFILE,MYPAGEAI_FEEDBACK→FEEDBACK_LOADING,FEED_PROFILE→USER_PROFILE과 동일 의미Screenshot 📸
기존
logEvent오버로드 3개는page파라미터 유무가 곧 네이밍 규칙인데 이름에 드러나지 않았습니다. 그래서 공통 컴포넌트를 화면별로 쪼개 수집하는 실수가 반복됐고, 노션 "수정 필요" 10건 중 4건이 이 유형이었습니다.Uncompleted Tasks 😅
To Reviewers 📢