具有TWA的PWA:如何强制使用Chrome而非默认浏览器

时间:2019-04-05 08:17:31

标签: android progressive-web-apps

我已经按照此处的官方Google指南-https://developers.google.com/web/updates/2019/02/using-twa

用TWA构建了PWA,并生成了APK。

正在发生的事情是,当将除Chrome以外的其他浏览器设置为默认浏览器时,其行为是不可预测的。例如:在默认使用MI Browser的小米手机上,我的应用程序就像快捷方式一样工作,并且页面仅加载到浏览器的一个标签中。这部手机已安装了Chrome,但我的应用仍然使用默认浏览器来呈现我的PWA。

官方文档规定以下内容:

  

今天,如果用户的Chrome版本不支持“受信任的Web”活动,则Chrome将使用“自定义标签”退回到简单的工具栏。其他浏览器也有可能实现受信任的Web活动使用的相同协议。 当主机应用对打开哪个浏览器有最终决定 时,我们建议您使用与“自定义标签”相同的政策:使用用户的默认浏览器,只要该浏览器提供所需的功能。

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

2 个答案:

答案 0 :(得分:3)

要在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重写

答案 1 :(得分:3)

不建议强制将Chrome作为浏览器来处理“受信任的网络活动” ,因为number of browsers that support Trusted Web Activity is growing和开发人员应尝试尽可能尊重用户的浏览器选择< / strong>。

implementation中选择浏览器的android-browser-helper将:

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

或者,开发人员可以选择用WebView fallback implementation替换数字2和3,即使在受支持的功能集上存在取舍。

关于以下内容:

在默认使用MI Browser的小米手机上,我的应用程序就像快捷方式一样工作,并且页面仅加载在浏览器的一个标签中。这部手机已安装了Chrome,但是我的应用仍然使用默认浏览器来呈现我的PWA。

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

  1. 已安装的Chrome版本不是最新版本,并且不支持“受信任的网络活动”,因此回落到(2)
  2. MI浏览器声明支持受信任的Web活动,但实际上并非如此。这似乎是the case on Kindle Fire devices
  3. 选择浏览器的逻辑上可能存在错误。

对于1,解决方案正在更新Chrome,一切正常。否则,请启用WebView后备。

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

提交功能请求

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

更新:我为MI Browser安装了一个通过Bubblewrap生成的项目。 MI浏览器未声明对“受信任的网络活动”的支持,并且按预期打开了Chrome。我倾向于与上述(1)相关的问题。

最后,可以为信任的网络活动实现您自己的提供程序选择器,您可以在其中维护“禁止列表”,而在Android浏览器帮助器中未实现自动方式。有关详细信息,请参见this sample