可信 Web 活动是一种新方法,可让您使用基于自定义标签页的协议将 Web 应用内容(例如 PWA)与 Android 应用集成。
Trusted Web Activity 需要使用数字资产关联验证要打开的来源,才能全屏显示内容。
当用户离开经过验证的来源时,系统会显示自定义标签页界面。“自定义”标签页中的网址栏会告知用户,他们目前正在浏览应用之外的网域,同时还会向用户提供一个 X 按钮,以便他们快速返回到经过验证的来源。
不过,Web 应用也常常会创建跨多个源的体验。例如,某个购物应用的正文验位于 www.example.com,而结账流程则托管在 checkout.example.com。
在这种情况下,显示自定义标签页是不合适的,这不仅是因为用户位于同一应用中,还因为顶部栏可能会让用户认为自己已退出应用并放弃结账。
借助可信 Web Activity,开发者可以验证多个来源,并且用户在浏览这些来源时会保持全屏状态。与主网域一样,开发者必须能够控制每个经过验证的来源。
为多个源设置验证
与主来源一样,验证是通过 Digital Asset Links 完成的,并且每个要验证的网域都需要有自己的 assetlinks.json 文件。
向每个来源添加 assetlinks 文件
在我们的示例中,如果有 www.example.com 和 checkout.example.com,则会出现以下情况:
https://www.example.com/.well-known/assetlinks.json
https://checkout.example.com/.well-known/assetlinks.json
由于每个网域都将连接到同一 Android 应用,因此 assetlinks.json
文件看起来完全相同。
假设 Android 应用的软件包名称为 com.example.twa
,则这两个 assetlink.json
文件都将包含类似以下内容:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": ["..."]}
}]
向 Android 应用添加多个来源
在 Android 应用中,需要更新 asset_statements
声明,使其包含需要验证的所有来源:
<string name="asset_statements">
[{
\"relation\": [\"delegate_permission/common.handle_all_urls\"],
\"target\": {
\"namespace\": \"web\",
\"site\": \"https://www.example.com\"
}
}],
[{
\"relation\": [\"delegate_permission/common.handle_all_urls\"],
\"target\": {
\"namespace\": \"web\",
\"site\": \"https://checkout.example.com\"
}
}],
</string>
向 LauncherActivity 添加额外的来源
使用默认的 LauncherActivity
android-browser-helper
支持库中的 LauncherActivity
提供了一种通过配置 Android 项目来添加多个要验证的来源的方法。
首先,将 string-array
元素添加到 res/values/strings.xml
文件中。每个要验证的额外网址都将位于 item
子元素内:
...
<string-array name="additional_trusted_origins">
<item>https://www.google.com</item>
</string-array>
...
接下来,在引用 LauncherActivity
的现有 activity 元素(位于 AndroidManifest.xml
内)中添加一个新的 meta-data
标记:
...
<activity android:name="com.google.androidbrowserhelper.trusted.LauncherActivity"
android:label="@string/app_name">
<meta-data
android:name="android.support.customtabs.trusted.ADDITIONAL_TRUSTED_ORIGINS"
android:resource="@array/additional_trusted_origins" />
...
</activity>
...
使用自定义 LauncherActivity
使用自定义代码启动 Trusted Web Activity 时,可以在构建 intent 以启动 Trusted Web Activity 时调用 setAdditionalTrustedOrigins
,以添加额外的来源:
public void launcherWithMultipleOrigins(View view) {
List<String> origins = Arrays.asList(
"https://checkout.example.com/"
);
TrustedWebActivityIntentBuilder builder = new TrustedWebActivityIntentBuilder(LAUNCH_URI)
.setAdditionalTrustedOrigins(origins);
new TwaLauncher(this).launch(builder, null, null);
}
总结
完成这些步骤后,Trusted Web Activity 现在可以支持多个来源。android-browser-helper 提供了一个适用于多源 Trusted Web Activity 的示例应用。请务必查看。
问题排查
设置 Digital Asset Links 需要完成一些步骤。如果应用仍在顶部显示自定义标签页栏,则可能存在配置问题。
Trusted Web Activity 快速入门指南中有一个非常实用的问题排查部分,介绍了如何调试数字资产关联问题。
此外,还有出色的 Peter 的 Asset Link 工具,可帮助您调试设备上安装的应用的 Digital Asset Links。