[pitchpicklive] 푸시 진입 시 WebView 중첩 이슈
현상
사용자가 앱을 이미 열어둔 상태에서 푸시 알림을 탭하면 기존 WebView 위에 새 WebView가 쌓입니다. 새로 열린 화면을 닫으면 이전 화면이 그대로 남아있어 앱이 중복으로 열린 것처럼 느껴집니다.
재현 순서
- 미니앱 진입 (pitchpicklive)
- 토스 홈으로 이동 (미니앱은 백그라운드)
- 푸시 알림 → 탭 → 앱 재진입
- 뒤로가기/닫기 → 이전 앱 화면이 아래 남아있음
임팩트 (실측 데이터)
- Sentry 실데이터에서 동일 유저 기기의
webview.boot_count증가 패턴 확인- 일부 유저 11분 내 1 → 10 (client sampling 0.1 반영 시 실제 ~100회 추정)
- 최대 관측값 19
- 매 부팅마다
webview.sessionUUID가 전부 상이 → WebView 재사용 없이 신규 생성 확정 - WebView 인스턴스당 추정 100MB 이상 → 메모리 누적으로 Toss 앱 전체 OS 킬 우려
- 2026-04-20 대규모 런칭 예정, 푸시 캠페인 트래픽 집중 시 체감 심화 예상
부수 증상
- 이슈: JAVASCRIPT-REACT-3X
- 에러:
TypeError: undefined is not an object (evaluating 'window.webkit.messageHandlers') - 환경: iOS / WKWebView
- 추정 원인: 새 WebView 생성으로 기존 WebView의 네이티브 브릿지가 무효화되면서 발생
앱단 시도 및 한계
- visibilitychange 가드로 비활성 WebView의 폴링/분석 호출 중단 (진행 중)
- Supabase 세션을 Toss Storage로 이관 검토 중 (WebView 간 localStorage 격리 추정 대응)
- 근본 원인이 WebView 중첩 자체이므로 앱단 완화에 한계
관련 이전 문의
- 기존 WebView 위에 새 WebView가 쌓입니다
- graniteEvent.addEventListener(“backEvent”) 해제 후 네이티브 기본 동작(종료 얼럿) 미복원
질문
- 동일 앱 스킴 재진입 시 기존 WebView로 라우팅하는 옵션이 있습니까?
- WebView 스택 깊이 제한 또는 LRU 자동 정리 기능이 있습니까?
- 앱 코드에서 자신의 WebView를 종료할 수 있는 API가 있습니까?
- 푸시 페이로드에 “reuse-if-exists” 같은 플래그 지정이 가능합니까?
- 비활성 WebView 감지 API (document.hidden 외) 가 있습니까?
에스컬레이션
필요 시 기술 담당자와 직접 연결 부탁드립니다.
appName: pitchpicklive