[feat] #223 GA4 이벤트 추가#227
Conversation
…e, favorite_booth_filter_toggle, favorite_booth_view, brand_filter_manage_view) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 48 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughFirebase Analytics 이벤트 스펙과 작업 가이드를 추가하고, 아카이브·지도 기능의 이벤트 및 로깅 지점을 확장했습니다. 알림 클릭을 식별하는 인텐트 플래그와 Changes애널리틱스 이벤트 추가 및 로깅
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant NekiFirebaseMessagingService
participant MainActivity
participant AnalyticsLogger
NekiFirebaseMessagingService->>NekiFirebaseMessagingService: 알림 PendingIntent에 출처 플래그 추가
NekiFirebaseMessagingService->>MainActivity: 알림 클릭 인텐트 전달
MainActivity->>AnalyticsLogger: NotificationClick 기록
Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- create-issue, create-pr, firebase-analytics-event 스킬 레포 관리 - analytics-spec.md: #223 신규 이벤트 반영 (photo_add_to_album, booth_favorite_add/remove, favorite_booth_filter_toggle, favorite_booth_view, brand_filter_manage_view) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
286d601 to
18afd1b
Compare
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.claude/skills/firebase-analytics-event/analytics-spec.md:
- Around line 5-8: The Firebase analytics spec is inconsistent because the
common rule in analytics-spec.md says all parameter values must be converted to
String, while the event table uses native types like int and boolean for fields
such as photo_count, favorite_booth_count, has_filter, and region_changed.
Update the rules in the spec to use one consistent type policy that matches the
event table and the actual FirebaseAnalyticsLogger behavior, and make sure the
sections around the common rules and event definitions in analytics-spec.md all
reflect that same standard.
In @.claude/skills/firebase-analytics-event/SKILL.md:
- Around line 43-57: Update the Firebase Analytics skill docs to match
`FirebaseAnalyticsLogger` behavior: the current `PhotoUpload` example and event
naming summary incorrectly force all params through `toString()`. Revise the
example and bullets in `SKILL.md` to say parameter values should use the
appropriate native type (`Int`, `Long`, `Double`, `Boolean`, or `String`) so the
logger can map them to the correct `putXxx` call, while keeping the snake_case
naming rules for `ArchiveAnalyticsEvent` and `params` keys.
In
`@feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/album_detail/AlbumDetailViewModel.kt`:
- Around line 317-322: `AlbumDetailViewModel`의 `analyticsLogger.log`에서
`ArchiveAnalyticsEvent.PhotoAddToAlbum`의 `albumCount`가 `listOf(albumId).size`로
계산되고 있는데, `albumId`가 단일 값이라 항상 1입니다. `PhotoAddToAlbum` 생성부에서 불필요한 리스트 생성을 제거하고
`albumCount`를 직접 1로 전달하거나, 향후 다중 앨범을 지원할 계획이 있다면 해당 의도를 드러내는 방식으로 수정하세요.
In
`@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt`:
- Around line 138-149: `ClickShowFavoriteIcon` 처리에서 `analyticsLogger.log()`가
`reduce` 블록 안에 있어 reducer가 순수하지 않으니, `MapViewModel`의 해당 분기에서 로깅을 `reduce` 밖으로
옮기고 상태 변경만 `reduce`에 남기세요. `ClickRefreshButton`, `SelectTab`,
`handleClickBrand`처럼 먼저 새 상태를 계산한 뒤 그 값을 기준으로
`MapAnalyticsEvent.FavoriteBoothFilterOn` 또는 `FavoriteBoothFilterOff`를 외부에서
호출하도록 수정하면 됩니다.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: c9d2cb7e-6a45-4cae-b6f0-722a1369be56
📒 Files selected for processing (7)
.claude/skills/firebase-analytics-event/SKILL.md.claude/skills/firebase-analytics-event/analytics-spec.mdcore/analytics/src/main/kotlin/com/neki/android/core/analytics/event/ArchiveAnalyticsEvent.ktcore/analytics/src/main/kotlin/com/neki/android/core/analytics/event/MapAnalyticsEvent.ktfeature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/album_detail/AlbumDetailViewModel.ktfeature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.ktfeature/map/impl/src/main/java/com/neki/android/feature/map/impl/photobooth/PhotoBoothOrderChangeViewModel.kt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt (1)
126-128: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value불필요한 블록 래핑입니다.
postSideEffect호출 하나만 감싸는 단일문 블록은 다른 단일 postSideEffect 케이스(RequestLocationPermission119,ShowToast170 등)와 일관되지 않습니다. 가독성을 위해 블록을 제거하는 것을 고려하세요.♻️ 제안: 블록 제거
- MapIntent.ClickEditBrandOrder -> { - postSideEffect(MapEffect.NavigateToPhotoBoothOrderChange) - } + MapIntent.ClickEditBrandOrder -> postSideEffect(MapEffect.NavigateToPhotoBoothOrderChange)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt` around lines 126 - 128, MapViewModel의 MapIntent.ClickEditBrandOrder 분기에서 단일 postSideEffect 호출만 감싸는 불필요한 중괄호 블록을 제거해 RequestLocationPermission 및 ShowToast와 동일한 형식으로 정리하세요..claude/skills/firebase-analytics-event/SKILL.md (2)
131-138: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win
reduce내부 로깅 예시를 제거하세요.
reduce는 상태 계산만 담당하도록 유지하고, Analytics side effect는 intent 처리부 또는 상태 변경 직후에 호출하는 패턴으로 문서화해야 합니다. 현재 예시는reduce재실행 시 이벤트 중복 전송을 유도할 수 있으며, 이번 PR의FavoriteBoothFilter로깅을reduce밖으로 이동한 방향과도 맞지 않습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/skills/firebase-analytics-event/SKILL.md around lines 131 - 138, Remove the “reduce 람다 내부 로깅” example from the documentation. Update the guidance so reduce blocks only calculate and return state, while Analytics side effects are invoked in the intent handler or immediately after the state change, consistent with the FavoriteBoothFilter pattern.
175-177: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win즐겨찾기 이벤트 트리거 정의를 스펙과 맞추세요.
favorite_booth_view는analytics-spec.md의 62행·78행처럼 저장한 포토부스 탭 선택 이벤트입니다. 마커 ON/OFF는 각각favorite_booth_filter_on/favorite_booth_filter_off로 분리되어야 하므로, 현재 설명대로 구현하면 서로 다른 이벤트가 잘못 기록될 수 있습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/skills/firebase-analytics-event/SKILL.md around lines 175 - 177, Update the favorite event trigger definitions to match analytics-spec.md: define favorite_booth_view for selecting the saved photobooth tab, replace its marker ON/OFF behavior with separate favorite_booth_filter_on and favorite_booth_filter_off events, and ensure booth_favorite_add/remove remain logged only after successful API callbacks..claude/skills/firebase-analytics-event/analytics-spec.md (1)
10-16: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
user_id는 자동 수집 표에서 분리하세요.
user_id는setUserId(...)로 앱이 직접 설정하는 값이고,platform/app_version도setUserProperty(...)로 넣고 있어 이 섹션의 “Firebase 자동 수집” 표현이 부정확합니다.user_id는 별도 항목으로 옮기고, 동의/개인정보 처리 근거를 함께 적어두세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/skills/firebase-analytics-event/analytics-spec.md around lines 10 - 16, `공통 파라미터 (Firebase 자동 수집)` 섹션에서 `user_id`를 제거하고, `setUserId(...)`로 앱이 직접 설정하는 사용자 식별자 항목으로 별도 분리하세요. `platform`과 `app_version`도 `setUserProperty(...)`로 설정되는 값임을 반영해 섹션 명칭을 수정하고, `user_id` 항목에 동의 및 개인정보 처리 근거를 명시하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/src/main/java/com/neki/android/app/MainActivity.kt`:
- Around line 88-94: MainActivity.onCreate의 NotificationClick 로깅이 구성 변경 시 중복
실행되지 않도록 savedInstanceState == null 조건으로 감싸 초기 생성 시에만 EXTRA_FROM_NOTIFICATION을
확인하고 analyticsLogger.log(GlobalAnalyticsEvent.NotificationClick)을 호출하세요.
---
Outside diff comments:
In @.claude/skills/firebase-analytics-event/analytics-spec.md:
- Around line 10-16: `공통 파라미터 (Firebase 자동 수집)` 섹션에서 `user_id`를 제거하고,
`setUserId(...)`로 앱이 직접 설정하는 사용자 식별자 항목으로 별도 분리하세요. `platform`과 `app_version`도
`setUserProperty(...)`로 설정되는 값임을 반영해 섹션 명칭을 수정하고, `user_id` 항목에 동의 및 개인정보 처리 근거를
명시하세요.
In @.claude/skills/firebase-analytics-event/SKILL.md:
- Around line 131-138: Remove the “reduce 람다 내부 로깅” example from the
documentation. Update the guidance so reduce blocks only calculate and return
state, while Analytics side effects are invoked in the intent handler or
immediately after the state change, consistent with the FavoriteBoothFilter
pattern.
- Around line 175-177: Update the favorite event trigger definitions to match
analytics-spec.md: define favorite_booth_view for selecting the saved photobooth
tab, replace its marker ON/OFF behavior with separate favorite_booth_filter_on
and favorite_booth_filter_off events, and ensure booth_favorite_add/remove
remain logged only after successful API callbacks.
In
`@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt`:
- Around line 126-128: MapViewModel의 MapIntent.ClickEditBrandOrder 분기에서 단일
postSideEffect 호출만 감싸는 불필요한 중괄호 블록을 제거해 RequestLocationPermission 및 ShowToast와
동일한 형식으로 정리하세요.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: f46b559d-2bc3-4ed4-8c88-a64c3e024188
📒 Files selected for processing (7)
.claude/skills/firebase-analytics-event/SKILL.md.claude/skills/firebase-analytics-event/analytics-spec.mdapp/src/main/AndroidManifest.xmlapp/src/main/java/com/neki/android/app/MainActivity.ktapp/src/main/java/com/neki/android/app/NekiFirebaseMessagingService.ktcore/analytics/src/main/kotlin/com/neki/android/core/analytics/event/GlobalAnalyticsEvent.ktfeature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt
ikseong00
left a comment
There was a problem hiding this comment.
확인했습니다!
토끼 리뷰랑, 스킬 최신화 정도만 되면 될 것 같아요!
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…brand_order_save) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@ikseong00 토끼리뷰 반영했고, 머지하겠습니다~ 027b05a |
🔗 관련 이슈
📙 작업 설명
시작 전->진행 중으로 변경된 이벤트들이 이번 PR에 반영된 항목입니다.🧪 테스트 내역
📸 스크린샷 또는 시연 영상
💬 추가 설명 or 리뷰 포인트
notification_click:NekiFirebaseMessagingService의 PendingIntent에 extra를 추가하고,MainActivity의onCreate/onNewIntent포그라운드/백그라운드 구분해서 감지하여 로깅MainActivity선언의android:launchMode="singleTop"추가Summary by CodeRabbit