TWA基于PWA,需满足manifest.json的display为standalone、HTTPS部署及ServiceWorker激活。Android端使用TrustedWebActivityIntentBuilder构建Intent,色值必须不透明。域名需部署匹配签名的assetlinks.json,否则静默降级。调试时需关注TrustedWebActi
TWA 这个事儿,很多团队以为只要换个 Intent 就能跑起来,实际上远没那么简单。Android 侧的配置和签名必须严格满足 Google 的校验规则——否则 TrustedWebActivityIntentBuilder 会静默失败,或者干脆降级成 Custom Tab,用户体验完全走样。
先说几个核心判断:Web 端如果没准备好,Android 端再怎么折腾也是白搭。所以别急着写 Java 代码,先把 PWA 的基础条件打扎实。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
TWA 不是“换个 Intent 就行”那么简单,它依赖 Web 端的可信声明。必须同时满足以下条件:
manifest.json 中 "display" 必须设为 "standalone" 或 "minimal-ui"——"browser" 模式直接不通过 标签里必须包含 theme-color,而且这个颜色值要与 Android 侧的 setToolbarColor() 保持一致。颜色不匹配?启动时直接闪退,毫不留情service-worker.js 必须已注册并激活,而且 navigator.serviceWorker.ready 必须能正常 resolve。TWA 启动时会检查 Service Worker 是否可用,如果没准备好,后续流程直接中断TrustedWebActivityIntentBuilder 构建 Intent别想着用 WebView 或者普通的 CustomTabsIntent 来替代——TWA 必须走专用 builder。关键细节如下:
manifest.json 中的 start_url 同源,而且路径必须能被 Service Worker 拦截。举个例子:如果 start_url 是 "/",你就不能传 https://a.com/login,路径不匹配会导致启动失败setNavigationBarColor() 和 setToolbarColor() 传入的色值必须是不透明的 0xFF000000 格式,带 alpha 通道的颜色值会直接引发崩溃setSplashScreenStrategy() 并传入实现了 SplashScreenStrategy 的对象——光在 AndroidManifest 里配置 android:windowBackground 是不够的TrustedWebActivityServiceConnectionPool.isAvailable(context)。如果返回 false,说明设备没装 Chrome 或者版本太低,硬启动只会失败来看一个典型的实现片段:
TrustedWebActivityIntentBuilder twaBuilder = new TrustedWebActivityIntentBuilder("https://your-pwa.com/")
.setToolbarColor(0xFF2196F3)
.setNavigationBarColor(0xFF000000)
.setSplashScreenStrategy(new SplashScreenStrategy() { /* 实现 onShow / onDismiss */ });
mTwaLauncher.launch(twaBuilder, mSplashScreenStrategy, () -> {/* 成功回调 */});
这一步是真正的“坑王”。Google Play 安装包签名之后,必须在域名根目录部署 .well-known/assetlinks.json,而且文件内容必须与 APK 签名证书的 SHA256 指纹、包名、TWA Activity 名完全匹配。以下是常见的问题点:
assetlinks.json 必须能通过 https://your-pwa.com/.well-known/assetlinks.json 直接 GET 访问,返回 Content-Type: application/json,不能有任何 301/302 重定向keytool -list -v -keystore your-release-key.jks -alias alias_name -storepass password -keypass password.MainActivity,但如果你改过 android:name,assetlinks.json 里的 intent_filter 中 name 字段必须同步更新adb shell pm verify-link --re-verify your.package.name,再执行 adb shell pm get-links your.package.name 查看状态TrustedWebActivityService 连接状态TWA 启动失败有个很坑的特点——往往不抛异常,而是静默 fallback 到 Custom Tab。真正的线索藏在服务连接过程中:
TrustedWebActivityServiceConnectionPool 已初始化,而且 bindService() 成功——否则 mTwaLauncher.launch() 会直接回调失败TrustedWebActivityCallback 的 onConnectionFailed(),里面会携带具体错误码,比如 ERROR_BROWSER_NOT_FOUND 或 ERROR_ASSET_LINKS_VERIFICATION_FAILEDchrome://inspect,选中对应 TWA 进程即可查看。但注意:只有成功进入 TWA 页面后才能看到这个进程;如果一直卡在白屏,大概率是 Asset Links 验证或 Service Worker 加载出了问题总而言之,Asset Links 验证不通过、Service Worker 未激活、HTTPS 子资源混用 HTTP——这三处任一出问题,TWA 就会退化,而日志里可能只有一行 "Fallback to Custom Tabs"。排查方向对了,才能少走弯路。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述