Что такое Chrome Custom Tabs и как открыть ссылку в приложении

Chrome Custom Tabs — это способ открывать ссылки внутри приложения через движок Chrome, без переключения в браузер: тапните по ссылке, и она загрузится во встроенной вкладке с быстрой подгрузкой, сохранением куки и автозаполнением.

Как это работает — коротко и по делу

Chrome Custom Tabs (CCT) использует движок Chrome для рендера страниц, но отображается как часть интерфейса приложения. Главное отличие от WebView:

  • загрузка быстрее за счёт предварительной инициализации Chrome;
  • доступны куки, автозаполнение и расширения браузера;
  • приложение может настроить цвет панели, кнопку действия и анимацию;
  • поведение соответствует политике безопасности Chrome (HTTPS, безопасный просмотр).

Это не полноэкранный переход в браузер: пользователь остаётся в приложении визуально, но получает преимущества полноценного браузера.

Если страницы открываются медленно — проверьте, что Chrome установлен и обновлён: CCT использует его движок.

Как открыть ссылки в Chrome Custom Tabs (для пользователей)

  1. Убедитесь, что Chrome установлен и обновлён.
  2. Проверьте системные настройки:
    • Откройте Настройки → Приложения → Chrome → Открывать поддерживаемые ссылки (или "Open by default") — включите.
  3. В приложении тапните по ссылке. Если разработчик поддерживает CCT, ссылка откроется во встроенной вкладке (с адресной строкой и кнопкой "Назад").
  4. Если ничего не происходит или открывается внешний браузер:
    • Очистите кэш Chrome: Настройки → Приложения → Chrome → Хранилище → Очистить кэш.
    • Обновите Chrome до последней версии.
    • Проверьте, не включены ли у приложения собственные настройки "Открывать ссылки во внешнем браузере".
  5. Альтернатива: некоторые приложения предлагают переключатель «Открывать ссылки во встроенном браузере» — включите его.

Для разработчиков: быстрое руководство по внедрению

Добавьте зависимость и используйте CustomTabsIntent для запуска:

В build.gradle:

implementation "androidx.browser:browser:1.6.1"

Пример на Kotlin:

val builder = CustomTabsIntent.Builder()
    .setToolbarColor(ContextCompat.getColor(this, R.color.primary))
    .setShowTitle(true)
val customTabsIntent = builder.build()
customTabsIntent.launchUrl(this, Uri.parse("https://example.com"))

Полезные опции:

  • setToolbarColor() — цвет панели.
  • setActionButton() / setSecondaryToolbarViews() — кастомные кнопки.
  • setStartAnimations()/setExitAnimations() — анимация открытия/закрытия.
  • Предзагрузка: использовать CustomTabsClient и warmup() для ускорения.

Рекомендации:

  • Делайте fallback на WebView или Intent с ACTION_VIEW, если Chrome не установлен.
  • Тестируйте на реальных устройствах: CCT требует установленного Chrome; на эмуляторе может вести себя иначе.
  • Не путайте с Trusted Web Activity (TWA) — TWA используется для PWA в режиме standalone.

Trusted Web Activity похожа внешне, но предназначена для полноэкранных PWA без панели браузера — это уже другой сценарий.

Частые ошибки

  • CCT не открывается: приложение не использует библиотеку androidx.browser — решение: обратиться к разработчику или использовать внешний Intent.
  • Ссылки открываются в стороннем браузере: Chrome не установлен/не выбран как обработчик ссылок.
  • Неправильный UI/цвета: проверьте, что setToolbarColor применяется до build().
  • Краш на старых Android: обеспечьте fallback на WebView, так как на API <23 возможна нестабильность.

FAQ

  • Нужно ли пользователю что-то включать, чтобы CCT работал? — Обычно нет, достаточно иметь обновлённый Chrome и включённые "Open supported links" для Chrome.
  • Безопасны ли CCT? — Да: рендерит страницы движок Chrome, сохраняет механизмы безопасности браузера.
  • Работают ли расширения Chrome в CCT? — Некоторые функции браузера (автозаполнение, куки) доступны; поведение расширений зависит от реализации Chrome.
  • Можно ли принудительно открыть ссылку всегда во внешнем Chrome? — Да: отправляя Intent с ACTION_VIEW и флагами, либо изменив системные настройки по умолчанию для открытия ссылок.

Эти шаги помогут либо сразу начать пользоваться CCT, либо быстро внедрить его в приложение и обеспечить корректный fallback для всех пользователей.