LibWordBit · 광고 페이지 카운팅

페이지 카운팅 — 워드빗 적용 명세

공통 판정 규칙(플래그 셋/소비)은 LibCore 동작 명세에 있고, 이 문서는 워드빗 앱 쪽에서 추가로 대응한 지점들만 담는다 — 명시 카운팅 호출, 진입/제외 extra 배선, 상속 요건, 디버그 도구.

01명시 카운팅 지점

화면(resume) 전환 없이 콘텐츠만 교체되거나 인게임 진행인 곳은 자동 카운트가 없으므로 increasePageCount(소스) 를 직접 호출한다. 호출 직전의 유저 터치가 FLAG 를 세워둔 상태라 "조작 1회 = 1카운트" 가 그대로 지켜진다.

화면트리거호출 위치기록 소스
학습 (단어 넘김) prev / next 버튼 BottomNavigator buttonPrev / buttonNext
학습 (오버스크롤 넘김) 끝에서 당겨서 넘기기 BaseInnerFragment BaseInnerFragment[overscroll]
퀴즈 결과 화면에서 다음 퀴즈로 (다음 버튼·화면 탭 모두 수렴) quiz/result3/Container.moveNext() quiz_next
AI 챗 챗 화면 뒤로가기 AiChatScreen AiChatScreen[back]
배달 (콘텐츠 넘김) btn_prev / btn_next DeliveryOthersActivity delivery_btn_prev / delivery_btn_next
게임 — 무한 모드 스테이지 클리어 AlphaCrossInfinityActivity (game_infinite_stage_clear 직후) game_stage_clear
게임 — 워드서치 스테이지 클리어 → 다음 퍼즐 AlphaCrossActivity (word_search_next_stage 직후) game_stage_clear
게임 — 워들 단어(한 판) 클리어 WaddleActivity (State.CORRECT 판정) game_word_clear

클리어/넘김 직후 이어지는 결과 화면 표시·다음 스테이지 전환은 FLAG 가 이미 소비된 뒤라 중복 카운트가 붙지 않는다. AlphaCrossReviewInfinityActivity(복습 무한)와 MatchingGameActivity(매칭)는 카운팅 대상에서 제외했다.

02진입 계상 · 노티 제외 배선

진입 계상

Splash → Main

BaseSplash.goMain()EXTRA_NOTE_USER_ACTION extra 를 실어 Main 을 시작하고, BaseActivity2.onCreate 가 1회 소비하며 FLAG 를 켠다 → Main 첫 resume 이 1회 계상. 앱오픈 광고 유무와 무관하며, launch 시점에 직접 켜지 않는 이유(Splash finish 의 무효화와 경합)는 LibCore 명세 01장 부가 정보 참조.

노티 제외

nextStep "type" 자동 분기

MainActivity.nextStep 의 노티 자동 실행 3경로가 대상 인텐트에 EXTRA_SKIP_PAGE_COUNT 를 부여한다 — ReviewActivity, LearnStatisticsActivity(goStatistic, fromNoti 일 때만), DeliveryOthersActivity. 해당 액티비티와 내부 fragment 전부 카운트 제외(수명 내내). 단 노티 진입의 광고 게이트는 setAdEnable 로 별도 개방된다(LibCore 명세 05장).

03상속 요건 — BaseActivity2 체인

터치 FLAG(dispatchTouchEvent/dispatchKeyEvent)·resume 카운팅·광고 공통 처리는 전부 BaseActivity2 에 있다. 콘텐츠 화면은 반드시 이 체인에 속해야 한다.

 BaseActivity2
   ├─ LockScreenActivity2 ─┬─ MainActivity
   │                       ├─ AiActivity          // AI 챗 — 이 체인이라 FLAG/카운팅/광고 처리 정상
   │                       ├─ HanjaCategoryActivity 등
   ├─ ReviewActivity · DeliveryOthersActivity · BriefingActivity · 게임 액티비티들 …
BaseActivity2 미상속 (허용 목록)실제 부모사유
BaseSplash (+ 언어모듈 SplashActivity)FragmentActivity스플래시 — 카운트 대상 아님, 광고는 자체 getOpenAD
OnBoardingActivityComponentActivity온보딩
HanjaExtraPermissionActivityComponentActivity권한 안내
DrawOverlayPermissionActivityActivity오버레이 권한 안내

새 콘텐츠 화면을 이 목록 밖의 부모로 만들면 그 화면의 터치가 FLAG 를 세우지 못해 그 화면발(發) 전환이 전부 카운트에서 빠진다. 위 4개처럼 비콘텐츠 화면이 아닌 한 BaseActivity2 계열을 상속할 것. (검증 사례: AI 챗 진입 광고의 리셋 미동작 의심 건 — 실제로는 AiActivity : LockScreenActivity2 로 체인이 정상이었고, 리셋도 AdFullDialog[dismiss] 에서 정상 실행됨을 로그로 확인했다.)

04디버그 도구

도구여는 법 / 보는 법
AD INFO 오버레이 켜기 설정 → 기록 삭제 항목 롱클릭 (off 상태면 visible 로 켜짐)
광고 강제선택 바텀시트 visible 상태에서 같은 항목 롱클릭 — 광고 타입 강제, 이벤트 로그 오버레이, 광고 배경 반투명 토글. 끄기는 시트 안 "AD INFO 오버레이 안 보이게" 버튼으로만
[PC] 카운트 타임라인 바텀시트에서 이벤트 로그 오버레이 on → updatePageCount : N (from 소스)setAdPageAndTimeReset → count 0(리셋) 이 실시간 표시. 리셋이 안 보이면 "초기화 안 됨" 으로 오인하기 쉬우니 리셋 줄까지 확인할 것
로그캣 adb logcat | grep -E "updatePageCount|setAdPageAndTimeReset|setAdEnable|skip increasePageCount"