Интернет на Android

Как можно использовать различные компоненты для отображения веб-контента внутри приложений Android.

Платформа Android существует уже более десяти лет, и с первых дней она имела отличную поддержку для Интернета. Она поставлялась с WebView, компонентом, который позволяет разработчикам использовать Интернет внутри их собственных приложений Android. Более того, Android позволяет разработчикам внедрять собственный движок браузера в платформу, способствуя конкуренции и инновациям.

Разработчики могут включать Интернет в свои приложения Android разными способами. WebView часто используется для отображения рекламы, как компонент макета, используемый вместе с элементами пользовательского интерфейса Android, или для упаковки игр HTML 5. Пользовательские вкладки позволяют разработчикам создавать браузеры в приложениях и обеспечивать бесперебойную навигацию по стороннему веб-контенту, а Trusted Web Activity позволяет разработчикам использовать свои прогрессивные веб-приложения (PWA) в приложениях Android, которые можно загрузить из Play Store.

Android-веб-просмотр

WebView предоставляет разработчикам доступ к современным HTML, CSS и JavaScript внутри их приложений Android и позволяет отправлять контент внутри APK или размещать его в Интернете. Это один из самых гибких и мощных компонентов Android, который можно использовать для большинства случаев использования, когда веб-контент включен в приложение Android. От поддержки рекламных сервисов, таких как AdMob, до создания и отправки полных игр HTML5, которые используют современные API, такие как WebGL.

Однако при использовании для создания встроенного браузера или включения PWA в приложение Android WebView не обладает безопасностью, функциями и возможностями веб-платформы.

Задача браузера в приложении

Со временем все больше разработчиков создавали браузерные возможности, включающие сторонний контент в свои приложения Android, с целью создания более бесшовного опыта для своих пользователей при переходе на сторонние веб-сайты. Такие возможности стали известны как браузеры внутри приложений.

WebView имеет обширную поддержку современного стека веб-технологий и поддерживает многие современные веб-API, такие как WebGL. Но WebView в первую очередь является набором инструментов веб-UI. Он не предназначен для поддержки всех функций веб-платформы и не поддерживает их . Если у API уже есть альтернатива на уровне ОС, например Web Bluetooth, или требуется реализация пользовательского интерфейса браузера, например push-уведомлений, он может не поддерживаться. По мере развития веб-платформы и добавления дополнительных функций, которые были доступны только для приложений Android, этот разрыв станет еще больше. Поскольку разработчики приложений не контролируют, какие функции используются при открытии стороннего контента, это делает WebView плохим выбором для браузеров в приложениях или открытия прогрессивных веб-приложений. Даже если бы WebView реализовал поддержку всех функций веб-платформы, разработчикам все равно пришлось бы писать код и реализовывать собственный пользовательский интерфейс для таких функций, как разрешения или push-уведомления, что затрудняет достижение согласованности для пользователей.

Вопросы безопасности при использовании WebView в качестве встроенного браузера

WebView предоставляет приложению-внедрителю полный доступ к визуализированному контенту, включая файлы cookie и DOM. Это мощные функции, требующие высокого уровня доверия со стороны пользователей.

Поскольку WebView не предназначен для использования в качестве фреймворка для создания браузеров, в нем отсутствуют функции безопасности, доступные в современных браузерах.

Многопроцессная архитектура и изоляция сайта

Браузеры разработаны для обеспечения безопасности при отображении и выполнении контента, который не является надежным. Чтобы гарантировать безопасность пользователя при навигации по контенту, который потенциально ненадежен или даже вредоносен, современные браузеры используют такие методы, как использование многопроцессорной архитектуры и изоляция сайта .

Без многопроцессорной архитектуры сбой, вызванный веб-страницей, может привести к сбою всего браузерного приложения, или уязвимость может быть использована для захвата контроля над всем устройством. Изоляция сайта добавляет еще один уровень безопасности, который затрудняет доступ и кражу информации с других сайтов ненадежными сайтами.

До Android 8.0 Oreo рендерер WebView использовал тот же процесс, что и приложение embedder. В более новых версиях ОС и когда устройства достаточно функциональны, рендерер работает в другом процессе. Однако один процесс по-прежнему используется совместно всеми страницами и экземплярами WebView, которые их запускают, что делает невозможным полную реализацию изоляции сайта.

Отсутствие многопроцессорной архитектуры и изоляции сайтов не является проблемой для приложений, которые отображают контент, которым они владеют и которому доверяют, но может стать проблемой для приложений, запускающих ненадежный сторонний контент, например, встроенные браузеры, и оставляет пользователей уязвимыми для таких уязвимостей, как Meltdown и Spectre , которые могут использоваться для кражи файлов cookie, банковских реквизитов, личной информации и многого другого.

Индикаторы безопасного пользовательского интерфейса

Также важно предоставлять пользователям хорошие показатели безопасности, и браузеры прилагают много усилий и постоянно развиваются в этой области. Однако в WebView отсутствует API для проверки безопасности соединения с сайтом, что позволяет разработчикам приложений создавать надежные показатели безопасности. Отсутствие такого API может привести, например, к тому, что URL, отображаемый в адресной строке, не будет соответствовать странице, отображаемой пользователю, даже через защищенные соединения HTTPS.

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

Пользовательские вкладки как решение для браузеров внутри приложений

Custom Tabs был представлен в Chrome 45 и позволяет разработчикам использовать вкладку из браузера пользователя по умолчанию как часть своего приложения. Custom Tabs изначально был запущен Chrome и поэтому был известен как «Chrome Custom Tabs». Сегодня это Android API , и большинство популярных браузеров поддерживают Custom Tabs, включая Chrome, Firefox, Edge и Samsung Internet, поэтому правильнее называть его просто «Custom Tabs».

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

Они также предлагают функции, которые ранее были недоступны при использовании WebView или встраивании браузерного движка. Поскольку браузер в приложении работает на основе браузера пользователя, Custom Tabs делит хранилище с браузером, поэтому пользователям не нужно повторно входить на свои любимые веб-сайты каждый раз, когда одно из установленных приложений запускает сеанс просмотра в приложении.

В отличие от WebViews, Custom Tabs поддерживает все функции веб-платформы и API, поддерживаемые браузером, на котором они работают.

Открытие прогрессивных веб-приложений с использованием Trusted Web Activity

Progressive Web Apps привносят в Интернет множество поведений и возможностей, которые когда-то были доступны только для приложений, специфичных для платформы. С появлением поведения, подобного приложению, желание разработчиков повторно использовать эти возможности на Android возросло, и разработчики начали искать способы интеграции PWA в свои приложения.

Custom Tabs поддерживает все современные веб-возможности и API, но, поскольку он был в первую очередь разработан для открытия стороннего контента, в нем есть панель инструментов сверху, которая сообщает пользователям, какой URL они посещают, а также значок замка, указывающий, является ли сайт безопасным. При открытии собственного опыта приложения панель инструментов не позволяет приложению ощущаться как интегрированное с операционной системой.

Trusted Web Activities был представлен в Chrome 72 и позволяет разработчикам использовать свои PWA внутри приложения Android . Его протокол похож на протокол Custom Tabs, но вводит API, которые позволяют разработчикам проверять (через Digital Asset Links ), что они контролируют как приложение Android, так и открываемый URL, и удалять строку URL, когда оба значения верны.

Они также представили API для создания заставок при открытии PWA или делегирования веб-уведомлений для обработки кодом Android. Скоро появятся и другие функции, такие как поддержка Play Billing.

Поскольку предполагается, что URL-адреса, открываемые в Trusted Web Activities, являются PWA и имеют набор характеристик поведения и производительности, Trusted Web Activities вводит критерии качества для PWA, открываемых внутри него.

Ограничения текущих решений

Отзывы разработчиков показали необходимость совместимости пользовательских вкладок с платформой в сочетании с гибкостью WebView, чтобы они могли, например, получать доступ к DOM или внедрять JavaScript в браузеры своих приложений.

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

Команда Web on Android в Google ищет альтернативы и экспериментирует с решениями для решения этих вариантов использования. Следите за подробностями!

Краткое содержание

WebView полезен, когда приложению требуются HTML, CSS и JavaScript внутри его приложения Android, но не используются более продвинутые функции и возможности, доступные в современном вебе, такие как Push-уведомления, Web Bluetooth и другие. Его не рекомендуется использовать при открытии контента, разработанного для современной веб-платформы, поскольку он может отображаться не так, как задумал разработчик. WebView не рекомендуется использовать для создания браузеров в приложениях. С другой стороны, отображение веб-контента первой стороны — это область, где WebView действительно блистают.

Trusted Web Activity следует использовать, когда разработчики хотят отобразить собственное Progressive Web App в полноэкранном режиме внутри своего приложения Android. Его можно использовать как единственную активность в приложении или вместе с другими активностями Android.

Пользовательские вкладки — это рекомендуемый способ открытия стороннего контента, разработанного для веб-платформы, также известного как встроенные браузеры.