Chuyển đến nội dung

Hướng dẫn sửa lỗi bị từ chối 2026

App TWA bị từ chối trên Google Play? Hãy chuyển sang WebView

Nếu app Trusted Web Activity của bạn liên tục thất bại trong thử nghiệm khép kín với thông báo "testers were not engaged", cách sửa đáng tin cậy nhất là dựng lại thành app WebView tiêu chuẩn và phát hành chính bản dựng đó. Bài viết giải thích vì sao app bọc TWA và PWA bị gắn cờ, đồng thời chỉ rõ cách chuyển đổi mà không đặt lại đồng hồ 14 ngày.

TWA Bị gắn cờ thường xuyên hơn
WebView Cách sửa đáng tin cậy
14 ngày Đồng hồ không đặt lại
99,9% Tỷ lệ thành công PTL
Tester chưa tương tác
Bị từ chối App bọc TWA / PWA Chạy trên bề mặt Chrome
Lớp vỏ app của bạn Chrome Custom Tab Nội dung web

Tương tác được đọc là yếu → bị từ chối

Được ghi nhận WebView tiêu chuẩn Chạy trong tiến trình của bạn
Lớp vỏ app của bạn WebView (trong tiến trình) Nội dung web

Hoạt động được ghi nhận → sẵn sàng xem xét

Trả lời nhanh

Nếu app TWA của bạn liên tục thất bại trong thử nghiệm khép kín (closed testing) với thông báo "testers were not engaged", cách đáng tin cậy nhất theo kinh nghiệm của chúng tôi là dựng lại thành app WebView tiêu chuẩn bằng Android Studio WebView, Capacitor hoặc Cordova, rồi phát hành chính bản dựng đó, không phải TWA. Giữ nguyên tên package và tải lên dưới dạng bản cập nhật để đồng hồ 14 ngày không bị đặt lại. WebView xử lý vấn đề tín hiệu tương tác nhưng không miễn cho bạn khỏi bước xem xét app bọc sơ sài, vì vậy app vẫn phải có giá trị thực. Nếu nút thắt là tìm 12 tester hoạt động trong 14 ngày liên tục, PrimeTestLab xử lý đúng phần đó, từ $19.99 cộng 5% phí dịch vụ, thường bắt đầu trong 4-6 giờ.

Đây là một trong những lần bị từ chối gây khó chịu nhất với nhà phát triển độc lập. Tester của bạn thực sự đã hoạt động. Bạn có đủ 12 người. 14 ngày đã trôi qua. Nhưng Google vẫn phản hồi rằng "your testers were not engaged enough." Nếu app được xây dưới dạng Trusted Web Activity (TWA) hoặc app bọc PWA, bạn không hề tưởng tượng ra quy luật này. Trong 7.400+ app chúng tôi đã tiếp nhận, bản dựng dạng wrapper gặp lỗi từ chối cụ thể này thường xuyên hơn nhiều so với bản dựng native tiêu chuẩn hoặc WebView. Hướng dẫn này giải thích nguyên nhân, cho thấy khác biệt kiến trúc quan trọng và chỉ cách chuyển sang WebView mà không mất những ngày thử nghiệm đã tích lũy.

Vì sao app TWA gặp lỗi bị từ chối trong thử nghiệm khép kín?

Trusted Web Activity hiển thị trang web qua bề mặt Chrome Custom Tabs thay vì vẽ màn hình trong chính app của bạn. Đây là cách nhanh để biến trang web hoặc PWA thành thứ có thể cài đặt, và nhiều app trên kênh phát hành công khai vẫn hoạt động tốt. Rắc rối xuất hiện khi tài khoản nhà phát triển cá nhân phải hoàn thành yêu cầu thử nghiệm khép kín bắt buộc trong 14 ngày trước khi đăng ký quyền truy cập vào kênh phát hành công khai.

Qua kinh nghiệm hỗ trợ 7.400+ app trong quy trình này, chúng tôi thấy bản dựng TWA và app bọc PWA gặp thông báo từ chối "testers were not engaged" thường xuyên hơn nhiều so với app native tiêu chuẩn, ngay cả khi tester thực sự hoạt động mỗi ngày. Quy luật đủ nhất quán để chúng tôi khuyên nhà phát triển tránh TWA khi app vẫn phải hoàn thành thử nghiệm khép kín 14 ngày.

Phát hiện 01

Tín hiệu tương tác yếu

Hoạt động mà Google đọc trong quá trình xem xét có vẻ yếu hơn khi nội dung chạy trên bề mặt Chrome thay vì trong tiến trình của app. Mức sử dụng thật có thể trông giống mức sử dụng thấp.

Phát hiện 02

Bị từ chối với thông báo "testers not engaged"

Đây là thông báo phổ biến nhất chúng tôi thấy ở bản dựng TWA. Tester đã chọn tham gia, cài đặt và dùng app hằng ngày, nhưng quá trình xem xét quyền truy cập vào kênh phát hành công khai vẫn đánh dấu mức tương tác là chưa đủ.

Phát hiện 03

Ít người dùng hoạt động trong Play Console

Một số nhà phát triển cũng báo cáo số người dùng hoạt động thấp bất ngờ trên trang tổng quan của bản dựng TWA, phù hợp với hành vi trên bề mặt Chrome.

Phát hiện 04

Tiếp tục bị từ chối khi gửi lại

Vì kiến trúc là nguyên nhân gốc, gửi lại cùng một bản dựng TWA thường dẫn đến cùng kết quả. Đó là lý do bản vá nhỏ hiếm khi giải quyết được vấn đề, còn dựng lại thì có thể.

Lưu ý thẳng thắn

Lưu ý thẳng thắn: Google không công khai chính xác các tín hiệu được cân nhắc ở giai đoạn xem xét quyền truy cập vào kênh phát hành công khai, vì vậy cơ chế cụ thể ở đây là quan sát của chúng tôi, không phải chính sách chính thức. Hãy thận trọng với bài đăng diễn đàn tuyên bố biết chính xác dữ liệu đo từ xa. Điều chúng tôi có thể báo cáo chắc chắn là kết quả lặp lại: bản dựng TWA bị từ chối vì tương tác, còn bản dựng WebView tương đương tiến triển đáng tin cậy hơn.

TWA thực sự là gì và được xây như thế nào?

Trước khi sửa lỗi bị từ chối, bạn cần hiểu chính xác mình đã phát hành gì. Trusted Web Activity là app Android mà về bản chất là trang web của bạn chạy toàn màn hình trong một công cụ trình duyệt thực. Không có thanh địa chỉ, không có giao diện trình duyệt và không có dấu hiệu cho người dùng biết họ đang xem trang web. Với người dùng, nó trông và hoạt động như app native. Bên dưới, đó vẫn là trang web đang hoạt động của bạn.

TWA thường được tạo bằng CLI Bubblewrap của Google hoặc PWABuilder, cả hai đều nằm trên thư viện androidbrowserhelper của Google. Bạn trỏ công cụ tới một URL, nó tạo dự án Android, sau đó bạn ký và tải AAB lên Google Play.

Vì sao nhà phát triển chọn TWA?

Một cơ sở mã

Bạn đã có trang web, lý tưởng nhất là PWA. TWA đưa nó lên Play Store mà không cần viết lại bằng Kotlin, Flutter hoặc React Native.

Cập nhật tức thì

Vì app tải trang web đang hoạt động, bạn triển khai thay đổi bằng cách cập nhật trang web. Không cần cập nhật app và không phải chờ thêm một hàng đợi xem xét.

Nhanh và ít tốn công

Tạo TWA mất vài phút chứ không phải vài tuần. Với PWA có sẵn, đây là con đường ít tốn công nhất để lên Android.

Sự đánh đổi dẫn đến bị từ chối

Chính yếu tố giúp TWA rẻ và nhanh lại khiến nó mong manh trong thử nghiệm khép kín:

  • TWA cần Internet. Nó là cửa sổ nhìn vào trang web, nên kết nối yếu tạo ra trải nghiệm app yếu nếu PWA không có hỗ trợ ngoại tuyến vững chắc.
  • Nguy cơ bị Play Store từ chối. Chính sách Chức năng tối thiểu và nội dung được đóng gói lại nhắm vào app chỉ là trang web nằm trong một lớp bọc. TWA không có năng lực native thực có thể bị từ chối hoặc gỡ bỏ, nhất là với lần gửi mới. Thêm thông báo đẩy, chế độ ngoại tuyến, camera hoặc mục tiêu chia sẻ giúp app có giá trị native thật.
  • Vấn đề tín hiệu tương tác đã nêu ở trên giải thích vì sao tài khoản cá nhân phải chạy thử nghiệm khép kín 14 ngày thường gặp thông báo "testers not engaged".

Hiểu lầm phổ biến: TWA không phải WebView

Đây là phần nhiều bài viết giải thích sai. Cần nói chính xác vì sự khác biệt này quyết định cách bạn sửa vấn đề. TWA hoàn toàn không dùng thành phần WebView của Android.

Hiểu lầm

"TWA chỉ là một app bọc WebView"

WebView của Android là trình duyệt rút gọn có thể nhúng và do app kiểm soát. Nó có ít tính năng và mức cách ly bảo mật thấp hơn. TWA không dùng thành phần này.

Thực tế

TWA dùng công cụ Custom Tabs

Nó chuyển URL cho trình duyệt đầy đủ đã cài trên thiết bị, thường là Chrome, và yêu cầu trình duyệt kết xuất trang toàn màn hình không có giao diện. Đây là công cụ trình duyệt thực, không phải thành phần nhúng.

Vì TWA dùng công cụ phía sau Custom Tabs, bạn có cùng công cụ kết xuất, công cụ JavaScript và vùng cách ly bảo mật như trình duyệt Chrome thực, cộng thêm cookie và bộ nhớ dùng chung với Chrome. Người đã đăng nhập trên web vẫn giữ trạng thái đăng nhập. Bạn cũng nhận cập nhật trình duyệt tự động và hỗ trợ đầy đủ nền tảng web. Điều đó rất mạnh với app đã phát hành bình thường, nhưng cũng có nghĩa là màn hình chạy ngoài tiến trình, bên trong Chrome, không nằm trong app của bạn. Đây là gốc của cả sự suy giảm tín hiệu tương tác lẫn số người dùng hoạt động thấp.

Luồng khởi chạy theo từng bước

1
Người dùng chạm vào biểu tượng app

Android khởi chạy LauncherActivity của TWA từ androidbrowserhelper.

2
Activity yêu cầu Chrome mở URL

Trang mở trong Custom Tab toàn màn hình không có giao diện Chrome. Không thanh địa chỉ, không thẻ và không giao diện trình duyệt.

3
Chrome kiểm tra độ tin cậy trước khi ẩn thanh địa chỉ

Đây là chữ "Trusted" trong Trusted Web Activity. Nếu app không chứng minh được quyền sở hữu trang web, thanh địa chỉ vẫn hiện và cảm giác như app native bị phá vỡ.

Kiểm tra độ tin cậy bằng Digital Asset Links

Chrome chỉ bỏ thanh địa chỉ khi app chứng minh được quyền sở hữu trang web bằng Digital Asset Links. App khai báo trang web đại diện, còn trang web phải cung cấp tệp tại /.well-known/assetlinks.json có tên package của app và vân tay SHA-256 của chứng chỉ ký.

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
    ]
  }
}]
Cách quá trình xác minh được giải quyết

App khai báo trang web

Manifest nêu tên miền https mà app đại diện.

Trang web cung cấp assetlinks.json

Tệp liệt kê tên package và vân tay SHA-256.

Chrome đối chiếu hai phía

Vân tay phải khớp chứng chỉ ký của app.

Khớp App chạy toàn màn hình như app native. Thanh địa chỉ được ẩn.
Thiếu / 404 / sai vân tay App vẫn mở nhưng Chrome hiện thanh địa chỉ. Đây là lỗi TWA phổ biến nhất.
Lỗi TWA số 1

Nếu tester thấy thanh địa chỉ trình duyệt ở phía trên "app", tệp assetlinks.json đang thiếu, trả về 404 hoặc chứa sai vân tay SHA-256. Hãy sửa tệp và bảo đảm vân tay khớp khóa mà Google Play thực sự dùng trong Play App Signing. Tuy nhiên, việc này chỉ khôi phục cảm giác toàn màn hình. Nó không sửa lỗi bị từ chối do tín hiệu tương tác, vốn cần bản dựng WebView.

Đường đi của tín hiệu tương tác: TWA vs WebView

Cách đơn giản nhất để hiểu lỗi bị từ chối là theo dõi hoạt động của tester thực sự đi đâu. Trong TWA, màn hình nằm cách app một lớp, bên trong bề mặt Chrome Custom Tabs. Trong app WebView, cùng các màn hình đó chạy trong tiến trình của chính app và được quy trực tiếp cho package. Khác biệt duy nhất này làm thay đổi độ mạnh của tín hiệu được ghi nhận.

Hoạt động của tester được quy cho đâu

TWA
Tester chạm vào app Package của bạn Chrome Custom Tab Nội dung web
Yếu
WebView
Tester chạm vào app Package của bạn WebView (trong tiến trình) Nội dung web
Mạnh
Điểm mấu chốt

WebView tải URL của trang web bên trong chính app, nên hoạt động được ghi nhận cho package theo cách quá trình xem xét của Google mong đợi. Với TWA, Custom Tab ở giữa là bước nhảy bổ sung có vẻ làm loãng tín hiệu. Đây cũng là lý do số thấp trong công cụ phân tích web của chính bạn, như Google Analytics hoặc Firebase ở lớp web, không nhất thiết có nghĩa là Google thấy mức sử dụng bằng không. Tuy nhiên, kết quả thực tế với thử nghiệm khép kín vẫn giống nhau: dựng lại bằng WebView là cách sửa đáng tin cậy.

Cách nhận biết TWA từ bên ngoài và bên trong

Không chắc app bạn hoặc nhà thầu đã phát hành có thực sự là TWA hay không? Đây là cách xác nhận, trước tiên bằng mắt thường, sau đó kiểm tra dứt điểm từ APK hoặc thiết bị đã kết nối.

Dấu hiệu trực quan nhanh với người dùng

  • App hoạt động giống hệt trang web vì bản chất nó chính là trang web.
  • Nếu nhà phát triển cấu hình sai, bạn sẽ thấy thanh địa chỉ trình duyệt ở phía trên. Đây là dấu hiệu rất rõ, liên quan đến lỗi assetlinks đã nêu.
  • Nội dung cập nhật mà không có bản cập nhật app trên Play Store.

Dấu hiệu kỹ thuật xác định khi kiểm tra APK hoặc thiết bị

Dấu hiệu Ý nghĩa
DelegationService khai báo hành động TRUSTED_WEB_ACTIVITY_SERVICE Dấu vân tay đáng tin cậy nhất. Chỉ TWA khai báo hành động này.
LauncherActivity, thường là ManageDataLauncherActivity, từ com.google.androidbrowserhelper Trình khởi chạy Bubblewrap.
Một tên miền https đã xác minh trong cài đặt liên kết của app, tức assetlinks.json hoạt động Trang web mà TWA bọc.
Không có libflutter.so, không có index.android.bundle, rất ít mã native Đây là app bọc web, không phải bản dựng Flutter, React Native hoặc native.

Xác nhận bằng adb

Trên thiết bị hoặc trình giả lập đã kết nối, hai lệnh sau sẽ cho câu trả lời:

dòng lệnh 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)
Cách đọc kết quả

Cách đọc kết quả: nếu bạn thấy DelegationService cùng LauncherActivity từ androidbrowserhelper, gần như chắc chắn đó là TWA. Nếu thay vào đó bạn thấy MainActivity tùy chỉnh, các thư viện native .so và không có dịch vụ ủy quyền, đây là app native thực hoặc app Flutter hay React Native. Vấn đề tín hiệu tương tác trong hướng dẫn này không áp dụng cho app đó.

TWA vs WebView trong thử nghiệm khép kín: so sánh trực tiếp

Cả hai kiến trúc đều bọc nội dung web. Khác biệt quan trọng với thử nghiệm khép kín 14 ngày nằm ở nơi nội dung chạy và cách hoạt động được quy về app. Dưới đây là so sánh theo những tiêu chí quyết định liệu bạn có thể tiến tới kênh phát hành công khai trong một chu kỳ hay không.

Điều bạn quan tâm
App bọc TWA / PWA
WebView tiêu chuẩn
Nơi màn hình được kết xuất
Chrome Custom Tabs
Trong tiến trình của app
Độ mạnh tín hiệu tương tác
Yếu
Mạnh
Nguy cơ "testers not engaged"
Cao theo dữ liệu của chúng tôi
Thấp
Người dùng hoạt động trong Play Console
Thường báo cáo thiếu
Ghi nhận đáng tin cậy
Quyền kiểm soát native như nút Quay lại, ngoại tuyến
Hạn chế
Kiểm soát đầy đủ
Hành vi phân tích trong app
Bất thường, có thể đếm thiếu
Tiêu chuẩn
Xem xét app bọc sơ sài
Vẫn áp dụng
Vẫn áp dụng
Độ tin cậy trong thử nghiệm 14 ngày
Không ổn định
Đáng tin cậy
Nguy cơ bị từ chối cao hơn

App bọc TWA / PWA

Phù hợp nhất với app đã được phê duyệt và không cần hoàn thành thử nghiệm khép kín.

Thiết lập nhanh từ PWA có sẵn
Trải nghiệm toàn màn hình không có thanh địa chỉ
Hoạt động chạy cách một lớp bên trong Chrome
Tỷ lệ gặp lỗi "testers not engaged" cao hơn
Có thể báo cáo thiếu người dùng hoạt động trong Play Console
Nên dùng cho thử nghiệm khép kín

WebView tiêu chuẩn

Phù hợp nhất với app phải hoàn thành thử nghiệm khép kín 14 ngày cùng 12 tester.

Màn hình chạy trong tiến trình của app
Hoạt động được quy trực tiếp cho package
Kiểm soát native đầy đủ: nút Quay lại, ngoại tuyến và lỗi
Hành vi phân tích tiêu chuẩn
Vẫn cần giá trị thực để vượt qua bước xem xét app bọc sơ sài
Tương tác

Kiểm tra khả năng tương thích framework

WebView hoạt động khác Chrome trên máy tính. Chọn công nghệ của bạn để xem cài đặt thường gây lỗi nhất khi khởi chạy.

Chọn framework ở trên để xem cách tối ưu riêng cho WebView.

Bật DOM Storage

SPA / định tuyến phía máy khách

App một trang dựa vào localStoragesessionStorage để định tuyến phía máy khách và lưu trạng thái xác thực. Nếu không bật settings.domStorageEnabled = true, định tuyến web sẽ hỏng khi khởi chạy. Tester có thể gặp màn hình trống hoặc trình tải bị kẹt, khiến hoạt động trông như không có tương tác.

Đồng thời giữ javaScriptEnabled = true và xử lý điều hướng trong app bằng WebViewClient để liên kết sâu không bật ra Chrome.

Khai báo quyền native cho nội dung nhúng và tải lên

Trình dựng không cần mã

WebView xử lý nội dung nhúng iframe khác Chrome trên máy tính, trong khi trình dựng no-code phụ thuộc nhiều vào chúng. Hãy khai báo quyền tải tệp ở cấp native trong AndroidManifest.xml và nối WebChromeClient.onShowFileChooser, nếu không biểu mẫu và tải nội dung đa phương tiện có thể âm thầm thất bại.

Thêm <uses-permission android:name="android.permission.INTERNET"/>. Nếu nhận nội dung đa phương tiện, hãy thêm quyền camera hoặc bộ nhớ rồi yêu cầu chúng khi chạy.

Thêm bộ nhớ đệm ngoại tuyến và giá trị native thực

Tĩnh / CMS

Trang tĩnh đơn thuần được tải trong WebView là ví dụ điển hình của app bọc sơ sài. Đặt cacheMode = LOAD_DEFAULT để có phương án ngoại tuyến dùng được, thêm màn hình lỗi và thử lại có thương hiệu khi mất kết nối, rồi bổ sung ít nhất một tính năng native như thông báo đẩy, mục tiêu chia sẻ hoặc lối tắt màn hình chính.

Những yếu tố này biến bản xuất CMS hoặc trang tĩnh từ một trang web được đóng khung thành app có thể vượt qua bước xem xét Chức năng tối thiểu.

Cách sửa: xây app WebView tiêu chuẩn

Thay vì vá TWA hoặc cố ép nó tạo tín hiệu tốt hơn, con đường gọn nhất là dựng lại app quanh một thành phần WebView và phát hành bản dựng đó. Có ba cách phổ biến, tất cả đều tải trang web trong chính app của bạn:

1
WebView native trong Android Studio

Cách trực tiếp nhất. Đặt WebView trong activity chính, trỏ nó đến URL rồi bật JavaScript và DOM storage. Bạn có quyền kiểm soát tối đa mà không cần framework bổ sung.

2
Capacitor

Nếu app đã là dự án web hoặc PWA, Capacitor bọc dự án trong lớp vỏ WebView native và cung cấp plugin native cho camera, thông báo đẩy và bộ nhớ. Đây là đường nâng cấp gọn từ PWA mà không gặp vấn đề tín hiệu TWA.

3
Cordova

Lựa chọn cũ hơn nhưng vẫn dùng được. Ý tưởng cốt lõi giống nhau: nội dung web chạy trong WebView của app, không nằm trên bề mặt Chrome Custom Tabs.

Thiết lập WebView tối thiểu, sẵn sàng sao chép

Phần cốt lõi rất nhỏ: một WebView tải URL khi JavaScript và bộ nhớ đã bật, giữ điều hướng bên trong app thay vì bật sang Chrome, đồng thời nối trình xử lý nút Quay lại mà quá trình xem xét của Google mong đợi. Chọn ngôn ngữ của bạn và sao chép cấu hình cơ sở:

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

Ba yếu tố phải thêm để vượt qua bước xem xét

WebView trần chỉ gọi loadUrl() vẫn là app bọc sơ sài. Ba phần bổ sung sau biến nó thành app thực và giúp tester không gặp màn hình trống:

1
Xử lý nút Quay lại của Android

Nối OnBackPressedCallback như trong snippet phía trên để nút Quay lại duyệt lịch sử web trước và chỉ thoát app khi không còn nơi nào để quay về. Nếu thiếu phần này, một lần chạm sẽ đóng toàn bộ app và tạo cảm giác hỏng, một dấu hiệu rõ của app bọc sơ sài.

2
Quản lý trạng thái ngoại tuyến và lỗi

Triển khai onReceivedError trong WebViewClient để hiện màn hình "bạn đang ngoại tuyến" thực sự cùng nút thử lại, thay vì một trang trắng. Màn hình trống khi mất kết nối là cách nhanh nhất khiến app trông như lớp bọc sơ sài và thất bại ở bước xem xét.

3
Thêm giá trị native thực

Thông báo đẩy FCM, bộ nhớ đệm ngoại tuyến, mục tiêu chia sẻ, tải tệp qua WebChromeClient.onShowFileChooser hoặc tích hợp thiết bị. Bất kỳ yếu tố nào giúp app có ý nghĩa vượt xa URL được tải đều hỗ trợ vượt qua chính sách Chức năng tối thiểu.

Đã có PWA? Hãy dùng Capacitor

Nếu không muốn tự viết mã Android, Capacitor bọc dự án web hiện có trong lớp vỏ WebView native, đồng thời cung cấp sẵn cách xử lý nút Quay lại, màn hình khởi động native và hệ thống plugin cho thông báo đẩy, camera, hệ thống tệp. Đây là con đường trực tiếp nhất từ PWA sang WebView và tránh hoàn toàn hành vi Custom Tabs của TWA. Bạn có khả năng quy hoạt động trong tiến trình của WebView lẫn tính năng native dễ thêm trong một bước.

Quy tắc quan trọng nhất

Hãy phát hành app bạn đã thử nghiệm. Xây app WebView, chạy nó qua thử nghiệm khép kín và phát hành đúng bản dựng đó lên kênh công khai. Đừng thử một kiến trúc rồi đổi sang app khác. Gửi bản dựng chỉ để vượt qua bước xem xét rồi thay thế trên kênh phát hành công khai vi phạm chính sách hành vi lừa dối của Google và có thể khiến app hoặc tài khoản bị đình chỉ. Dùng WebView lâu dài tránh hoàn toàn rủi ro này vì app được thử nghiệm cũng chính là app được phát hành.

Cách chuyển đổi mà không đặt lại đồng hồ 14 ngày

Nếu đã đi được một phần chu kỳ thử nghiệm, bạn không phải bắt đầu lại. Bộ đếm 14 ngày vẫn tiếp tục qua bản cập nhật app, miễn là bạn dùng cùng kênh thử nghiệm và giữ nguyên tên package. Đây là cách di chuyển an toàn:

1
Xây app WebView với cùng tên package

Giữ chính xác applicationId của TWA hiện tại. Tên package khác sẽ tạo trang thông tin app hoàn toàn mới và buộc bạn chạy chu kỳ 14 ngày mới.

Mẹo: tăng versionCode cao hơn bản dựng TWA ít nhất 1 đơn vị, nếu không Play Console sẽ từ chối tệp tải lên vì trùng phiên bản.
2
Làm cho app hoạt động như một app độc lập thực sự

Bảo đảm tải đáng tin cậy, xử lý đúng nút Quay lại của Android, có trạng thái ngoại tuyến và lỗi hợp lý, không để màn hình trống. Những yếu tố này cũng giúp app tránh bị đánh giá là lớp bọc sơ sài ở phần tiếp theo.

3
Tải lên dưới dạng bản cập nhật cho kênh thử nghiệm khép kín hiện có

Mở kênh thử nghiệm khép kín, tạo bản phát hành mới và tải AAB WebView lên. Không tạo kênh mới hoặc app mới.

4
Để tester cập nhật và tiếp tục

Tester đã chọn tham gia chỉ cần cập nhật lên phiên bản WebView rồi tiếp tục. Đồng hồ vẫn chạy miễn là có ít nhất 12 tester duy trì hoạt động.

Đồng hồ vẫn tiếp tục

Gửi bản cập nhật lên kênh thử nghiệm khép kín không đặt lại bộ đếm 14 ngày. Đồng hồ vẫn chạy và Google coi việc chủ động lặp lại, cải tiến trong quá trình thử nghiệm là một phần bình thường. Vì vậy, bạn có thể chuyển từ TWA sang WebView giữa chu kỳ mà không mất những ngày đã tích lũy.

App WebView có vẫn bị xem là "lớp bọc sơ sài" không?

Đây là cái bẫy với nhà phát triển cho rằng WebView là giải pháp thần kỳ. Chuyển từ TWA sang WebView xử lý vấn đề tín hiệu tương tác, nhưng không miễn cho bạn khỏi chính sách Nội dung rác và Chức năng tối thiểu của Google. WebView chỉ đặt trang chủ trong một khung vẫn có thể bị từ chối vì là app bọc sơ sài, giống như TWA trần.

Hãy coi đây là hai cánh cửa riêng biệt. Dịch vụ thử nghiệm hoặc bản dựng WebView có thể giúp bạn qua một cửa, nhưng không thể tự động xử lý cửa còn lại.

Cửa 1

Yêu cầu thử nghiệm khép kín

Kiểm tra số lượng và thời gian: ít nhất 12 tester đã chọn tham gia và hoạt động liên tục 14 ngày. WebView giúp tương tác được đọc đáng tin cậy, còn PrimeTestLab cung cấp tester.

Số lượng + thời gian
Cửa 2

Chức năng tối thiểu, app bọc sơ sài

Quyết định về chính sách và chất lượng: app có giá trị thực hay chỉ là trang web được đóng khung? Chỉ app đủ thực chất mới qua được cửa này. Không dịch vụ hoặc thay đổi kiến trúc nào làm thay bạn.

Chính sách + chất lượng

Vì vậy, mục tiêu không chỉ là "WebView thay cho TWA" mà là một app WebView có đủ giá trị và hành vi native để đứng độc lập. Trên thực tế, điều đó có nghĩa là:

A
Xử lý đúng nút Quay lại của Android

Nút Quay lại phải duyệt lịch sử web rồi thoát nhẹ nhàng, không đưa tester đến màn hình trống hoặc đóng app bất ngờ.

B
Quản lý trạng thái ngoại tuyến và lỗi

Hiện màn hình "bạn đang ngoại tuyến" thực sự cùng đường dẫn thử lại. Trang trắng khi mất kết nối là cách nhanh nhất khiến app trông như lớp bọc sơ sài.

C
Thêm giá trị native thực

Thông báo đẩy, trải nghiệm màn hình chính, tích hợp thiết bị hoặc bộ nhớ đệm ngoại tuyến. Hãy thêm bất kỳ điều gì giúp app có ý nghĩa vượt xa URL được tải.

Quy tắc không được đánh tráo app

Không thử nghiệm một app thực chất rồi đổi sang app khác về bản chất hoặc sơ sài hơn trên kênh phát hành công khai. Đây chính là hành vi lừa dối khiến Google đình chỉ tài khoản.

Hãy chọn kiến trúc WebView, xây app đủ thực chất, thử nghiệm bản dựng đó rồi phát hành đúng bản dựng ấy. Giữ nguyên hướng đi qua cả thử nghiệm và phát hành công khai.

Muốn có checklist sâu hơn về các yếu tố gây từ chối vì chất lượng? Hướng dẫn vì sao thử nghiệm khép kín bị từ chối phân tích những lỗi chính sách và xem xét phổ biến ngoài vấn đề tương tác.

Không chắc app có phải TWA? Chúng tôi kiểm tra ngay khi bạn đặt hàng

Bạn không cần tự chạy lệnh adb hoặc đào sâu vào APK. PrimeTestLab có thể xác nhận app của bạn có phải TWA hay không. Ngay khi bạn đặt dịch vụ thử nghiệm, đội ngũ của chúng tôi kiểm tra bản dựng, xác định đó có phải TWA hoặc app bọc PWA hay không và, nếu đúng, cho bạn biết chính xác điều cần sửa trước khi đồng hồ 14 ngày bị lãng phí cho kiến trúc dễ bị gắn cờ vì tương tác.

200+ App TWA đã kiểm tra

Chỉ trong vài tháng gần đây, chúng tôi đã kiểm tra và tư vấn cho hơn 200 app TWA. Sau khi nhận khuyến nghị và áp dụng bản sửa, các app đó có thể tiếp tục chu kỳ thử nghiệm một cách đáng tin cậy. Khi phát hiện TWA, bạn nhận kế hoạch dựng lại rõ ràng và có thể hành động, không phải một lời khuyên mơ hồ kiểu "hãy thử lại".

Điều gì xảy ra ngay khi bạn đặt hàng?

1
Bạn đặt hàng và chia sẻ app

Ngay khi kênh thử nghiệm khép kín hoặc bản dựng được chia sẻ, app sẽ vào hàng đợi kiểm tra của chúng tôi. Bạn không cần gửi thêm yêu cầu.

2
Chúng tôi kiểm tra ngay các dấu hiệu TWA trong bản dựng

Đội ngũ tìm những dấu vân tay đặc trưng của TWA: DelegationService, trình khởi chạy androidbrowserhelper, hành vi Custom Tabs và việc thiếu mã native. Đây là những dấu hiệu đã nêu trong phần nhận biết phía trên.

3
Nếu là TWA, chúng tôi gắn cờ và chỉ rõ cách sửa

Bạn nhận khuyến nghị cụ thể, thường là bản dựng WebView trong hướng dẫn này, để sửa kiến trúc trước khi tiêu tốn một chu kỳ 14 ngày cho bản dựng dễ thất bại ở bước xem xét tương tác.

4
Khi bản dựng đã vững, tester chạy đủ chu kỳ 14 ngày

Với kiến trúc phù hợp và hơn 12 tester đã xác minh hoạt động liên tục 14 ngày, cả yêu cầu tester lẫn cổng tương tác đều được xử lý. Đây là cách chúng tôi duy trì tỷ lệ thành công 99,9%.

Vì sao bước này tiết kiệm nhiều tuần

Phần lớn nhà phát triển chỉ biết TWA là vấn đề sau khi một chu kỳ 14 ngày thất bại, rồi phải bắt đầu lại. Vì chúng tôi phát hiện từ ngày đầu tiên, bạn có thể sửa kiến trúc một lần, thử nghiệm một lần và phát hành một lần. Đó là khác biệt giữa một chu kỳ rõ ràng và cả tháng liên tục bị từ chối.

PrimeTestLab hỗ trợ thế nào với nửa còn lại của vấn đề?

Kiến trúc là một nửa vấn đề. Nửa còn lại, cũng là phần cản trở nhiều nhà phát triển độc lập nhất, là tìm 12 tester thực sự chọn tham gia và duy trì tham gia trong 14 ngày liên tục. Đó là phần PrimeTestLab xử lý.

Chúng tôi cung cấp tester đã xác minh và chọn tham gia trên thiết bị Android thật. Họ giữ thử nghiệm khép kín hoạt động trong toàn bộ thời gian yêu cầu để một tester rời đi không làm đứt chuỗi 14 ngày. Bạn chia sẻ đường liên kết chọn tham gia; chúng tôi xử lý lời mời, xác minh chọn tham gia, theo dõi tương tác hằng ngày và duy trì đủ 14 ngày. Đã hỗ trợ 7.400+ app, với tỷ lệ thành công lần đầu 99,9%.

Từ $19.99 12 tester, cộng 5% phí dịch vụ
4-6 giờ Thường bắt đầu thử nghiệm
7.400+ app Tỷ lệ thành công 99,9%
Nói thẳng về phạm vi hỗ trợ

Dịch vụ thử nghiệm đáp ứng yêu cầu về tester. Dịch vụ không chọn kiến trúc app hoặc vượt qua bước xem xét app bọc sơ sài thay bạn. Sự kết hợp phù hợp là một bản dựng WebView đủ thực chất cùng 12 tester thật trong đủ 14 ngày, để cả kiến trúc lẫn tester đều không trở thành lý do bị từ chối.

Các gói hiện tại

Starter 12 tester $19.99
  • Đáp ứng mức tối thiểu của Google
  • Thiết bị Android thật
  • Đủ 14 ngày thử nghiệm
Xem gói
Giá trị tốt nhất Enterprise 25 tester $27.99
  • Biên độ an toàn lớn nhất
  • Độ đa dạng thiết bị tốt nhất
  • Tỷ lệ thành công lần đầu mạnh nhất
Xem gói
Professional 20 tester $29.99
  • Có sẵn biên độ an toàn
  • Độ đa dạng thiết bị tốt hơn
  • Mức tin cậy cao hơn khi đăng ký
Xem gói

Cộng 5% phí dịch vụ · Thử nghiệm lại miễn phí hoặc hoàn tiền toàn bộ

Câu hỏi thường gặp

Vì sao app TWA của tôi liên tục bị từ chối trong thử nghiệm khép kín?

Theo kinh nghiệm của chúng tôi với 7.400+ app, các bản dựng TWA và app bọc PWA gặp thông báo từ chối "testers were not engaged" thường xuyên hơn nhiều so với app native tiêu chuẩn, ngay cả khi tester hoạt động hằng ngày. Nguyên nhân có thể là tín hiệu tương tác mà Google đọc trong quá trình xem xét quyền truy cập vào kênh phát hành công khai yếu hơn khi nội dung web chạy trên bề mặt Chrome Custom Tabs thay vì trong tiến trình của app. Google không công khai chính xác các tín hiệu này, vì vậy đây là quan sát của chúng tôi, không phải chính sách chính thức. Trong tài liệu chính thức của Google, tester được gọi là người thử nghiệm.

Tôi nên chuyển từ TWA sang WebView hay chỉ cố sửa TWA?

Theo kinh nghiệm của chúng tôi, dựng lại thành app WebView tiêu chuẩn đáng tin cậy hơn nhiều so với cố ép TWA tạo tín hiệu tương tác tốt hơn. WebView tải trang web bên trong chính app của bạn, nên hoạt động được ghi nhận cho package theo cách quá trình xem xét mong đợi. Khi đã chuyển sang WebView, hãy giữ kiến trúc đó và phát hành đúng bản dựng đã thử nghiệm thay vì quay lại TWA trên kênh phát hành công khai.

App WebView có tự động vượt qua thử nghiệm khép kín không?

Không. Chuyển sang WebView loại bỏ vấn đề tín hiệu tương tác mà chúng tôi thấy ở bản dựng TWA, nhưng không miễn cho bạn khỏi chính sách Nội dung rác và Chức năng tối thiểu của Google. WebView chỉ đóng khung trang web vẫn có thể bị từ chối vì là app bọc sơ sài, nên hãy xây một app thực sự có giá trị native, xử lý đúng nút Quay lại cùng trạng thái ngoại tuyến và lỗi phù hợp.

Cập nhật app trong thử nghiệm khép kín có đặt lại đồng hồ 14 ngày không?

Không. Tải bản cập nhật lên kênh thử nghiệm khép kín không đặt lại bộ đếm 14 ngày. Đồng hồ vẫn chạy, nên bạn có thể thay bản dựng TWA bằng WebView giữa chu kỳ mà không phải bắt đầu lại, miễn là giữ nguyên tên package. Google coi việc chủ động lặp lại và cải tiến trong quá trình thử nghiệm là bình thường.

Vì sao TWA của tôi hiển thị ít người dùng hoạt động trong Play Console?

Một số nhà phát triển báo cáo số người dùng hoạt động thấp ở bản dựng TWA. Google không ghi rõ nguyên nhân, nhưng hiện tượng này có vẻ liên quan đến việc nội dung web chạy trên bề mặt Chrome Custom Tabs thay vì bên trong app. Bản dựng WebView thường ghi nhận hoạt động đáng tin cậy hơn vì màn hình chạy trong tiến trình của chính app.

Thử nghiệm TWA rồi phát hành app WebView thay thế có an toàn không?

Cách an toàn là thử nghiệm và phát hành cùng một bản dựng. Thay vì thử TWA rồi đổi sang app khác, hãy dựng lại dưới dạng WebView trước, chạy bản dựng WebView đó qua thử nghiệm khép kín và phát hành chính bản dựng ấy lên kênh công khai. Gửi một app để vượt qua bước xem xét rồi thay bằng app khác về bản chất có nguy cơ bị đình chỉ theo chính sách hành vi lừa dối của Google.

App bọc TWA hoặc PWA có thể được phê duyệt trên Google Play không?

Có. App bọc có thể được phê duyệt khi đáp ứng chính sách Chức năng tối thiểu và hoàn thành yêu cầu thử nghiệm khép kín. Tuy nhiên, với tài khoản cá nhân phải hoàn thành thử nghiệm khép kín 14 ngày cùng 12 tester, chúng tôi thường thấy bản dựng WebView vượt qua bước xem xét về tương tác đáng tin cậy hơn TWA. Vì vậy, chúng tôi khuyên dùng WebView trong tình huống này.

TWA có dùng thành phần WebView của Android không?

Không. Đây là hiểu lầm phổ biến nhất. TWA không dùng WebView của Android. Nó dùng công cụ phía sau Custom Tabs, chuyển URL cho trình duyệt đầy đủ đã cài trên thiết bị, thường là Chrome, để hiển thị toàn màn hình mà không có giao diện trình duyệt. Vì vậy, TWA có cùng công cụ kết xuất, công cụ JavaScript và vùng cách ly bảo mật như Chrome, đồng thời dùng chung cookie và bộ nhớ. Ngược lại, WebView của Android là trình duyệt có thể nhúng do app kiểm soát và chạy trong tiến trình của app. Đó là lý do dựng lại bằng WebView sửa được cách quy hoạt động tương tác.

Vì sao TWA của tôi hiển thị thanh địa chỉ trình duyệt ở phía trên?

Điều đó có nghĩa là bước xác minh tin cậy Digital Asset Links đã thất bại. Chrome chỉ ẩn thanh địa chỉ nếu trang web cung cấp tệp /.well-known/assetlinks.json hợp lệ, có tên package của app và vân tay SHA-256 của chứng chỉ ký. Nếu tệp bị thiếu, trả về 404 hoặc vân tay không khớp với khóa mà Google Play dùng trong Play App Signing, app vẫn mở nhưng Chrome sẽ hiện thanh địa chỉ. Sửa assetlinks.json khôi phục chế độ toàn màn hình, nhưng không sửa lỗi bị từ chối vì tương tác trong thử nghiệm khép kín. Lỗi đó cần được xử lý bằng cách dựng lại với WebView.

Làm sao biết một app có phải TWA hay không?

Hãy kiểm tra bản dựng. Dấu hiệu đáng tin cậy nhất là DelegationService khai báo hành động TRUSTED_WEB_ACTIVITY_SERVICE, vì chỉ TWA khai báo hành động này. Bạn cũng thường thấy LauncherActivity từ com.google.androidbrowserhelper và không có thư viện native của Flutter hoặc React Native. Trên thiết bị đã kết nối, chạy adb shell dumpsys package <package> | grep -i DelegationService để tìm dịch vụ, rồi chạy adb shell pm get-app-links <package> để xem xác minh Digital Asset Links thành công ("verified") hay thất bại ("1024").

PrimeTestLab có thể xác định app của tôi có phải TWA không?

Có. Ngay khi bạn đặt dịch vụ thử nghiệm, đội ngũ của chúng tôi kiểm tra bản dựng, xác nhận đó có phải TWA hoặc app bọc PWA hay không và, nếu đúng, gửi khuyến nghị sửa cụ thể trước khi chu kỳ 14 ngày bị lãng phí. Chúng tôi đã kiểm tra hơn 200 app TWA trong vài tháng gần đây. Sau khi nhận khuyến nghị và áp dụng bản sửa, các app đó có thể tiếp tục chu kỳ thử nghiệm một cách đáng tin cậy. Bạn không cần tự chạy adb hoặc kiểm tra APK.

PrimeTestLab có thể cung cấp tester cho thử nghiệm khép kín nhanh đến mức nào?

Khi kênh thử nghiệm khép kín đã hoạt động và truy cập được, tester của PrimeTestLab thường bắt đầu chọn tham gia trong 4-6 giờ. Giá từ $19.99 cho 12 tester, cộng 5% phí dịch vụ. Tỷ lệ thành công là 99,9% trên 7.400+ app đã hỗ trợ.

Kết luận

Tóm tắt

Nếu bản dựng TWA liên tục thất bại trong thử nghiệm khép kín Google Play vì tương tác, cách sửa gọn nhất là dựng lại thành app WebView tiêu chuẩn và phát hành chính bản dựng đó lên kênh công khai, không quay lại TWA sau đó. Giữ nguyên tên package để bản cập nhật không đặt lại đồng hồ 14 ngày, làm app đủ thực chất để vượt qua bước xem xét Chức năng tối thiểu, rồi để PrimeTestLab xử lý yêu cầu 12 tester trong 14 ngày để thử nghiệm không trở thành lý do bị từ chối. WebView xử lý cổng tương tác, app thực xử lý cổng lớp bọc sơ sài, còn PrimeTestLab cung cấp tester. Xem các gói dịch vụ →

Kefayatullah Khadem, Kỹ sư phần mềm · Chuyên gia phát hành Google Play

Viết bởi

Kefayatullah Khadem

Kỹ sư phần mềm · Chuyên gia phát hành Google Play

Kefayatullah Khadem viết các hướng dẫn của PrimeTestLab dựa trên tài liệu chính thức của Google và kinh nghiệm hỗ trợ app Android hoàn thành thử nghiệm khép kín, xử lý nguyên nhân bị từ chối và đăng ký quyền truy cập vào kênh phát hành công khai.

7.400+ App đã hỗ trợ
99,9% Tỷ lệ thành công
120+ Quốc gia
4,9/5 Đánh giá

Tỷ lệ thành công 99,9%

Đã dựng lại bằng WebView? Hãy xử lý đủ thử nghiệm 14 ngày.

Tester thật. Thiết bị thật. Đủ 14 ngày. Không có rủi ro đặt lại.

Từ $19.99 (cộng 5% phí dịch vụ)

Thường bắt đầu trong 4-6 giờ · Hỗ trợ đủ 14 ngày · Thử nghiệm lại miễn phí hoặc hoàn tiền toàn bộ

Tham gia cùng 7.400+ nhà phát triển đã ra mắt app với PrimeTestLab

Nhận 12 tester · $19.99 + 5% phí dịch vụ WhatsApp