簡體   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