이번 포스팅에서는 Google I/O ’19에서 소개된 Trusted Web Activity에 대한 영상을 정리해 보려고 합니다.
등장한 지 어느 정도 시간이 지난 기술이지만, 제 기준으로는 얼마 전에 알게 된 뜨끈뜨끈한 기술이라서 상당히 흥미로웠는데요.
오늘은 간단히 Trusted Web Activity가 무엇인지만 이야기해 보고, 자세한 내용은 차차 알아가면서 정리해 보겠습니다👋🏻
Trusted Web Activity(이하 TWA)란 안드로이드 네이티브 앱에서 웹앱을 실행할 수 있도록 도와주는 Activity
입니다.
웹앱을 실행할 수 있도록 해주는
Activity
? 그게 왜 필요함? 그냥WebView
쓰면 되는거 아님?
맞습니다. WebView
로도 충분히 안드로이드 네이트브 앱에서 웹을 사용할 수 있습니다.
그렇다면 TWA는 왜 등장하게 되었을까요?
이를 알기 위해서는 먼저 WebView
를 사용했을 때 발생하는 문제부터 알아야 합니다.
WebView
를 사용해보신 많은 개발자분들은 아시겠지만, WebView
에는 여러가지 제약이 존재합니다.
WebView
가 네이티브 브라우저보다 성능이 떨어진다는 것은 매우 저명한 사실입니다.
그래서 WebView
를 사용하는 하이브리드 앱의 리뷰에서 "로딩 시간이 길어요" 또는 "반응 속도가 너무 느려요"와 같은 후기를 비교적 쉽게 찾아볼 수 있는데요.
그렇기 때문에 많은 하이브리드 앱 개발자분들이 어떻게 하면 성능을 끌어올릴 수 있을까? 에 대하여 고민하는 것 같습니다.
WebView
는 운영체제에 설치된 웹 브라우저 엔진에 의존합니다.
그래서 운영체제 업데이트가 이루어 질 때까지, 새로운 웹 기술 적용은 물론 보안 업데이트도 지연된다는 한계점이 있습니다.
WebView
는 PWA(Progressive Web App)의 기능을 모두 지원하지 않습니다.
예를 들어, 푸시 알림이나 오프라인 기능 등 최신 웹 기능을 사용하는데 제약이 있습니다.
따라서 이런 PWA의 기능을 WebView
와 함께 지원하기 위해서는 개발자의 더 많은 노력이 요구된다는 한계점이 있습니다.
이러한 WebView
의 한계점을 극복하기 위해서 Google은 TWA를 도입했다고 하는데요.
그렇다면 TWA는 이런 문제들을 어떻게 해결 했을까요?
TWA는 Chrome의 렌더링 엔진을 사용함으로써 이러한 문제들을 해결했습니다.
실제로 Google I/O '19에서는 TWA를 아래와 같이 한 문장으로 설명합니다.
TWA는 UI가 없는 Chrome이다.
Chrome 렌더링 엔진을 사용함으로써,
WebView
보다 당연히 빠르다.WebView
에 비해 업데이트 지연으로부터 자유롭다.그렇다면 지금부터는 TWA의 특징에 대해 알아보겠습니다.
위에서 언급했던 바와 같이, Google Chrome과 동일하게 작동하기 때문에 WebView보다 더 빠르다는 특징이 있습니다.
TWA는 Android System UI(상태바 or 네비게이션바 등)를 제외하고 남은 모든 영역을 사용할 수 있습니다.
이 부분은 WebView
도 동일하지만, TWA는 Web 컨텐츠 외에는 다른 것들을 표시할 수 없다는 큰 차이점이 있습니다.
다시 말하면, TWA에서는 Web 컨텐츠와 Native Component를 혼합해서 사용할 수 없다고 합니다.
(혹시 지금은 이게 가능하도록 개선되었거나 우회하는 방법이 있지 않을까? 라는 생각이 들지만, 차차 알아보도록 하겠습니다 😊)
일단 이름부터가 'Trusted' Web Activity이기 때문에 당연히 신뢰할 수 있어야 할 것 같지만(?) 정확히는 아래와 같은 방법을 사용하기 때문에 신뢰할 수 있다고 합니다.
TWA는 앱 소유자와 웹 소유자가 동일해야만 사용 가능하고, 이를 개발자가 증명해야 한다.
Android AppLink 기능을 개발할 때와 비슷하게 Digital Asset Links를 사용해서 앱 소유자와 웹 소유자가 동일한지를 증명해야 합니다.
Android 앱에서는 앱 내부에 Digital Asset Links를 추가하고, 서버에서는 아래의 위치에 Digital Asset Link JSON 파일을 호스팅해야 합니다.
https://domain.name/.well-known/assetlinks.json
이러한 방식을 통해, 구글은 TWA로 제공되는 컨텐츠가 신뢰할 수 있는지 확인한다고 합니다.
TWA는 UI 없는 Chrome이기 때문에, 쿠키나 세션 그리고 알림 설정과 같은 값을 Chrome과 공유합니다.
이것이 가능한 이유로는, 서버의 입장에서 사용자가 TWA를 통해 웹을 사용하는 것은 Chrome에서 새 탭을 열고 URL로 웹 사이트에 접속한 것과 동일하게 인식되기 때문인데요.
그렇기 때문에 아래와 같은 동작이 가능하다고 합니다.
Chrome에서 웹 사이트에 로그인을 수행합니다.
이후에 사용자가 Play Store에서 TWA를 사용한 앱을 다운로드 받은 후에 TWA 앱을 실행하면, Chrome에서 로그인한 세션이 그대로 유지되기 때문에 로그인된 상태로 접속하게 됩니다.
TWA 앱에서 웹 사이트(온라인 쇼핑몰의 경우)에서 장바구니에 상품을 추가한 다음에 Chrome으로 해당 웹 사이트를 방문하면, TWA에서 추가한 상품을 Chrome에서도 똑같이 확인할 수 있습니다.
이러한 특징 때문에 구글도 사용자가 혼동스러울 경우를 대비하여
TWA를 Launch할 때, 화면 하단에 Info Bar를 표시하여 Chrome과 데이터가 공유되고 있음을 알려줄 수 있다고 언급하고 있습니다.
추가로 Info Bar를 표시했음에도 불구하고 사용자가 혼동스러워 할 것 같다면, Web UI를 추가하는 방법이 있다고 짧게 언급합니다. (TWA에서는 Native Component를 사용할 수 없기 때문)
TWA는 Chrome 72 이상의 버전이 설치되어 있는 기기에서 모두 사용 가능합니다.
이는 안드로이드 4.4 KITKAT 버전 이상에 해당하며, 안드로이드 전체 사용자의 95% 정도라고 합니다.
유저가 사용하는 브라우저가 Fallback URL을 지원한다면 Fallback URL로 이동하며,
그렇지 않은 경우에는 Regular Brower Intent를 사용하여 브라우저를 일반적으로 여는 것처럼 작동한다고 합니다.
추가로 개발자가 원한다면, Fallback 행동을 커스텀할 수 있다고 합니다.
(e.g. Chrome을 사용할 수 없는 경우에는 WebView를 사용해서 컨텐츠를 보여준다거나 등등)
아래의 이미지와 같이 Chrome Custom Tab(이하 CCT)을 사용하여 다음 웹 사이트에 접속을 허용하는지를 유저에게 물어본다고 합니다.
만약 유저가 접속을 허용한다면 Full Screen을 유지하면서 계속 사용할 수 있다고 합니다.
LauncherActivity를 사용하면 Java나 Kotlin 파일 없이도 가능하다고 합니다.
<activity
android:name="com.google.androidbrowserhelper.trusted.LauncherActivity"
android:label="@string/appName">
...
</activity>
만약 TWA를 사용한다는 것을 사용자에게 알려주고 싶은 경우에는
UI가 없는 Native Activity를 만들어서 Toast 메시지를 출력한 후에 TWA를 실행하고 TWA가 실행되었다면 Native Activity를 종료하는 방식으로 구현할 수 있다고 합니다.
TWA를 사용하기 위해서는 우선 좋은 PWA를 만들어야 한다고 합니다.
여기서 좋은 PWA란,
의 조건을 충족해야 한다고 합니다.
다시 말하면, Web 컨텐츠를 이용하다가 인터넷 연결이 일시적으로 끊기는 상황(터널에 들어갔다던지)이 발생하더라도, 잠깐 동안 다른 기능을 사용할 수 있어야 합니다.
이러한 경우의 예로 Google I/O '19에서는 인터넷 연결이 원활하지 않은 동안 틱택토 게임을 할 수 있도록 한다던가 등의 예시를 보여주었습니다.
그리고 좋은 PWA인지 확인하는 방법으로 Chrome Browser Extension Lighthouse를 언급했는데요.
Lighthouse는 좋은 PWA를 만드는데 필요한 웹의 성능과 컨텐츠의 퀄리티 그리고 정확성을 높이는데 도움을 줄 수 있다고 합니다.
그리고 Lighthouse에서 요구하는 것들을 충족시킨 경우에는 PWA 뱃지도 받을 수 있다고 합니다.
마지막으로 TWA 앱을 배포하기 위해서는 아래의 조건을 충족해야 합니다.
이상으로 Google I/O '19에서 언급된 TWA에 대한 내용을 정리해봤습니다.
영어 발표를 보고 내용을 정리하는 것은 이번이 처음이라 어색한 내용도 많이 있는 것 같은데요.
앞으로 TWA를 더 공부하면서 내용을 다듬어 보도록 하겠습니다.
잘못된 내용이 있다면 지적 부탁드립니다 🙇🏻♂️