繁体   English   中英

PWA 与 TWA:如何强制使用 Chrome 而不是默认浏览器

[英]PWA with TWA: How to force Chrome instead of default browser

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

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

官方文档说明如下:

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

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

要在 Chrome 中打开 URL,我使用来自androidx.browser.browser:1.0.0 Chrome 自定义标签首先我检查是否支持 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 重写

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

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

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

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

关于以下内容:

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

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

  1. 安装的 Chrome 版本不是最新的,不支持可信网络活动,所以它回退到 (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 浏览器 MI 浏览器未声明支持 Trusted Web Activity,Chrome 已按预期打开。 我倾向于与上述(1)相关的问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM