Repository navigation
[NM-428] dwell_ms 를 화면 노출 시간 누적으로 변경, dwell_bucket 추가 - #159
Merged
Merged
Conversation
pill_confirm.dwell_ms 의 정의를 "수정 화면에 마지막으로 진입한 시각부터의 벽시계"에서 "수정 화면이 실제로 떠 있던 시간의 누적"으로 바꾼다. 기존 값은 앱을 백그라운드로 내린 시간, 다른 탭에 가 있던 시간이 모두 섞여 있었고, 뒤로 나갔다 다시 들어오면 새 화면이라 0부터 다시 셌다. 사용자가 알약 하나를 확정하는 데 실제로 들인 시간을 재려던 지표인데 그 어느 쪽도 맞지 않았다. - PillDwellTracker 신규. iOS 는 앱을 백그라운드로 내려도 viewDidDisappear 를 부르지 않으므로 viewDidAppear/viewDidDisappear 와 didEnterBackground/willEnterForeground 두 쌍을 모두 관측해야 한다. - 누적기를 Coordinator 가 소유해 PillEditVC 가 다시 만들어져도 값이 이어진다. Coordinator 는 탭당 하나로 앱 수명 내내 살아 있어 새 인식 세션마다 reset() 한다. - 수동 추가 알약은 애초에 isManual 로 pill_confirm 자체가 나가지 않아 대상이 아니다. - dwell_bucket 추가 — Int 는 GA4 측정항목으로만 등록되어 분류 축에서 (not set) 이 된다. 1분까지는 기존 구간을 두고 그 뒤로 5분까지 30초 단위. 라벨이 mm:ss 인 이유는 초와 분을 섞으면(30초-1분 · 1-2분) 사전순 정렬이 시간순과 어긋나기 때문이다.⚠️ 옛 dwell_ms 와 새 dwell_ms 는 의미가 달라 같은 축에 놓고 비교하면 안 된다. 실측(2026-09-02, 시뮬레이터) - 탭 전환 3분 49초 자리비움: 전체 벽시계 274.9초 → 기록 45.6초. 경계 세 개가 모두 screen_view 로 남아 구간 합 45.569초 vs 기록 45.571초. - 백그라운드 4분: 3차 방문 벽시계 317.3초 → 기록 236.8초(45.6+112.9+77.4 누적). 함께: 분석 QA용 실행 인자(-FIRDebugEnabled 등)를 꺼진 채로 스킴에 주입한다. 손으로 넣으면 tuist generate 때마다 날아가서 매번 다시 쳐야 했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019qc4S5fQbGW3fnZMh7bPb8
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.
관련 이슈
변경 요약
pill_confirm.dwell_ms를 "마지막 진입 시각부터의 벽시계"에서 "수정 화면이 실제로 떠 있던 시간의 누적" 으로 바꾸고, 분포용dwell_bucket을 추가한다.변경 내용
무엇이 틀렸었나
사용자가 알약 하나를 확정하는 데 실제로 들인 시간을 재려던 지표인데, 기존 값에는
어느 쪽도 "고민한 시간"이 아니다. 잠깐 다른 앱 보고 온 사용자가 오래 고민한 사용자로 잡혔다.
어떻게 고쳤나
PillDwellTracker신규. iOS 는 앱을 백그라운드로 내려도viewDidDisappear를 부르지 않는다. 그래서viewDidAppear/viewDidDisappear와didEnterBackground/willEnterForeground두 쌍을 모두 관측해야 한다. 한 쌍만 보면 백그라운드 시간이 그대로 새어 들어온다.DrugIdentificationCoordinator가 소유해PillEditVC가 다시 만들어져도 값이 이어진다. Coordinator 는 탭당 하나로 앱 수명 내내 살아 있으므로 새 인식 세션마다reset()한다.isManual로pill_confirm자체가 나가지 않아 대상이 아니다(NM-187).dwell_bucketInt 는 GA4 측정항목으로만 등록되어 분류 축에서
(not set)이 된다. 같은 이벤트의edit_count_bucket·edited_attrs와 교차하면 "많이 고친 알약이 오래 걸리는가"를 바로 볼 수 있다.1분까지는 기존 구간을 그대로 두고, 그 뒤로 5분까지 30초 단위.
mm:ss고정자리인 이유는 GA4가 문자열을 사전순 정렬해서, 단위를 섞으면 정렬이 시간순과 어긋나기 때문이다.함께 들어간 것
Projects/App/Project.swift에 분석 QA용 실행 인자(-FIRDebugEnabled,-FIRAnalyticsDebugEnabled)를 꺼진 채로 스킴에 주입한다. 손으로 넣으면tuist generate때마다 날아가서 매번 다시 쳐야 했다. 기본을 꺼 두는 건 켜 두면 모든 개발 실행이 DebugView 로 흘러 QA 세션과 섞이기 때문.옛
dwell_ms와 새dwell_ms는 의미가 다르다. 같은 축에 놓고 비교하면 안 된다. 리포트에서 이 지표의 추이를 보면 배포 시점에 값이 뚝 떨어지는데, 개선이 아니라 정의가 바뀐 것이다. GA4 주석(annotation)을 달아 두는 게 좋겠다.테스트
tuist build AppBuild Succeeded)실측 (2026-09-02, 시뮬레이터) — 세 왜곡이 모두 잡혔다.
dwell_msscreen_view로 로그에 남아 구간 합 45.569초 vs 기록 45.571초, 0.002초 일치.체크리스트
[NM-XXX] 요약형식<type>/NM-XXX-요약형식[NM-XXX] type: 요약형식