PWA с TWA: как заставить Chrome вместо браузера по умолчанию - PullRequest
6 голосов
/ 05 апреля 2019

Я создал PWA с TWA и сгенерировал APK, следуя официальному руководству Google здесь - https://developers.google.com/web/updates/2019/02/using-twa

Что происходит, когда другой браузер, кроме Chrome, установлен по умолчанию, поведение непредсказуемо. Например: на телефоне Xiaomi, где по умолчанию используется MI Browser, мое приложение работает как ярлык, и страница просто загружается на одной из вкладок браузера. На этом телефоне был установлен Chrome, но мое приложение все еще использовало браузер по умолчанию для рендеринга моего PWA.

Официальная документация гласит следующее:

Сегодня, если пользовательская версия Chrome не поддерживает операции Trusted Web, Chrome переключится на простую панель инструментов с помощью настраиваемой вкладки. Для других браузеров также возможно реализовать тот же протокол, который используют операции Trusted Web. Хотя у хост-приложения есть последнее сообщение о том, какой браузер открывается, мы рекомендуем ту же политику, что и для пользовательских вкладок: используйте браузер пользователя по умолчанию, если этот браузер обеспечивает требуемые возможности.

Хотя в этом параграфе есть руководство, я не могу найти никакой документации о том, как установить предпочтительный браузер для моего PWA

1 Ответ

4 голосов
/ 05 апреля 2019

Чтобы открыть URL в Chrome, я использую пользовательские вкладки 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

...