[Android] Trusted Web Activity를 아시나요?

김병수·2024년 6월 20일
1
post-thumbnail

이번 포스팅에서는 Google I/O ’19에서 소개된 Trusted Web Activity에 대한 영상을 정리해 보려고 합니다.
등장한 지 어느 정도 시간이 지난 기술이지만, 제 기준으로는 얼마 전에 알게 된 뜨끈뜨끈한 기술이라서 상당히 흥미로웠는데요.
오늘은 간단히 Trusted Web Activity가 무엇인지만 이야기해 보고, 자세한 내용은 차차 알아가면서 정리해 보겠습니다👋🏻


Trsuted Web Activity?

Trusted Web Activity(이하 TWA)란 안드로이드 네이티브 앱에서 웹앱을 실행할 수 있도록 도와주는 Activity입니다.

웹앱을 실행할 수 있도록 해주는 Activity? 그게 왜 필요함? 그냥 WebView 쓰면 되는거 아님?

맞습니다. WebView로도 충분히 안드로이드 네이트브 앱에서 웹을 사용할 수 있습니다.

그렇다면 TWA는 왜 등장하게 되었을까요?
이를 알기 위해서는 먼저 WebView를 사용했을 때 발생하는 문제부터 알아야 합니다.

WebView의 한계점

WebView를 사용해보신 많은 개발자분들은 아시겠지만, WebView에는 여러가지 제약이 존재합니다.

성능 문제

WebView가 네이티브 브라우저보다 성능이 떨어진다는 것은 매우 저명한 사실입니다.
그래서 WebView를 사용하는 하이브리드 앱의 리뷰에서 "로딩 시간이 길어요" 또는 "반응 속도가 너무 느려요"와 같은 후기를 비교적 쉽게 찾아볼 수 있는데요.
그렇기 때문에 많은 하이브리드 앱 개발자분들이 어떻게 하면 성능을 끌어올릴 수 있을까? 에 대하여 고민하는 것 같습니다.

업데이트 지연

WebView는 운영체제에 설치된 웹 브라우저 엔진에 의존합니다.
그래서 운영체제 업데이트가 이루어 질 때까지, 새로운 웹 기술 적용은 물론 보안 업데이트도 지연된다는 한계점이 있습니다.

기능 제약

WebView는 PWA(Progressive Web App)의 기능을 모두 지원하지 않습니다.
예를 들어, 푸시 알림이나 오프라인 기능 등 최신 웹 기능을 사용하는데 제약이 있습니다.
따라서 이런 PWA의 기능을 WebView와 함께 지원하기 위해서는 개발자의 더 많은 노력이 요구된다는 한계점이 있습니다.

이러한 WebView의 한계점을 극복하기 위해서 Google은 TWA를 도입했다고 하는데요.
그렇다면 TWA는 이런 문제들을 어떻게 해결 했을까요?

TWA의 해결 방법

TWA는 Chrome의 렌더링 엔진을 사용함으로써 이러한 문제들을 해결했습니다.

실제로 Google I/O '19에서는 TWA를 아래와 같이 한 문장으로 설명합니다.

TWA는 UI가 없는 Chrome이다.

Chrome 렌더링 엔진을 사용함으로써,

  1. 네이티브 브라우저와 동일하게 작동하기 때문에, WebView보다 당연히 빠르다.
  2. 사용자 기기에 설치되어 있는 Chrome 버전을 사용하기 때문에, WebView에 비해 업데이트 지연으로부터 자유롭다.
    (사용자 기기에 설치되어 있는 Chrome이 업데이트 되면 자동으로 같이 업데이트된 버전을 사용하게 된다고 합니다.)
  3. TWA는 Chrome이기 때문에 Chrome이 지원하는 PWA의 기능을 모두 사용할 수 있습니다.

TWA 특징

그렇다면 지금부터는 TWA의 특징에 대해 알아보겠습니다.

1. 속도가 빠르다

위에서 언급했던 바와 같이, Google Chrome과 동일하게 작동하기 때문에 WebView보다 더 빠르다는 특징이 있습니다.

2. Web 컨텐츠를 Full Screen으로 표시할 수 있다

TWA는 Android System UI(상태바 or 네비게이션바 등)를 제외하고 남은 모든 영역을 사용할 수 있습니다.

이 부분은 WebView도 동일하지만, TWA는 Web 컨텐츠 외에는 다른 것들을 표시할 수 없다는 큰 차이점이 있습니다.
다시 말하면, TWA에서는 Web 컨텐츠와 Native Component를 혼합해서 사용할 수 없다고 합니다.
(혹시 지금은 이게 가능하도록 개선되었거나 우회하는 방법이 있지 않을까? 라는 생각이 들지만, 차차 알아보도록 하겠습니다 😊)

3. TWA는 신뢰할 수 있다

일단 이름부터가 '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로 제공되는 컨텐츠가 신뢰할 수 있는지 확인한다고 합니다.

4. TWA와 Chrome은 데이터를 공유합니다

TWA는 UI 없는 Chrome이기 때문에, 쿠키나 세션 그리고 알림 설정과 같은 값을 Chrome과 공유합니다.
이것이 가능한 이유로는, 서버의 입장에서 사용자가 TWA를 통해 웹을 사용하는 것은 Chrome에서 새 탭을 열고 URL로 웹 사이트에 접속한 것과 동일하게 인식되기 때문인데요.
그렇기 때문에 아래와 같은 동작이 가능하다고 합니다.

Chrome -> TWA 데이터 공유

Chrome에서 웹 사이트에 로그인을 수행합니다.
이후에 사용자가 Play Store에서 TWA를 사용한 앱을 다운로드 받은 후에 TWA 앱을 실행하면, Chrome에서 로그인한 세션이 그대로 유지되기 때문에 로그인된 상태로 접속하게 됩니다.

TWA -> Chrome 데이터 공유

TWA 앱에서 웹 사이트(온라인 쇼핑몰의 경우)에서 장바구니에 상품을 추가한 다음에 Chrome으로 해당 웹 사이트를 방문하면, TWA에서 추가한 상품을 Chrome에서도 똑같이 확인할 수 있습니다.

이러한 특징 때문에 구글도 사용자가 혼동스러울 경우를 대비하여
TWA를 Launch할 때, 화면 하단에 Info Bar를 표시하여 Chrome과 데이터가 공유되고 있음을 알려줄 수 있다고 언급하고 있습니다.
추가로 Info Bar를 표시했음에도 불구하고 사용자가 혼동스러워 할 것 같다면, Web UI를 추가하는 방법이 있다고 짧게 언급합니다. (TWA에서는 Native Component를 사용할 수 없기 때문)

5. 범용성이 좋다

TWA는 Chrome 72 이상의 버전이 설치되어 있는 기기에서 모두 사용 가능합니다.
이는 안드로이드 4.4 KITKAT 버전 이상에 해당하며, 안드로이드 전체 사용자의 95% 정도라고 합니다.


TWA에 관련하여 자주 받은 질문들

Q1. Chrome 브라우저가 설치되어 있지 않거나, 유저의 기본 브라우저가 Chrome이 아닌 경우에는 어떻게 되나요?

유저가 사용하는 브라우저가 Fallback URL을 지원한다면 Fallback URL로 이동하며,
그렇지 않은 경우에는 Regular Brower Intent를 사용하여 브라우저를 일반적으로 여는 것처럼 작동한다고 합니다.
추가로 개발자가 원한다면, Fallback 행동을 커스텀할 수 있다고 합니다.
(e.g. Chrome을 사용할 수 없는 경우에는 WebView를 사용해서 컨텐츠를 보여준다거나 등등)

Q2. TWA가 보장하지 않는 웹 사이트에 접속하려고 하면 어떻게 되나요?

아래의 이미지와 같이 Chrome Custom Tab(이하 CCT)을 사용하여 다음 웹 사이트에 접속을 허용하는지를 유저에게 물어본다고 합니다.
만약 유저가 접속을 허용한다면 Full Screen을 유지하면서 계속 사용할 수 있다고 합니다.

Q3. App Launcher를 사용해서 TWA를 열 수 있나요?

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를 사용하기 위해, 그리고 앱을 배포하기 위한 준비

TWA를 사용하기 위해서는 우선 좋은 PWA를 만들어야 한다고 합니다.
여기서 좋은 PWA란,

  1. Loads and interacts instantly
  2. Works reliably event with intermittent connectivity
  3. Enhances to device features, looks and feels like it belongs on the user's device

의 조건을 충족해야 한다고 합니다.
다시 말하면, Web 컨텐츠를 이용하다가 인터넷 연결이 일시적으로 끊기는 상황(터널에 들어갔다던지)이 발생하더라도, 잠깐 동안 다른 기능을 사용할 수 있어야 합니다.
이러한 경우의 예로 Google I/O '19에서는 인터넷 연결이 원활하지 않은 동안 틱택토 게임을 할 수 있도록 한다던가 등의 예시를 보여주었습니다.

그리고 좋은 PWA인지 확인하는 방법으로 Chrome Browser Extension Lighthouse를 언급했는데요.
Lighthouse는 좋은 PWA를 만드는데 필요한 웹의 성능과 컨텐츠의 퀄리티 그리고 정확성을 높이는데 도움을 줄 수 있다고 합니다.
그리고 Lighthouse에서 요구하는 것들을 충족시킨 경우에는 PWA 뱃지도 받을 수 있다고 합니다.

마지막으로 TWA 앱을 배포하기 위해서는 아래의 조건을 충족해야 합니다.

  1. Your web content must light up the PWA badge in LightHouse
  2. Achieve a performance score greater than 80
  3. TWA에서 보여줄 수 있는 Web Content에서도 Google Play Policy를 충족해야 함

이상으로 Google I/O '19에서 언급된 TWA에 대한 내용을 정리해봤습니다.
영어 발표를 보고 내용을 정리하는 것은 이번이 처음이라 어색한 내용도 많이 있는 것 같은데요.
앞으로 TWA를 더 공부하면서 내용을 다듬어 보도록 하겠습니다.
잘못된 내용이 있다면 지적 부탁드립니다 🙇🏻‍♂️

profile
주니어 개발자

0개의 댓글