Skip to content

feat: 강의계획서를 외부 브라우저에서 인앱 바텀시트 WebView로 전환#630

Merged
JuTaK97 merged 3 commits into
developfrom
feat/syllabus-in-app-webview
Jul 10, 2026
Merged

feat: 강의계획서를 외부 브라우저에서 인앱 바텀시트 WebView로 전환#630
JuTaK97 merged 3 commits into
developfrom
feat/syllabus-in-app-webview

Conversation

@JuTaK97

@JuTaK97 JuTaK97 commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

배경

강의계획서를 지금까지 외부 브라우저(ACTION_VIEW Intent)로 열었는데, 이를 iOS와 동일하게 인앱 바텀시트 WebView로 전환합니다. iOS는 noProxyUrl을 Referer 헤더와 함께 WebView로 띄우고 있어, 링크·로딩 방식을 iOS에 맞췄습니다.

변경 사항

1. 여는 링크를 iOS와 동일하게 (urlnoProxyUrl)

  • /v1/course_books/official 응답에서 iOS가 쓰는 noProxyUrl 필드를 사용합니다.

2. 인앱 바텀시트 WebView (강의평과 동일 패턴)

  • sugang.snu.ac.kr는 Referer를 검증하므로, iOS와 동일하게 WebView 로드에 Referer 헤더를 주입합니다. (외부 브라우저/Custom Tab으로는 Referer를 실을 수 없어 인앱 WebView가 유일한 방법)
  • 강의계획서를 여는 5개 진입점(시간표 상세 / 딥링크 2종 / 북마크 / 검색)을 모두 바텀시트로 통일했습니다.

3. PDF 다운로드 (권한 0개)

  • 강의계획서 페이지(HTML) 안의 PDF 등 첨부 파일은 WebView 세션(Referer·쿠키·UA)째 DownloadManager로 다운로드합니다.
  • 앱 전용 외부 캐시에 저장 → 저장소 권한 불필요 + 시스템 자동 정리(iOS tmp와 동일 성격) → 완료 시 뷰어 앱 자동 실행.
  • 같은 파일명은 덮어써서 중복 누적을 방지합니다.

아키텍처 결정

WebView 다운로드는 "우리 서버에서 도메인 데이터를 받는 것"이 아니라 **"WebView 브라우징 세션의 연속"**입니다. 쿠키·Referer·UA는 전부 WebView가 만든 세션의 산물이므로, sugang과 접촉하는 특수 코드(Referer 상수, 세션 헤더, 다운로드)를 WebView 컨테이너 안에 격리했습니다.

  • noProxyUrl 획득(SNUTT API 호출)만 Repository(data)에 남김
  • WebView 로드·다운로드는 SyllabusWebViewContainer(View)에서 완결
  • ViewModel/Repository는 HTTP 전송 디테일을 전혀 모름

커밋 구성

  1. 강의계획서 URL을 iOS와 동일한 noProxyUrl로 변경
  2. 강의계획서 인앱 WebView 바텀시트 및 PDF 다운로드 추가
  3. 강의계획서 열기를 외부 브라우저에서 인앱 바텀시트로 전환

실기기 검증 필요

  • HTML 강의계획서가 바텀시트에 정상 렌더되는지 (Referer 적용 확인)
  • 페이지 내 PDF 링크 클릭 시 다운로드 트리거 → 캐시 저장 → 뷰어 자동 실행
  • 한글 파일명이 깨지지 않는지 (서버가 percent-encoding으로 주는 경우)

JuTaK97 added 3 commits July 10, 2026 10:04
강의평과 동일한 바텀시트 WebView 패턴으로 강의계획서를 띄운다.
- sugang 서버 Referer 검증을 통과하도록 WebView 로드에 Referer 헤더 주입
- 페이지 내 PDF 등 첨부 파일은 WebView 세션(Referer/쿠키/UA)째 DownloadManager로 다운로드
- 앱 전용 캐시에 저장(권한 불필요, 시스템 자동 정리) 후 뷰어 앱으로 열기
강의계획서를 여는 5개 진입점(시간표/딥링크 2종/북마크/검색)을 모두
외부 브라우저(ACTION_VIEW) 대신 인앱 바텀시트 WebView로 연결한다.
@JuTaK97
JuTaK97 requested a review from a team as a code owner July 10, 2026 01:05
@JuTaK97
JuTaK97 merged commit 566428a into develop Jul 10, 2026
2 checks passed
@JuTaK97
JuTaK97 deleted the feat/syllabus-in-app-webview branch July 10, 2026 01:16
@JuTaK97 JuTaK97 mentioned this pull request Jul 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant