본문으로 건너뛰기

거부 대응 가이드 2026

TWA 앱이 Google Play에서 거부? WebView로 전환

Trusted Web Activity 앱이 비공개 테스트에서 "testers were not engaged"(테스터 참여 부족)로 계속 막힌다면, 가장 신뢰할 수 있는 대응은 표준 WebView 앱으로 다시 만들어 그 빌드를 올리는 것입니다. TWA·PWA 래퍼가 플래그되는 이유와, 14일 카운트를 리셋하지 않고 전환하는 방법을 정리합니다.

TWA 더 자주 플래그
WebView 신뢰할 대응
14일 카운트 유지
99.9% PTL 성공률
Testers were not engaged
거부됨 TWA / PWA 래퍼 Chrome 표면에서 실행
앱 셸 Chrome Custom Tab 웹 콘텐츠

참여가 약하게 읽힘 → 거부

요건 대응에 유리 표준 WebView 자체 프로세스에서 실행
앱 셸 WebView (프로세스 내) 웹 콘텐츠

활동이 등록됨 → 요건 대응에 유리

빠른 답변

TWA 앱이 비공개 테스트(closed testing)에서 "testers were not engaged"로 계속 막힌다면, 경험상 가장 신뢰할 수 있는 대응은 표준 WebView 앱으로 다시 만드는 것입니다(Android Studio WebView, Capacitor, Cordova). 프로덕션에 올리는 것도 TWA가 아니라 빌드여야 합니다. 같은 package name으로 업데이트로 업로드하면 14일 카운트는 리셋되지 않습니다. WebView는 참여 신호 문제에 도움이 되지만, 얇은 래퍼 검토 면제는 아닙니다. 실제 앱으로 완성하세요. 진짜 병목이 테스터 12명을 14일 연속으로 확보하는 것이라면, 그것이 PrimeTestLab의 역할입니다. $19.99부터(서비스 수수료 5% 추가), 테스트 시작은 보통 4~6시간 이내입니다.

개인 개발자가 겪는 거부 중에서도 가장 답답한 패턴 중 하나입니다. 테스터는 실제로 썼습니다. 인원도 12명이었습니다. 14일도 지났습니다. 그런데도 Google은 "your testers were not engaged enough."(테스터 참여가 충분하지 않음)라고 돌려보냅니다. 앱을 Trusted Web Activity(TWA)PWA 래퍼로 만들었다면 우연이 아닙니다. 7,400개가 넘는 앱을 온보딩하며 본 결과, 래퍼형 빌드는 이 유형의 거부에 표준 네이티브·WebView보다 훨씬 자주 걸립니다. 이 가이드에서는 이유, 중요한 아키텍처 차이, 이미 쌓은 테스트 일수를 버리지 않고 WebView로 전환하는 절차를 설명합니다.

TWA 앱이 비공개 테스트에서 거부되기 쉬운 이유

Trusted Web Activity는 화면을 자체 앱 안에서 그리는 대신, Chrome의 Custom Tabs 표면을 통해 웹사이트를 렌더링합니다. 사이트나 PWA를 설치 가능한 형태로 만드는 빠른 방법이며, 이미 출시된 많은 앱에서는 문제없이 동작합니다. 문제는 개인 개발자 계정이 프로덕션 액세스 전에 필수인 14일 비공개 테스트 요건을 넘어야 할 때 특히 드러납니다.

7,400개가 넘는 앱의 과정을 도우며 본 결과, TWA·PWA 래퍼 빌드는 테스터가 매일 실제로 써도 표준 네이티브 앱보다 "testers were not engaged"(테스터 참여 부족) 거부에 훨씬 자주 걸립니다. 패턴이 일관되어, 아직 14일 비공개 테스트를 넘어야 하는 앱에는 TWA를 권하지 않습니다.

소견 01

약한 참여 신호

Google 검토가 읽는 활동은, 콘텐츠가 자체 앱 프로세스가 아니라 Chrome 표면에서 돌 때 더 약하게 전달되는 것으로 보입니다. 실제 사용이 낮은 사용처럼 보일 수 있습니다.

소견 02

"Testers not engaged" 거부

TWA 빌드에서 가장 자주 보는 메시지입니다. 테스터가 테스트에 참여하고, 설치하고, 매일 써도 프로덕션 액세스 검토에서 참여가 부족하다고 플래그됩니다.

소견 03

Play Console 활성 사용자 낮음

일부 개발자는 TWA 빌드의 대시보드 활성 사용자가 예상보다 낮다고 보고합니다. 같은 Chrome 표면 동작과 맞닿아 있습니다.

소견 04

재제출 시 반복 거부

근본 원인이 아키텍처이므로, 같은 TWA 빌드를 다시 내면 같은 방식으로 막히기 쉽습니다. 패치보다 재구축이 효과적인 이유입니다.

솔직한 유의사항

솔직한 유의사항: Google은 프로덕션 액세스 검토 단계에서 정확히 어떤 신호를 보는지 공개하지 않습니다. 메커니즘의 세부 사항은 저희 관찰이며, 공식 정책이 아닙니다. 정확한 텔레메트리를 안다고 주장하는 포럼 글은 회의적으로 보세요. 자신 있게 말할 수 있는 것은 반복 결과입니다. TWA 빌드는 참여 문제로 거부되고, 비슷한 WebView 빌드는 요건 대응에 더 유리한 경우가 많습니다.

TWA란 무엇이며 어떻게 구축하나요?

거부에 대응하기 전에 무엇을 게시했는지 정확히 이해해야 합니다. Trusted Web Activity는 본질적으로 실제 브라우저 엔진에서 웹사이트를 전체 화면으로 실행하는 Android 앱입니다. 주소 표시줄과 브라우저 UI가 없어 사용자는 웹페이지를 보고 있다는 사실을 알기 어렵습니다. 겉으로는 네이티브 앱처럼 보이고 작동하지만, 내부에서는 실제 웹사이트가 실행됩니다.

TWA는 보통 Google의 Bubblewrap CLI 또는 PWABuilder로 생성하며, 둘 다 Google의 androidbrowserhelper 라이브러리를 기반으로 합니다. 도구에 URL을 지정하면 Android 프로젝트가 만들어지고, 서명한 뒤 AAB를 Google Play에 업로드합니다.

개발자가 TWA를 선택하는 이유

하나의 코드베이스

이미 웹사이트, 가능하면 PWA가 있다면 Kotlin, Flutter, React Native로 다시 작성하지 않고 Play Store에 올릴 수 있습니다.

즉시 업데이트

앱이 실제 사이트를 불러오므로 웹사이트를 배포하는 것만으로 변경사항이 반영됩니다. 앱 업데이트나 검토 대기열이 없습니다.

빠르고 비용이 적음

TWA 생성에는 몇 주가 아니라 몇 분이면 됩니다. 기존 PWA를 Android로 옮기는 데 가장 적은 작업이 드는 방식입니다.

거부로 이어질 수 있는 절충점

TWA를 저렴하게 만드는 특성은 비공개 테스트에서는 약점이 될 수 있습니다.

  • 인터넷이 필요합니다. 사이트를 보여 주는 창이므로 PWA에 탄탄한 오프라인 지원이 없다면 연결이 약할 때 앱도 불안정해집니다.
  • Play Store 거부 위험이 있습니다. 최소 기능 및 재패키징 콘텐츠 정책은 "래퍼 안의 웹사이트일 뿐인" 앱을 대상으로 합니다. 실제 네이티브 기능이 없는 TWA는 특히 신규 제출에서 거부되거나 삭제될 수 있습니다. 푸시 알림, 오프라인 모드, 카메라, 공유 대상 같은 네이티브 기능을 추가해야 정책 기준에 대응할 수 있습니다.
  • 앞에서 설명한 참여 신호 문제도 있습니다. 개인 계정이 14일 비공개 테스트에서 "testers not engaged" 메시지를 반복해서 받는 이유입니다.

오해 바로잡기: TWA는 WebView가 아닙니다

많은 글이 잘못 설명하는 부분이며, 대응 방법을 바꾸는 차이이므로 정확히 알아야 합니다. TWA는 Android의 WebView 컴포넌트를 전혀 사용하지 않습니다.

오해

"TWA는 WebView 래퍼일 뿐이다"

Android WebView앱이 제어하는 내장형 브라우저입니다. 기능이 간소화되어 있고 보안 격리 방식도 다릅니다. TWA는 이를 사용하지 않습니다.

실제 구조

TWA는 Custom Tabs 엔진을 사용합니다

사용자의 설치된 전체 브라우저, 보통 Chrome에 URL을 전달하고 UI 없이 전체 화면으로 렌더링하도록 요청합니다. 내장 컴포넌트가 아니라 실제 브라우저 엔진을 사용합니다.

TWA는 Custom Tabs 기반 엔진을 사용하므로 Chrome 브라우저와 같은 렌더링 엔진, JavaScript 엔진, 보안 샌드박스를 활용합니다. Chrome과 쿠키 및 저장소도 공유하므로 웹에서 로그인한 사용자의 상태가 유지되고, 브라우저 자동 업데이트와 전체 웹 플랫폼 지원도 받습니다. 일반적인 출시 앱에는 강력한 장점입니다. 그러나 화면이 자체 앱이 아니라 Chrome의 별도 프로세스에서 실행된다는 뜻이기도 합니다. 참여 신호가 약해지고 활성 사용자 수가 낮게 보이는 원인으로 관찰되는 구조입니다.

실행 흐름 단계별 보기

1
사용자가 앱 아이콘을 누릅니다

Android가 androidbrowserhelper의 TWA LauncherActivity를 실행합니다.

2
해당 Activity가 Chrome에 URL 열기를 요청합니다

페이지가 브라우저 UI 없는 전체 화면 Custom Tab에서 열립니다. 주소 표시줄, 탭, 브라우저 UI가 없습니다.

3
주소 표시줄을 숨기기 전에 Chrome이 신뢰를 확인합니다

Trusted Web Activity의 "Trusted"가 이 확인을 뜻합니다. 앱이 사이트 소유권을 증명하지 못하면 주소 표시줄이 남아 네이티브 앱처럼 보이지 않습니다.

신뢰 확인: Digital Asset Links

Chrome은 앱이 Digital Asset Links로 웹사이트 소유권을 증명할 때만 주소 표시줄을 숨깁니다. 앱은 자신이 나타내는 웹사이트를 선언하고, 웹사이트는 앱의 package name과 서명 인증서 지문(SHA-256)이 들어 있는 /.well-known/assetlinks.json 파일을 제공해야 합니다.

https://yoursite.com/.well-known/assetlinks.json JSON
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.yourapp.name",
    "sha256_cert_fingerprints": [
      "AB:CD:EF:...:99"  // your signing cert SHA-256
    ]
  }
}]
확인 절차

앱이 사이트를 선언

manifest에 앱이 나타내는 https 도메인을 지정합니다.

사이트가 assetlinks.json 제공

파일에 package name과 SHA-256 지문을 적습니다.

Chrome이 양쪽을 대조

지문이 앱 서명 인증서와 일치해야 합니다.

일치 앱이 네이티브 앱처럼 전체 화면으로 실행되고 주소 표시줄이 숨겨집니다.
파일 없음 / 404 / 잘못된 지문 앱은 열리지만 Chrome 주소 표시줄이 나타납니다. 가장 흔한 TWA 오류입니다.
가장 흔한 TWA 오류

테스터가 "앱" 상단에서 브라우저 주소 표시줄을 본다고 하면 assetlinks.json이 없거나 404를 반환하거나 SHA-256 지문이 잘못된 것입니다. 파일을 수정하고 지문이 Play App Signing에서 Google Play가 실제로 사용하는 키와 일치하는지 확인하세요. 다만 이 수정은 전체 화면 표시만 복구합니다. 참여 신호 거부에는 대응하지 못하며, 그 문제에는 WebView 재구축이 필요합니다.

참여 신호 경로: TWA vs WebView

거부를 이해하는 가장 쉬운 방법은 테스터의 활동이 어디로 전달되는지 따라가는 것입니다. TWA의 화면은 앱에서 한 단계 떨어진 Chrome Custom Tabs 표면에 있습니다. WebView 앱에서는 같은 화면이 자체 애플리케이션 프로세스 안에서 실행되어 package name에 직접 연결됩니다. 이 차이가 활동 신호가 기록되는 강도를 바꿉니다.

테스터 활동이 연결되는 위치

TWA
테스터가 앱을 누름 앱 package Chrome Custom Tab 웹 콘텐츠
약함
WebView
테스터가 앱을 누름 앱 package WebView (프로세스 내) 웹 콘텐츠
강함
핵심 포인트

WebView는 사이트 URL을 자체 애플리케이션 안에서 불러오므로 활동이 Google 검토가 기대하는 방식으로 앱 package에 기록됩니다. TWA에서는 중간의 Custom Tab이 신호를 약하게 만드는 추가 단계로 보입니다. 따라서 TWA의 자체 웹 분석, 예를 들어 웹 계층의 Google Analytics나 Firebase 수치가 낮다고 해서 반드시 "Google이 사용량을 전혀 보지 못한다"는 뜻은 아닙니다. 다만 비공개 테스트에서 실무적으로 취할 수 있는 안정적인 대응은 WebView로 다시 구축하는 것입니다.

TWA 식별 방법: 외부와 내부 확인

직접 또는 외주로 게시한 앱이 실제 TWA인지 확실하지 않다면, 먼저 눈으로 확인하고 APK나 연결된 기기에서 기술적으로 판별할 수 있습니다.

빠른 시각적 단서

  • 웹사이트 자체이므로 웹사이트와 완전히 동일하게 작동합니다.
  • 설정이 잘못되면 상단에 브라우저 주소 표시줄이 보입니다. 앞에서 설명한 assetlinks 오류의 확실한 단서입니다.
  • Play Store에 앱 업데이트가 없어도 콘텐츠가 바뀝니다.

확실한 기술적 단서: APK 및 기기 검사

표지 의미
TRUSTED_WEB_ACTIVITY_SERVICE 작업을 선언하는 DelegationService 가장 신뢰할 수 있는 표지입니다. TWA만 이를 선언합니다.
LauncherActivity(com.google.androidbrowserhelperManageDataLauncherActivity인 경우가 많음) Bubblewrap 런처입니다.
앱 링크 설정의 확인된 https 도메인(assetlinks.json 정상 작동) TWA가 감싸는 사이트입니다.
libflutter.soindex.android.bundle이 없고 네이티브 코드가 적음 Flutter, React Native, 네이티브 빌드가 아니라 웹 래퍼입니다.

adb로 확인하기

연결된 기기 또는 에뮬레이터에서는 다음 두 명령으로 확인할 수 있습니다.

terminal bash
# Is it a TWA? Look for the delegation service:
adb shell dumpsys package <package.name> | grep -i DelegationService

# Which site does it wrap, and is the trust check passing?
adb shell pm get-app-links <package.name>
#   -> "verified"  = Digital Asset Links pass (fullscreen)
#   -> "1024"      = verification failed (address bar shows)
결과 읽는 방법

결과 읽는 방법: DelegationServiceandroidbrowserhelperLauncherActivity가 보이면 TWA일 가능성이 매우 높습니다. 반대로 자체 MainActivity와 네이티브 .so 라이브러리가 있고 delegation service가 없다면 실제 네이티브 앱 또는 Flutter, React Native 앱입니다. 이 가이드의 참여 신호 문제는 해당 앱에 적용되지 않습니다.

비공개 테스트용 TWA vs WebView 비교

두 아키텍처 모두 웹 콘텐츠를 감쌉니다. 14일 비공개 테스트에서 중요한 차이는 콘텐츠가 어디에서 실행되고 활동이 어떻게 연결되는지입니다. 한 주기 안에 프로덕션 단계로 나아가는 데 영향을 주는 항목을 비교합니다.

주요 비교 항목
TWA / PWA 래퍼
표준 WebView
화면 렌더링 위치
Chrome Custom Tabs
자체 앱 프로세스 내부
참여 신호 강도
약함
강함
"Testers not engaged" 위험
높음(자체 사례 기준)
낮음
Play Console 활성 사용자
적게 기록되는 경우가 있음
더 안정적으로 기록
네이티브 제어(뒤로, 오프라인)
제한적
전체 제어
앱 내 분석 동작
불규칙하거나 적게 집계
표준
얇은 래퍼 검토
계속 적용
계속 적용
14일 테스트 중 안정성
불안정
안정적
거부 위험이 더 높음

TWA / PWA 래퍼

적합한 경우: 이미 게시되어 비공개 테스트 요구사항을 새로 충족할 필요가 없는 앱.

기존 PWA에서 빠르게 설정
주소 표시줄 없는 전체 화면 경험
활동이 Chrome의 한 단계 떨어진 계층에서 실행
"testers not engaged" 거부 비율이 더 높음
Play Console 활성 사용자가 적게 기록될 수 있음
비공개 테스트에 권장

표준 WebView

적합한 경우: 테스터 12명과 14일 비공개 테스트 요구사항에 대응해야 하는 앱.

화면이 자체 앱 프로세스에서 실행
활동이 앱 package에 직접 연결
전체 네이티브 제어: 뒤로 버튼, 오프라인, 오류
표준 분석 동작
얇은 래퍼 검토에 대비할 실제 가치가 여전히 필요
대화형 도구

프레임워크 호환성 확인

WebView는 데스크톱 Chrome과 다르게 작동합니다. 기술 스택을 선택해 출시 시 가장 자주 문제가 되는 설정을 확인하세요.

위에서 프레임워크를 선택하면 WebView 전용 최적화 항목을 볼 수 있습니다.

DOM Storage 활성화

SPA / 클라이언트 라우팅

싱글 페이지 앱은 클라이언트 라우팅과 인증 상태에 localStoragesessionStorage를 사용합니다. settings.domStorageEnabled = true를 켜지 않으면 실행 시 웹 라우팅이 깨져 테스터에게 빈 화면이나 멈춘 로더가 보일 수 있고, 이는 참여 부족으로 읽힐 수 있습니다.

javaScriptEnabled = true도 유지하고 WebViewClient로 앱 내 탐색을 처리해 딥 링크가 Chrome으로 빠져나가지 않게 하세요.

내장 콘텐츠와 업로드용 네이티브 권한 선언

노코드 빌더

WebView는 iframe 내장 콘텐츠를 데스크톱 Chrome과 다르게 처리하며 노코드 빌더는 이를 많이 사용합니다. AndroidManifest.xml에 파일 업로드 권한을 네이티브로 선언하고 WebChromeClient.onShowFileChooser를 연결하세요. 그렇지 않으면 양식과 미디어 업로드가 아무 안내 없이 실패할 수 있습니다.

<uses-permission android:name="android.permission.INTERNET"/>를 추가하고 미디어를 받는다면 카메라와 저장소 권한도 선언한 뒤 런타임에 요청하세요.

오프라인 캐싱과 실제 네이티브 가치 추가

정적 사이트 / CMS

WebView에서 정적 사이트만 불러오면 전형적인 "얇은 래퍼"입니다. cacheMode = LOAD_DEFAULT로 사용할 수 있는 오프라인 대체 화면을 준비하고, 연결이 끊겼을 때 브랜드가 반영된 오류 및 재시도 화면을 보여 주세요. 푸시 알림, 공유 대상, 홈 화면 바로가기 중 최소 하나의 네이티브 기능도 추가하세요.

이런 요소가 CMS나 정적 내보내기 결과물을 "틀 안의 웹사이트"에서 최소 기능 검토에 대응할 수 있는 앱으로 바꿉니다.

해결 방법: 표준 WebView 앱으로 다시 구축

TWA를 패치하거나 더 나은 신호를 끌어내려 하기보다 WebView 컴포넌트를 중심으로 앱을 다시 구축해 그 빌드를 게시하는 편이 깔끔합니다. 다음 세 가지 일반적인 방식은 모두 사이트를 자체 애플리케이션 안에서 불러옵니다.

1
Android Studio 네이티브 WebView

가장 직접적인 방법입니다. main activity에 WebView를 넣고 URL을 지정한 뒤 JavaScript와 DOM storage를 활성화합니다. 추가 프레임워크 없이 최대한 제어할 수 있습니다.

2
Capacitor

앱이 이미 웹 또는 PWA 프로젝트라면 Capacitor가 네이티브 WebView 셸로 감싸고 카메라, 푸시, 저장소 같은 네이티브 플러그인을 제공합니다. TWA 참여 신호 문제를 피하면서 PWA를 전환하는 깔끔한 경로입니다.

3
Cordova

오래됐지만 여전히 사용할 수 있는 선택입니다. 핵심은 같습니다. 웹 콘텐츠가 Chrome Custom Tabs 표면이 아니라 앱 자체 WebView 안에서 실행됩니다.

최소 WebView 설정: 복사해서 사용

핵심은 간단합니다. JavaScript와 storage를 활성화한 WebView가 URL을 불러오고, 탐색을 Chrome으로 보내지 않고 앱 안에 유지하며, Google 검토에서 기대하는 뒤로 버튼 처리를 연결합니다. 언어 탭을 선택해 기본 코드를 복사하세요.

val webView = findViewById<WebView>(R.id.webview)
webView.settings.apply {
    javaScriptEnabled = true          // most sites need this
    domStorageEnabled = true          // localStorage / sessionStorage
    cacheMode = WebSettings.LOAD_DEFAULT
}

// Keep links INSIDE the app (this is the key difference vs a TWA)
webView.webViewClient = WebViewClient()
webView.loadUrl("https://yourwebsite.com")

// The exact back-button handler Google looks for
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
    override fun handleOnBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack()
        } else {
            finish()
        }
    }
})
WebView webView = findViewById(R.id.webview);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);      // most sites need this
settings.setDomStorageEnabled(true);      // localStorage / sessionStorage
settings.setCacheMode(WebSettings.LOAD_DEFAULT);

// Keep links INSIDE the app (this is the key difference vs a TWA)
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://yourwebsite.com");

// The exact back-button handler Google looks for
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
    @Override
    public void handleOnBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            finish();
        }
    }
});
# Wrap an existing web/PWA project in a native WebView shell
npm install @capacitor/core @capacitor/cli
npx cap init "YourApp" "com.yourapp.name"

# Point Capacitor at your live site (capacitor.config.ts)
#   server: { url: "https://yourwebsite.com", cleartext: false }

npm install @capacitor/android
npx cap add android
npx cap sync

# Capacitor handles back-button + DOM storage natively.
# Open in Android Studio to build a signed AAB:
npx cap open android

검토에 대비해 반드시 추가할 세 가지

loadUrl()만 호출하는 기본 WebView는 여전히 얇은 래퍼입니다. 다음 세 가지를 추가하면 실제 앱다운 동작을 갖추고 테스터에게 빈 화면이 보이지 않게 할 수 있습니다.

1
Android 뒤로 버튼 처리

위의 복사용 코드처럼 OnBackPressedCallback을 연결해 뒤로 버튼이 먼저 웹 기록을 이동하고 더 이상 이동할 곳이 없을 때만 앱을 종료하게 하세요. 이 처리가 없으면 한 번 누를 때 앱 전체가 닫혀 고장 난 것처럼 보이며 얇은 래퍼의 즉각적인 위험 신호가 됩니다.

2
오프라인 및 오류 상태 처리

WebViewClientonReceivedError를 구현해 흰 페이지 대신 재시도 버튼이 있는 실제 오프라인 화면을 보여 주세요. 연결이 끊겼을 때 빈 화면이 나타나면 얇은 래퍼로 보이기 쉽고 검토에 불리합니다.

3
실제 네이티브 가치 추가

푸시 알림(FCM), 오프라인 캐싱, 공유 대상, WebChromeClient.onShowFileChooser를 통한 파일 업로드, 기기 연동을 추가하세요. 불러오는 URL 이상의 의미를 주는 기능이 최소 기능 정책 검토에 대응하는 요소입니다.

PWA가 이미 있나요? Capacitor 사용

Android 코드를 직접 작성하고 싶지 않다면 Capacitor가 기존 웹 프로젝트를 네이티브 WebView 셸로 감싸고 뒤로 버튼 처리, 네이티브 시작 화면, 푸시와 카메라 및 파일 시스템 플러그인을 기본 제공합니다. TWA Custom Tabs 동작을 완전히 피하는 가장 직접적인 PWA에서 WebView 전환 경로입니다. 프로세스 내 WebView 활동 연결과 간편한 네이티브 기능을 함께 얻을 수 있습니다.

가장 중요한 규칙

테스트한 앱을 그대로 게시하세요. WebView 앱을 구축해 비공개 테스트를 진행하고 같은 빌드를 프로덕션에 게시해야 합니다. 한 아키텍처를 테스트한 뒤 다른 앱으로 바꾸지 마세요. 검토 대응용 빌드를 제출하고 프로덕션에서 교체하면 Google의 기만적 행위 정책에 걸려 앱이나 계정이 정지될 수 있습니다. WebView를 계속 유지하면 테스트한 앱과 출시하는 앱이 같으므로 이 위험을 피할 수 있습니다.

14일 카운트를 리셋하지 않고 전환하는 방법

이미 테스트가 진행 중이어도 처음부터 다시 시작할 필요는 없습니다. 같은 테스트 트랙과 같은 package name을 유지하면 앱 업데이트 후에도 14일 카운트가 이어집니다. 안전한 전환 순서는 다음과 같습니다.

1
동일한 package name으로 WebView 앱 구축

현재 TWA와 정확히 같은 applicationId를 유지하세요. 다른 package name을 쓰면 새 앱 등록정보가 만들어지고 새로운 14일 주기를 시작해야 합니다.

팁: versionCode를 TWA 빌드보다 최소 1 높이세요. 그렇지 않으면 Play Console이 중복 버전으로 업로드를 거부합니다.
2
실제 독립형 앱처럼 작동하도록 완성

안정적인 로딩, 올바른 Android 뒤로 버튼 처리, 적절한 오프라인 및 오류 상태, 빈 화면 방지가 필요합니다. 다음 섹션의 얇은 래퍼 검토에도 대비할 수 있습니다.

3
기존 비공개 테스트 트랙에 업데이트로 업로드

기존 비공개 테스트 트랙을 열고 새 출시 버전을 만든 뒤 WebView AAB를 업로드하세요. 새 트랙이나 새 앱을 만들면 안 됩니다.

4
테스터가 업데이트한 뒤 계속 참여하도록 유지

테스트에 참여한 테스터가 WebView 버전으로 업데이트하고 계속 사용하면 됩니다. 활성 테스터 12명 이상을 유지하는 동안 카운트는 계속 진행됩니다.

카운트는 계속 진행됩니다

비공개 테스트 트랙에 업데이트를 올려도 14일 카운트는 리셋되지 않습니다. 카운트는 계속 진행되며 Google은 테스트 중의 적극적인 개선을 정상적인 과정으로 봅니다. 따라서 이미 누적한 일수를 잃지 않고 주기 중간에 TWA에서 WebView로 전환할 수 있습니다.

WebView 앱도 여전히 "얇은 래퍼"인가요?

WebView가 모든 문제를 자동으로 해결한다고 생각하면 이 함정에 빠집니다. TWA에서 WebView로 전환하면 참여 신호 문제에 대응할 수 있지만 Google의 스팸 및 최소 기능 정책이 면제되지는 않습니다. 홈페이지를 틀 안에 넣은 것뿐인 WebView는 기본 TWA와 마찬가지로 얇은 래퍼로 거부될 수 있습니다.

두 문제를 서로 다른 두 관문으로 보면 이해하기 쉽습니다. 테스트 서비스나 WebView 재구축은 한 관문에 도움을 줄 수 있지만 다른 관문까지 대신 해결하지는 않습니다.

관문 1

비공개 테스트 요구사항

인원과 기간을 확인합니다. 테스트 참여를 선택한 테스터 12명 이상이 14일 연속 활동해야 합니다. WebView는 참여 신호가 안정적으로 기록되도록 돕고 PrimeTestLab은 테스터를 제공합니다.

인원 + 기간
관문 2

최소 기능(얇은 래퍼)

정책과 품질을 판단합니다. 앱이 실제 가치를 제공하는지, 웹사이트를 틀에 넣은 것뿐인지 검토합니다. 충분한 기능을 갖춘 앱만 이 관문에 대응할 수 있으며, 서비스나 아키텍처 전환이 대신 해결해 주지는 않습니다.

정책 + 품질

목표는 단순히 "TWA 대신 WebView"가 아니라, 독립적인 앱으로 인정받을 만큼 실제 가치와 네이티브 동작을 갖춘 WebView 앱입니다. 실무적으로는 다음이 필요합니다.

A
Android 뒤로 버튼을 올바르게 처리

뒤로 버튼은 먼저 웹 기록을 이동하고 마지막에 자연스럽게 앱을 종료해야 합니다. 테스터를 빈 화면에 남기거나 앱을 갑자기 종료하면 안 됩니다.

B
오프라인 및 오류 상태 처리

실제 오프라인 안내 화면과 재시도 경로를 보여 주세요. 연결이 끊겼을 때 흰 화면이 나타나면 얇은 래퍼처럼 보이기 쉽습니다.

C
실제 네이티브 가치 추가

푸시 알림, 홈 화면 경험, 기기 연동, 오프라인 캐싱처럼 불러오는 URL 이상의 의미를 주는 기능을 추가하세요.

미끼 교체 금지 규칙

충분한 기능을 갖춘 앱을 테스트한 뒤 프로덕션에서 근본적으로 다르거나 더 빈약한 앱으로 교체하면 안 됩니다. Google이 계정을 정지할 수 있는 기만적 행위에 해당합니다.

WebView 아키텍처를 선택하고 충분한 기능을 구현한 뒤, 그 빌드를 테스트하고 정확히 같은 빌드를 게시하세요. 테스트부터 프로덕션까지 같은 앱을 유지해야 합니다.

품질 거부를 일으키는 항목을 더 자세히 확인하려면 비공개 테스트가 반려되는 이유 가이드에서 참여 문제 외에 흔한 정책 및 검토 실패를 확인하세요.

앱이 TWA인지 모르시나요? 주문 즉시 확인합니다

직접 adb 명령을 실행하거나 APK를 살펴볼 필요가 없습니다. PrimeTestLab이 앱이 TWA인지 확인해 드립니다. 테스트 서비스를 주문하면 팀이 빌드를 검사해 TWA 또는 PWA 래퍼인지 판별합니다. 해당한다면 참여 문제로 지적될 수 있는 아키텍처에 14일을 쓰기 전에 정확한 수정 방향을 알려 드립니다.

200+ 확인한 TWA 앱

최근 몇 달 동안만 TWA 앱 200개 이상을 검사하고 조언했습니다. 권고와 수정 뒤에는 해당 앱들이 테스트 주기를 더 안정적으로 진행할 수 있었습니다. TWA를 발견하면 막연한 "다시 시도하세요"가 아니라 실행 가능한 재구축 계획을 드립니다.

주문하는 순간 진행되는 일

1
주문하고 앱을 공유합니다

비공개 테스트 트랙이나 빌드를 공유하면 추가 요청 없이 앱이 검토 대기열에 들어갑니다.

2
빌드에서 TWA 표지를 즉시 검사합니다

팀이 DelegationService, androidbrowserhelper 런처, Custom Tabs 동작, 네이티브 코드 부재 같은 TWA 표지를 확인합니다. 이는 위의 식별 섹션에서 설명한 항목과 같습니다.

3
TWA라면 표시하고 정확한 수정 방법을 안내합니다

구체적인 권고, 보통 이 가이드의 WebView 재구축 방법을 받아 참여 검토에서 문제가 될 수 있는 빌드에 14일을 쓰기 전에 아키텍처를 수정할 수 있습니다.

4
준비가 끝나면 테스터가 14일 전체 주기를 진행합니다

적절한 아키텍처를 갖추고 검증된 테스터 12명 이상이 14일 연속 활동하면 두 관문에 모두 대비할 수 있습니다. 이런 방식으로 성공률 99.9%를 유지합니다.

몇 주를 아낄 수 있는 이유

많은 개발자는 14일 주기가 거부된 뒤에야 TWA가 문제였음을 알게 되어 처음부터 다시 시작합니다. 저희가 0일 차에 발견하면 아키텍처를 한 번 고치고, 한 번 테스트하고, 그 빌드를 그대로 게시할 수 있습니다. 2주 뒤 다음 단계로 나아가는 경우와 한 달 동안 거부를 반복하는 경우를 가르는 차이입니다.

PrimeTestLab이 돕는 부분: 문제의 나머지 절반

아키텍처는 문제의 절반입니다. 다른 절반은 많은 1인 개발자가 막히는 부분으로, 실제로 테스트 참여를 선택하고 14일 연속 유지할 테스터 12명을 구하는 일입니다. 그 부분을 PrimeTestLab이 맡습니다.

검증된 테스터가 실제 Android 기기로 테스트에 참여하고 전체 요구 기간 동안 활동하도록 관리합니다. 한 명이 이탈해도 14일 연속 기록이 깨지지 않도록 여유 인원도 둡니다. 비공개 테스트 참여 링크를 공유하면 초대, 참여 확인, 일일 활동 모니터링, 14일 유지 관리를 맡습니다. 지금까지 7,400개가 넘는 앱을 지원했고 첫 시도 성공률은 99.9%입니다.

$19.99부터 · 서비스 수수료 5% 추가 테스터 12명
4~6시간 테스트 시작
7,400+ 앱 성공률 99.9%
정확히 말씀드리면

테스트 서비스는 테스터 요구사항을 맡습니다. 앱 아키텍처를 선택하거나 얇은 래퍼 검토를 대신 해결하지는 않습니다. 충분한 기능을 갖춘 WebView 빌드14일 전체 기간에 참여하는 실기기 테스터 12명을 함께 준비해야 어느 쪽도 거부 원인이 되지 않습니다.

현재 플랜

Starter 테스터 12명 $19.99 서비스 수수료 5% 추가
  • Google 최소 기준 충족
  • 실제 Android 기기
  • 14일 전체 참여 관리
플랜 보기
추천 Enterprise 테스터 25명 $27.99 서비스 수수료 5% 추가
  • 가장 큰 안전 여유
  • 가장 다양한 기기 구성
  • 첫 시도 대비 강화
플랜 보기
Professional 테스터 20명 $29.99 서비스 수수료 5% 추가
  • 안전 여유 인원 포함
  • 더 다양한 기기 구성
  • 검토 대비 강화
플랜 보기

서비스 수수료 5% 추가 · 무료 재테스트 또는 전액 환불

자주 묻는 질문

TWA 앱이 비공개 테스트에서 계속 거부되는 이유는 무엇인가요?

7,400개가 넘는 앱을 지원하며 확인한 결과, TWA와 PWA 래퍼 빌드는 테스터가 매일 활동해도 표준 네이티브 앱보다 "testers were not engaged" 거부를 더 자주 받았습니다. 웹 콘텐츠가 자체 앱 프로세스가 아니라 Chrome Custom Tabs 표면에서 실행될 때 Google의 프로덕션 액세스 검토가 읽는 참여 신호가 더 약하게 전달되는 것으로 보입니다. Google은 정확한 신호를 공개하지 않으므로, 이는 공식 정책이 아니라 저희 관찰로 봐야 합니다.

TWA를 수정해야 하나요, WebView로 전환해야 하나요?

저희 경험상 TWA에서 참여 신호를 개선하려 하기보다 표준 WebView 앱으로 다시 구축하는 편이 더 안정적입니다. WebView는 사이트를 자체 앱 프로세스 안에서 불러와 활동이 package name에 직접 연결됩니다. WebView로 전환했다면 테스트한 그 빌드를 프로덕션에 게시하고 TWA로 되돌리지 마세요.

WebView 앱이면 비공개 테스트 요구사항을 자동으로 충족하나요?

아닙니다. WebView 전환은 TWA에서 관찰되는 참여 신호 문제에 대응하지만, Google의 스팸 및 최소 기능 정책을 면제하지 않습니다. 웹사이트만 틀 안에 넣은 WebView는 여전히 얇은 래퍼로 거부될 수 있습니다. Android 뒤로 버튼, 오프라인 및 오류 상태, 실제 네이티브 가치를 갖춘 앱으로 만들어야 합니다.

비공개 테스트 중 앱을 업데이트하면 14일 카운트가 리셋되나요?

아닙니다. 동일한 package name과 기존 비공개 테스트 트랙을 유지한 채 업데이트를 올리면 14일 카운트는 계속 진행됩니다. 따라서 주기 중간에도 TWA 빌드를 WebView 빌드로 교체할 수 있습니다. Google은 테스트 중의 정상적인 개선과 업데이트를 허용합니다.

TWA의 Play Console 활성 사용자 수가 낮게 보이는 이유는 무엇인가요?

일부 개발자는 TWA 빌드에서 활성 사용자 수가 예상보다 낮다고 보고합니다. Google은 정확한 원인을 공개하지 않지만, 웹 콘텐츠가 자체 앱이 아니라 Chrome Custom Tabs 표면에서 실행되는 구조와 관련된 것으로 보입니다. WebView는 화면이 자체 앱 프로세스에서 실행되므로 활동이 더 안정적으로 기록되는 경향이 있습니다.

TWA를 테스트하고 대신 WebView 앱을 게시해도 안전한가요?

안전한 방법은 같은 빌드를 테스트하고 게시하는 것입니다. 먼저 WebView로 다시 구축하고, 그 WebView 빌드로 비공개 테스트를 진행한 뒤, 정확히 같은 빌드를 프로덕션에 게시하세요. 검토용 앱을 제출한 뒤 근본적으로 다른 앱으로 교체하면 Google의 기만적 행위 정책에 따라 앱이나 계정이 정지될 수 있습니다.

TWA 또는 PWA 래퍼도 Google Play에 게시될 수 있나요?

가능합니다. 래퍼 앱도 최소 기능 정책을 충족하고 비공개 테스트 요구사항을 마치면 게시될 수 있습니다. 다만 개인 개발자 계정이 테스터 12명과 14일 비공개 테스트를 진행해야 하는 상황에서는 WebView 빌드가 참여 검토에 더 안정적으로 대응하는 사례를 반복해서 확인했기 때문에 WebView를 권합니다.

TWA는 Android WebView 컴포넌트를 사용하나요?

아닙니다. TWA는 Android WebView를 사용하지 않습니다. 사용자의 전체 브라우저, 보통 Chrome에 URL을 전달하고 Custom Tabs 엔진으로 UI 없이 전체 화면을 렌더링합니다. 반면 Android WebView는 앱이 제어하는 내장형 브라우저로 자체 앱 프로세스 안에서 실행됩니다. 이 차이가 WebView 재구축이 참여 신호 귀속에 도움이 되는 이유입니다.

TWA 상단에 브라우저 주소 표시줄이 나타나는 이유는 무엇인가요?

Digital Asset Links 신뢰 확인에 실패했기 때문입니다. Chrome은 사이트의 /.well-known/assetlinks.json 파일에 앱 package name과 서명 인증서 SHA-256 지문이 올바르게 들어 있을 때만 주소 표시줄을 숨깁니다. 파일이 없거나 404를 반환하거나 지문이 Google Play App Signing 키와 다르면 주소 표시줄이 나타납니다. assetlinks.json을 고치면 전체 화면은 복구되지만 비공개 테스트 참여 거부까지 해결되지는 않습니다.

앱이 TWA인지 어떻게 확인하나요?

빌드를 검사하세요. 가장 확실한 표지는 TRUSTED_WEB_ACTIVITY_SERVICE 작업을 선언하는 DelegationService입니다. 보통 com.google.androidbrowserhelperLauncherActivity도 보입니다. 연결된 기기에서는 adb shell dumpsys package <package> | grep -i DelegationServiceadb shell pm get-app-links <package> 명령으로 각각 서비스와 Digital Asset Links 확인 상태를 볼 수 있습니다.

PrimeTestLab이 제 앱이 TWA인지 확인해 주나요?

네. 테스트 서비스를 주문하면 팀이 빌드를 검사해 TWA 또는 PWA 래퍼인지 확인하고, 해당한다면 14일 주기를 시작하기 전에 구체적인 수정 권고를 보냅니다. 최근 몇 달 동안 TWA 앱 200개 이상을 확인했으며, 권고와 수정 뒤에는 해당 앱들이 테스트 주기를 더 안정적으로 진행할 수 있었습니다. 직접 adb를 실행하거나 APK를 검사하지 않아도 됩니다.

PrimeTestLab 테스터는 얼마나 빨리 시작하나요?

비공개 테스트 트랙이 공개되고 접근 가능한 상태라면 보통 4~6시간 안에 테스트 참여가 시작됩니다. 가격은 테스터 12명에 $19.99부터이며 서비스 수수료 5%가 추가됩니다. 현재 성공률은 99.9%이고, 무료 재테스트 또는 전액 환불 중에서 선택할 수 있습니다.

핵심 요약

요약

TWA 빌드가 참여 부족으로 Google Play 비공개 테스트에서 계속 거부된다면, 가장 깔끔한 대응은 표준 WebView 앱으로 다시 구축해 그 빌드를 프로덕션에 게시하는 것입니다. 이후 TWA로 되돌리지 마세요. 업데이트가 14일 카운트를 리셋하지 않도록 동일한 package name을 유지하고, 최소 기능 검토에 대응할 만큼 충분한 앱으로 만드세요. PrimeTestLab은 테스터 12명과 14일 요구사항을 맡습니다. WebView는 참여 신호 문제에 대응하고, 실질적인 앱은 thin wrapper 검토에 대비하며, PrimeTestLab은 테스터를 제공합니다. 요금제 보기 →

Kefayatullah Khadem - 소프트웨어 엔지니어 · Google Play 출시 전문가

작성

Kefayatullah Khadem

소프트웨어 엔지니어 · Google Play 출시 전문가

Kefayatullah Khadem은 확장 가능한 애플리케이션을 8년 이상 다뤄 온 소프트웨어 엔지니어입니다. PrimeTestLab에서 개발자가 Google Play 비공개 테스트 요구사항을 충족하도록 돕고, 실제 사례와 공식 문서를 바탕으로 가이드를 작성합니다.

7,400+ 테스트 앱
99.9% 성공률
120+ 국가
4.9/5 평점

성공률 99.9%

WebView로 다시 구축하셨나요? 14일 테스트를 맡기세요.

실제 테스터, 실기기, 14일 전체 참여 관리를 제공합니다.

$19.99부터 · 서비스 수수료 5% 추가

테스트 4~6시간 내 시작 · 120+개국 · 무료 재테스트 또는 전액 환불

PrimeTestLab으로 앱을 출시한 개발자 7,400+명과 함께하세요

테스터 12명 · 4~6시간 내 WhatsApp