핫와이어 네이티브 앱은 본질적으로 모바일 브라우저를 내장한 웹뷰(Webview)를 사용하는 일반 네이티브 앱입니다.
웹뷰의 역할
- iOS에서는 WebKit UI 프레임워크의
WKWebView
를, Android에서는 Webkit Android 라이브러리의WebView
컴포넌트를 사용합니다. - 웹뷰 내의 브라우저는 일반 브라우저처럼 HTTP를 통해 콘텐츠를 가져오고 제출하며 웹 페이지를 렌더링합니다.
- 핫와이어 네이티브 앱은 별도의 API 없이 웹 앱의 서버 통신을 그대로 활용합니다.
네이티브 경험 제공 방식
- 핫와이어 네이티브는 웹 앱의 내비게이션을 감지하고 자체 로직을 삽입하여 렌더링을 변경합니다.
- 새로운 웹 앱 섹션을 열 때 새 화면이 슬라이드되거나 모달로 열리는 등 네이티브 앱과 같은 전환 효과를 제공합니다.
터보(Turbo)와의 통합
WebView
는 페이지 내비게이션을 감지할 수 있지만, 터보 드라이브(Turbo Drive)는 내비게이션을 가로채어 자체 로직을 실행합니다. 핫와이어 네이티브는 이 터보의 내비게이션에 플러그인됩니다.- 터보가 ‘방문(visit)’을 처리할 때
Session
객체를 통해Navigator
의proposeVisit
메서드를 호출합니다. Navigator
는 내비게이션을 터보가 처리해야 하는지 확인한 후,Session
객체에visitProposedToLocation
을 호출하고,Session
은 다시adapter
객체에visitProposedToLocation
을 전달합니다.
어댑터의 핵심 역할
- 터보는 기본적으로
BrowserAdapter
클래스를 사용합니다. - 핫와이어 네이티브는
Turbo.registerAdapter
를 호출하여 이 기본 어댑터를TurboNative
클래스로 교체합니다. turbo.js
파일이 웹뷰 인스턴스에 주입되어TurboNative
객체를 구성하고 새로운 어댑터로 등록됩니다.visitProposedToLocation
함수는 터보가 방문을 처리할 때마다 호출되며, 핫와이어 네이티브 어댑터는 이 함수를 통해 네이티브 코드와 통신하여 터보가 평소대로 동작하게 할지, 아니면 네이티브 코드가 URL 로딩을 직접 처리할지 결정합니다.- 이 메커니즘을 통해 핫와이어 네이티브는 터보 드라이브의 로딩을 막고 페이지 로딩을 제어하여 네이티브와 같은 경험을 제공합니다.