PWA с TWA: как заставить Chrome вместо браузера по умолчанию

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

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

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

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

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


person hnprashanth    schedule 05.04.2019    source источник


Ответы (2)


Чтобы открыть 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

person Yuri Popiv    schedule 05.04.2019
comment
было бы неплохо иметь этот фрагмент в минимальном рабочем примере! - person Franz Ebner; 11.06.2019
comment
Не могли бы вы предоставить версию Java? А где мне делать проверку и строить со строителем? - person Arka Roy; 25.07.2020
comment
@ArkaRoy github.com/google/iosched/blob/master/mobile/src/main/java/com/ - person Yuri Popiv; 27.07.2020
comment
@YuriPopiv Извините за беспокойство, но я думаю, что многие люди, разрабатывающие TWA, практически не имеют опыта разработки под Android. В какой именно файл вставлен этот фрагмент? - person Blackness; 06.08.2020

Не рекомендуется принудительно использовать Chrome в качестве браузера для обработки доверенных веб-действий, поскольку количество браузеров, поддерживающих Trusted Web Activity, растет, и разработчики должны стараться уважать выбор браузера пользователя в той мере, в какой возможно.

реализация, которая выбирает браузер в android-browser-helper будет:

  1. Поищите браузеры, поддерживающие TWA, если найдете, выберите его.
  2. В противном случае поищите браузер, поддерживающий настраиваемые вкладки, если вы их найдете, выберите его.
  3. В противном случае запустите браузер по умолчанию.

Кроме того, разработчики могут заменить номера 2 и 3 на резервная реализация WebView, даже если есть компромиссы по поддерживаемому набору функций.

Что касается нижеприведенного:

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

Здесь может произойти несколько вещей:

  1. Установленная версия Chrome устарела и не поддерживает Trusted Web Activity, поэтому возвращается к (2)
  2. Браузер MI заявляет о поддержке Trusted Web Activity, но на самом деле это не так. Кажется, это на устройствах Kindle Fire.
  3. Возможная ошибка в логике выбора браузера.

Для 1 решение - это обновление Chrome, и все должно работать. В противном случае включите резервный вариант WebView.

Для 2, похоже, что нужен список запрещенных, чтобы избежать использования браузеров, которые, как известно, заявляют о поддержке, но не поддерживают. Я бы рекомендовал отправить запрос функции на https://github.com/GoogleChrome/android-browser-helper/

Для 3 сообщите об ошибке на странице https://github.com/GoogleChrome/android-browser-helper/

Обновление: я установил браузер MI с проектом, созданным с помощью Bubblewrap. Браузер MI не заявляет о поддержке доверенной веб-активности, и Chrome открывается должным образом. Я склоняюсь к проблеме, связанной с (1) выше.

Наконец, можно реализовать собственное средство выбора поставщика для доверенной веб-активности, в котором вы можете поддерживать список запрещенных, пока автоматический способ не реализован в Android Browser Helper. См. этот образец для получения подробной информации.

person andreban    schedule 06.08.2020