11

我已经使用 TWA 构建了一个 PWA,并按照此处的官方 Google 指南生成了 APK - https://developers.google.com/web/updates/2019/02/using-twa

发生的情况是,当 Chrome 以外的其他浏览器设置为默认浏览器时,行为是不可预测的。例如:在默认 MI 浏览器的小米手机上,我的应用程序仅作为快捷方式工作,页面仅加载到浏览器的一个选项卡中。这款手机安装了 Chrome,但我的应用仍然使用默认浏览器来呈现我的 PWA。

官方文档声明如下:

今天,如果用户的 Chrome 版本不支持受信任的 Web 活动,Chrome 将回退到使用自定义选项卡的简单工具栏。其他浏览器也可以实现受信任的 Web 活动使用的相同协议。虽然主机应用程序对打开哪个浏览器有最终决定权,但我们建议使用与自定义选项卡相同的策略:使用用户的默认浏览器,只要该浏览器提供所需的功能。

虽然指南有这一段,但我找不到任何关于如何为我的 PWA 设置首选浏览器的文档

4

2 回答 2

4

要在 Chrome 中打开 URL,我使用的是 Chrome 自定义选项卡, androidx.browser.browser:1.0.0 首先我检查是否支持 Chrome 自定义选项卡

const val SERVICE_ACTION = "android.support.customtabs.action.CustomTabsService"
const val CHROME_PACKAGE = "com.android.chrome"

private fun Context.isChromeCustomTabsSupported(): Boolean {
    val serviceIntent = Intent(SERVICE_ACTION)
    serviceIntent.setPackage(CHROME_PACKAGE)
    val resolveInfos = packageManager.queryIntentServices(serviceIntent, 0)
    return !(resolveInfos == null || resolveInfos.isEmpty())
}

然后在自定义选项卡中打开 URL

if (isChromeCustomTabsSupported()) {
        CustomTabsIntent.Builder().apply {
            setToolbarColor(ContextCompat.getColor(this@MainActivity, R.color.colorPrimary))
            setSecondaryToolbarColor(ContextCompat.getColor(this@MainActivity, R.color.colorPrimaryDark))
        }.build().launchUrl(this@MainActivity, Uri.parse(URL))
    }

如果答案Kotlin不正确,我将用 Java 重写

更新:我的回答仅在您想在 Android 上使用 Chrome 启动 URL 时帮助您进行原生 Android 开发。

于 2019-04-05T08:23:14.160 回答
4

不建议强制 Chrome 作为浏览器来处理 Trusted Web Activity,因为支持 Trusted Web Activity 的浏览器数量正在增长,开发人员应尽量尊重用户的浏览器选择

在android-browser-helper中选择浏览器的实现将:

  1. 寻找支持 TWA 的浏览器,如果找到,请选择它。
  2. 否则,寻找支持自定义选项卡的浏览器,如果找到,选择它。
  3. 否则启动到默认浏览器。

或者,开发人员可以选择用WebView 回退实现替换数字 2 和 3 ,即使在支持的功能集上有折衷。

关于以下内容:

在默认 MI 浏览器的小米手机上,我的应用程序仅作为快捷方式工作,页面仅加载到浏览器的一个选项卡中。这款手机安装了 Chrome,但我的应用仍然使用默认浏览器来呈现我的 PWA。

这里可能会发生一些事情:

  1. 安装的 Chrome 版本不是最新的,不支持受信任的 Web 活动,所以它回退到 (2)
  2. MI 浏览器声明支持受信任的 Web 活动,但实际上并非如此。Kindle Fire 设备上似乎就是这种情况。
  3. 选择浏览器的逻辑可能存在错误。

对于 1,解决方案是更新 Chrome,一切都应该工作。否则,启用 WebView 回退。

对于 2,听起来需要一个“禁止列表”来避免使用已知声明支持但不支持的浏览器。我建议在https://github.com/GoogleChrome/android-browser-helper/提交功能请求

对于 3,在https://github.com/GoogleChrome/android-browser-helper/提交错误

更新:我使用通过Bubblewrap生成的项目安装了MI Browser。MI 浏览器未声明支持受信任的 Web 活动,Chrome 已按预期打开。我倾向于与上述(1)有关的问题。

最后,可以为 Trusted Web Activity 实现您自己的提供程序选择器,您可以在其中维护“禁止列表”,而 Android Browser Helper 中未实现自动化方式。有关详细信息,请参阅此示例

于 2020-08-06T10:12:08.433 回答