Conversation
----- roadviewmain ranking modal practiceView 등 각 컴포넌트에 대한 접근 및 로그인 유도, 손실 회피율 증가
This reverts commit 5e8ae29.
- HeroSection: 비로그인 시 항상 표시, 그라디언트 배경에 3단계 플로우·통계 안내 - IntroTutorialModal: 마지막 슬라이드에 '바로 체험하기' CTA 추가, skipTutorial 시 complete 이벤트 발행 - MainView: hero-banner-wrapper 복원, 모드 카드 색상 경량화, 튜토리얼 자동 실행 로직 - PracticeView: 인게임 순차 튜토리얼 힌트 4단계 추가 (로드뷰→지도열기→위치찍기→SPOT제출) - 힌트 버튼 사용 안내 보너스 힌트 포함 - 체험하기 진입 시 매번 활성화, 반응형 지원 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- PracticeView: 힌트 말풍선을 slot 내부로 이동해 힌트 버튼 가림 버그 수정 - PracticeView: 새로고침 버튼 말풍선 추가 (지도 첫 오픈 시 5초 노출) - PracticeView: 게임 시작 10초 후 Spot 제출 안내 말풍선 추가 (바운스 화살표) - PracticeView: '지도에서 위치를 찍어보세요' → '지도에서 정답 위치를 찍어보세요' - PracticeResultOverlay: 비회원 손실 회피 CTA를 결과창 맨 위로 이동 - MainView: 비로그인 로드뷰 카드 클릭 시 연습 모드 직행 → RoadViewMainView로 변경 - HeroSection: 3단계 플로우 및 CTA 버튼을 clamp() 기반 반응형으로 개편, 모바일에서 항상 가로 표시 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[Feat/113] 로드뷰 연습 모드 익명(비회원) 플레이 지원 및 온보딩 개선
- Android Manifest에 POST_NOTIFICATIONS, RECEIVE_BOOT_COMPLETED 권한 추가 - Android Manifest에 kospot:// OAuth 딥링크 intent-filter 추가 - capacitor.config.json에 iosScheme: "https" 추가 (CORS origin 일치) - ios/App/App/Info.plist에 CFBundleURLSchemes kospot 등록 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- push.service.js: FCM 토큰 localStorage 저장 (로그아웃 시 삭제용) - useAuth.js: 로그아웃 시 FCM 토큰 서버 삭제 후 localStorage 제거 - App.vue: onNotificationReceived 핸들러 추가 (포그라운드 수신 → 토스트) - notificationTypes.js: GAME_INVITE, LEVEL_UP 타입 추가 - AccountSettings.vue: 미구현 알림 토글 disabled 처리 + 준비중 배지 표시 - AccountSettings.vue: alert() → notificationStore.addNotification() 토스트로 교체 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
구현 완료된 항목 상태 반영: - AndroidManifest, capacitor.config, Info.plist, useAuth, App.vue, AccountSettings, notificationTypes 완료 표시 - Firebase 설정 파일 및 환경변수는 개발자 직접 작업 필요 명시 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (32)
📒 Files selected for processing (108)
📝 WalkthroughWalkthroughThis pull request introduces comprehensive mobile application support to the KoSpot frontend by integrating Capacitor for iOS and Android builds, implementing mobile-specific OAuth flows with one-time code exchange, establishing push notification infrastructure, and adding deep-linking capabilities. It includes native build configurations, platform-detection services, enhanced authentication handling, and extensive documentation for mobile deployment and testing workflows. Changes
Sequence DiagramssequenceDiagram
participant User as User
participant WebApp as WebApp<br/>(Frontend)
participant Backend as Backend API<br/>(Spring Boot)
participant OAuth as OAuth Server
participant AppDeepLink as Native App<br/>(Capacitor)
User->>WebApp: Clicks social login (mobile)
WebApp->>WebApp: buildOAuthAuthorizeUrl()<br/>adds platform=app
WebApp->>Backend: GET /oauth2/authorization/{provider}?platform=app
Backend->>OAuth: Redirects to OAuth provider
OAuth->>User: Shows login consent
User->>OAuth: Approves auth
OAuth->>Backend: Redirects with auth code
Backend->>Backend: Detects platform=app<br/>generates one-time code
Backend->>AppDeepLink: Redirects via kospot://auth/callback?code=...
AppDeepLink->>WebApp: Deep link parsed & routed
WebApp->>Backend: POST /auth/mobile/exchange<br/>{code, state}
Backend->>Backend: Validates & consumes code
Backend->>WebApp: Returns {accessToken, refreshToken}
WebApp->>WebApp: authStorage.setTokens()
WebApp->>User: Login success, navigate to /main
sequenceDiagram
participant User as User/<br/>App
participant WebApp as Vue App
participant Capacitor as Capacitor<br/>Push Plugin
participant FCM as Firebase Cloud<br/>Messaging
participant Backend as Backend API
User->>WebApp: App opens (mounted)
WebApp->>Capacitor: initializePush()
Capacitor->>Capacitor: requestPermissions()
User->>User: Grants notification permission
Capacitor->>FCM: register() for FCM token
FCM->>Capacitor: Returns fcmToken
Capacitor->>WebApp: onRegistration event
WebApp->>WebApp: Cache fcmToken in localStorage
WebApp->>Backend: PUT /mobile/push-tokens<br/>{token, platform, enabled...}
Backend->>Backend: Store push_token record
Backend->>WebApp: 200 OK
rect rgb(200, 150, 255, 0.5)
Note over Backend,FCM: Later: Notification dispatch
Backend->>FCM: Send multicast via Admin SDK<br/>data.deeplink, title, body
FCM->>Capacitor: Deliver notification
end
alt Foreground
Capacitor->>WebApp: onNotificationReceived event
WebApp->>WebApp: Update notificationStore
WebApp->>User: Show in-app notification UI
else Background/Terminated
Capacitor->>User: System notification tray
User->>Capacitor: User taps notification
Capacitor->>WebApp: onNotificationActionPerformed
WebApp->>WebApp: Extract data.deeplink
WebApp->>WebApp: router.replace(deeplink)
end
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes This pull request introduces substantial, multi-faceted changes spanning mobile platform support (Capacitor setup for Android/iOS), new authentication flows (mobile OAuth with one-time code exchange), push notification infrastructure, and deep-linking. The changes are heterogeneous and span numerous files (50+) across frontend components, core services, build configurations, and documentation. Logic density is high in areas like OAuthCallbackView (mobile vs legacy flow), push.service.js (permission/registration/preference management), and the practice view tutorial. The native build configurations (Gradle, Xcode projects) require careful validation. Platform-specific conditional logic permeates the codebase. These factors combined necessitate comprehensive review of both new services and integration points. Possibly related PRs
Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
Summary by CodeRabbit
New Features
Improvements