Что такое Chrome Custom Tabs и как открыть ссылку в приложении
Chrome Custom Tabs — это способ открывать ссылки внутри приложения через движок Chrome, без переключения в браузер: тапните по ссылке, и она загрузится во встроенной вкладке с быстрой подгрузкой, сохранением куки и автозаполнением.
Как это работает — коротко и по делу
Chrome Custom Tabs (CCT) использует движок Chrome для рендера страниц, но отображается как часть интерфейса приложения. Главное отличие от WebView:
- загрузка быстрее за счёт предварительной инициализации Chrome;
- доступны куки, автозаполнение и расширения браузера;
- приложение может настроить цвет панели, кнопку действия и анимацию;
- поведение соответствует политике безопасности Chrome (HTTPS, безопасный просмотр).
Это не полноэкранный переход в браузер: пользователь остаётся в приложении визуально, но получает преимущества полноценного браузера.
Если страницы открываются медленно — проверьте, что Chrome установлен и обновлён: CCT использует его движок.
Как открыть ссылки в Chrome Custom Tabs (для пользователей)
- Убедитесь, что Chrome установлен и обновлён.
- Проверьте системные настройки:
- Откройте Настройки → Приложения → Chrome → Открывать поддерживаемые ссылки (или "Open by default") — включите.
- В приложении тапните по ссылке. Если разработчик поддерживает CCT, ссылка откроется во встроенной вкладке (с адресной строкой и кнопкой "Назад").
- Если ничего не происходит или открывается внешний браузер:
- Очистите кэш Chrome: Настройки → Приложения → Chrome → Хранилище → Очистить кэш.
- Обновите Chrome до последней версии.
- Проверьте, не включены ли у приложения собственные настройки "Открывать ссылки во внешнем браузере".
- Альтернатива: некоторые приложения предлагают переключатель «Открывать ссылки во встроенном браузере» — включите его.
Для разработчиков: быстрое руководство по внедрению
Добавьте зависимость и используйте 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 для всех пользователей.