多源 Trusted Web Activity

可信 Web 活动是一种新方法,可让您使用基于自定义标签页的协议将 Web 应用内容(例如 PWA)与 Android 应用集成。

ff-origin 导航

Trusted Web Activity 需要使用 Digital Asset Links 来验证要打开的源站,才能全屏显示内容。

当用户离开经过验证的来源时,系统会显示自定义标签页界面。“自定义”标签页中的网址栏会告知用户,他们目前正在浏览应用之外的网域,同时还会向用户提供一个 X 按钮,以便他们快速返回到经过验证的来源。

不过,Web 应用也常常会创建跨多个源的体验。例如,某个购物应用的正文验位于 www.example.com,而结账流程则托管在 checkout.example.com

在这种情况下,显示自定义标签页是不合适的,这不仅是因为用户位于同一应用中,还因为顶部栏可能会让用户认为他们已退出应用并放弃结账。

借助 Trusted Web Activity,开发者可以验证多个源站,并且用户在跨这些源站导航时将保持全屏状态。与主网域一样,开发者必须能够控制每个经过验证的来源。

为多个源站设置验证

与主要来源一样,验证是通过 Digital Asset Links 完成的,并且每个要验证的网域都需要有自己的 assetlinks.json 文件。

在我们的示例中,如果有 www.example.comcheckout.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。