WebView — это компонент мобильного приложения, который показывает веб-страницу прямо внутри экрана приложения, без перехода в браузер. На Android это класс WebView, на iOS — WKWebView. Его берут, когда нужно вывести свой веб-контент в нативном интерфейсе: справку, оферту, ленту новостей, рекламу, экран гибридного приложения.
Что стоит знать до того, как открывать среду разработки:
- WebView предназначен для контента, который вы контролируете сами. Для чужих сайтов и внешних ссылок у платформ есть отдельные инструменты — Custom Tabs на Android и SFSafariViewController на iOS.
- Приложение, которое сводится к одной чужой странице в обёртке, задевает сразу два пункта правил магазинов. Ниже они приведены дословно, со ссылками.
- Минимальный рабочий экран на Android — это три вещи: разрешение INTERNET в манифесте, элемент WebView в разметке и вызов
loadUrl(). - На iOS старый класс UIWebView закрыт для новых приложений с апреля 2020 года, актуальный — WKWebView.
- Переходы по ссылкам, JavaScript и мост в нативный код по умолчанию работают не так, как ожидает большинство. Каждое поведение включается отдельно.
Что такое WebView простыми словами
WebView — это встроенный в приложение экран браузера без адресной строки и вкладок. Приложение отдаёт ему адрес или готовый HTML, а компонент рисует страницу средствами платформы и показывает её рядом с обычными нативными кнопками и списками.
Документация Apple описывает свой класс так: «A WKWebView object is a platform-native view that you use to incorporate web content seamlessly into your app’s UI. A web view supports a full web-browsing experience, and presents HTML, CSS, and JavaScript content alongside your app’s native views» — это нативное представление, которое встраивает веб-контент в интерфейс приложения и показывает HTML, CSS и JavaScript вместе с нативными вью. Там же названа типичная причина такого выбора: «Use it when web technologies satisfy your app’s layout and styling requirements more readily than native views. For example, you might use it when your app’s content changes frequently» — когда контент меняется часто и переверстать веб-страницу быстрее, чем выпускать новую сборку.
Три разные вещи, которые называют одним словом
Из-за омонимии половина споров про WebView идёт мимо цели. Разведём понятия:
- Компонент WebView в коде приложения — элемент интерфейса, который разработчик добавляет на экран. Об этом статья.
- Android System WebView — системный компонент, который вы видите в списке приложений телефона. Он и отрисовывает веб-страницы внутри других программ. В документации Android Developers отмечено, что обновления этого компонента приезжают отдельно от прошивки: «WebView updates roll out globally through Google Play, so you don’t have to worry about the underlying engine getting outdated».
- «WebView-приложение» на жаргоне — приложение, всё содержимое которого сводится к одному сайту в оболочке. Технически это тот же компонент, но разговор о нём быстро уходит в правила магазинов, а не в код.
Если вы сравниваете такой подход с полноценной разработкой под платформу, разбор различий есть в отдельном материале про нативные приложения и их ограничения.

- Возможность получить Доступ в Нейроклуб на целый месяц
- Как ИИ ускоряет работу и приносит деньги
- За 2 часа вы получите четкий план, как начать работать с ИИ прямо сейчас!
Когда WebView уместен, а когда лучше взять другой инструмент

Android Developers в разделе про встроенный веб перечисляет сценарии, где WebView — правильный выбор, дословно: гибридные приложения («You’re building an app where web content and native components (like a navigation bar or a floating action button) live side-by-side»), первичный собственный контент («Your web content is a core, interactive part of the app experience, like a document editor or a design canvas»), полный контроль над интерфейсом («You need to modify the contents of the web page itself or overlay native UI elements on top of it») и глубокая аналитика («You need detailed insight into user engagement and activity within the web view»).
Там же названы издержки, о которых обычно молчат обзоры. Первая — ресурсы: «WebView can be memory-intensive. If you don’t manage it carefully, you can run into performance issues or ANRs (App Not Responding errors)». Вторая — зона ответственности: «You’re responsible for hardening the security and managing the lifecycle».
Обратный случай описан не менее прямо. Для чужих ссылок документация предлагает Custom Tabs: «When a user taps a link to a website you don’t own, Custom Tabs keep them in your app’s context while providing a full browser experience». Ключевое отличие — общее состояние с браузером: «Because it shares cookies with the user’s default browser, users don’t have to sign in again to sites they have already visited». И отдельно про вход через сторонние сервисы: «They are well-suited for third-party sign-in flows (such as «Sign in with Google» or «Sign in with Facebook») as the browser handles credentials securely».
Вывод для практики простой: свой контент — WebView, чужой — Custom Tabs или SFSafariViewController. Ошибка выбора всплывает не на демо, а на экране авторизации, когда пользователь заново вводит пароль, который в браузере давно сохранён.
WebView, Custom Tabs и SFSafariViewController: чем отличаются
Четыре инструмента решают одну задачу — показать веб внутри приложения, — но дают разный уровень контроля и разный объём вашей ответственности.
| Критерий | WebView (Android) | Custom Tabs (Android) | WKWebView (iOS) | SFSafariViewController (iOS) |
|---|---|---|---|---|
| Основной сценарий по документации | Гибридные приложения, свой контент, реклама, страницы условий использования | Контент внешних сайтов: новости, карточки товаров | Веб-контент как часть интерфейса приложения | Просмотр любых сайтов «без выхода из приложения» |
| Контроль над содержимым страницы | Полный: можно менять контент и накладывать нативные элементы сверху | Ограниченный: браузерный интерфейс кастомизируется, содержимое — нет | Полный: Apple рекомендует его, «if you need to customize the controls of the web interface, or you want to interact with content» | Нет: «Interactions with the web interface aren’t visible to your app» |
| Общие куки и вход | Нет общего состояния с браузером | Есть: «Shared cookie jar and permissions model so users don’t have to sign in to sites they are already connected to» | Нет общего состояния с Safari | Данные приложению недоступны: «you can’t access AutoFill data, browsing history, or website data» |
| Кто отвечает за безопасность и жизненный цикл | Вы: «You’re responsible for hardening the security and managing the lifecycle» | Браузер пользователя | Вы | Safari; «You don’t need to secure data between your app and Safari» |
| Ограничение платформы | Память и риск ANR при небрежном управлении | Поддержка зависит от браузера, изначально введено в Chrome 45 | Заменил UIWebView начиная с iOS 8 | Нельзя прятать: «You may not hide or obscure the view controller behind other views or layers» |
Отдельная деталь для iOS, которую в обзорах почти не встретишь: требование не прятать SFSafariViewController зафиксировано прямо в документации Apple со ссылкой на правила ревью, то есть это не рекомендация по вкусу, а условие приёмки.
Пройдёт ли WebView-приложение модерацию в Google Play и App Store
Здесь важно не пересказывать слухи, а читать действующие формулировки. Ни один из магазинов не пишет «WebView запрещён» — запрещены конкретные конструкции.
Google Play, политика Spam. Дословно: «We don’t allow apps whose primary purpose is to drive affiliate traffic to a website or provide a webview of a website without permission from the website owner or administrator» (Google Play, Spam policy). Ключевое здесь — «without permission from the website owner»: правило бьёт по обёрткам чужих сайтов и по аффилиат-трафику, а не по факту использования компонента. Смежная политика Functionality, Content, and User Experience добавляет второй фильтр: «We do not allow apps that only have limited functionality and content».
App Store, правило 4.2 Minimum Functionality. Дословно: «Your app should include features, content, and UI that elevate it beyond a repackaged website. If your app is not particularly useful, unique, or «app-like,» it doesn’t belong on the App Store» (App Store Review Guidelines). Пункт 4.2.2 уточняет: «Other than catalogs, apps shouldn’t primarily be marketing materials, advertisements, web clippings, content aggregators, or a collection of links».
Третья формулировка бьёт по конструкторам обёрток, и её обычно не замечают до отказа. Пункт 4.2.6: «Apps created from a commercialized template or app generation service will be rejected unless they are submitted directly by the provider of the app’s content». То есть подрядчик не может публиковать со своего аккаунта приложения клиентов, собранные его же генератором; допустимый вариант, который Apple называет там же, — один бинарник с выбором клиента внутри.
Мини-вывод: WebView как компонент правилами не запрещён нигде. Проблемы начинаются, когда приложение не добавляет ничего сверх сайта, оборачивает чужой ресурс без разрешения владельца или публикуется генератором от имени клиента.

- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
- Где и как применять? Потестируем модель после установки на разных задачах
- Как дообучить модель под себя?
Как собрать экран с WebView на Android

Ниже — минимальный рабочий набор. Все фрагменты приведены в том виде, в каком они даны в документации Android Developers, без «улучшений» по памяти.
Шаг 1. Разрешение на сеть. Без него страница просто не загрузится, и это самая частая причина белого экрана у новичков. В манифест добавляется:
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
Шаг 2. Компонент в разметке экрана.
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Шаг 3. Загрузка адреса. Kotlin:
val myWebView: WebView = findViewById(R.id.webview)
myWebView.loadUrl("https://www.example.com")
То же на Java:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("https://www.example.com");
Шаг 4. JavaScript, если он нужен странице. Документация формулирует условие прямо: «If the web page you want to load in your WebView uses JavaScript, you must enable JavaScript for your WebView». По умолчанию он выключен, включается через настройки компонента:
val myWebView: WebView = findViewById(R.id.webview)
myWebView.settings.javaScriptEnabled = true
Шаг 5. Переходы по ссылкам. Поведение по умолчанию удивляет большинство: «When the user taps a link from a web page in your WebView, by default, Android launches an app that handles URLs. Usually, the default web browser opens and loads the destination URL». Чтобы ссылки открывались внутри приложения, задают свой WebViewClient:
private class MyWebViewClient : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
if (Uri.parse(url).host == "www.example.com") {
return false
}
Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
startActivity(this)
}
return true
}
}
Логика такая: свой домен остаётся внутри WebView (return false), чужие адреса уходят системе. Именно этот фрагмент отделяет приложение от «сайта в рамке», по которому пользователь случайно уезжает в браузер и не возвращается.
Тот же экран на iOS
Apple приводит в документации WKWebView полный пример контроллера — он создаёт вью в коде, поэтому не зависит от того, как настроен сториборд:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string:"https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
}
Про старый класс UIWebView разночтений быть не должно, поэтому приведём оба заявления Apple. В декабре 2019 года: «The App Store will no longer accept new apps using UIWebView as of April 2020 and app updates using UIWebView as of December 2020». В октябре 2020 года срок по обновлениям был сдвинут: «this deadline for app updates has been extended beyond the end of 2020. We’ll let you know when a new deadline is confirmed». Публичного объявления новой даты по обновлениям с тех пор не выходило, но по новым приложениям формулировка однозначна: «New apps containing these frameworks are no longer accepted by the App Store». Для любой новой разработки вариант один — WKWebView.
Что ломается чаще всего
- Белый экран. Проверяйте разрешение INTERNET и включённый JavaScript — две причины из документации, а не из догадок.
- Пользователь уезжает в браузер. Лечится WebViewClient из шага 5.
- Мост в нативный код. Документация Android предупреждает дословно: «Using addJavascriptInterface() lets JavaScript control your Android app… don’t use addJavascriptInterface() unless you wrote all of the HTML and JavaScript that appears in your WebView». Если страницу верстали не вы — моста быть не должно.
- Память и зависания. Тот же источник называет WebView memory-intensive и связывает небрежное управление с ANR. Для длинных списков и тяжёлых страниц это не теория.
- Ожидание офлайна. Само по себе встраивание страницы офлайн-режима не даёт: без кеширования или локальных ресурсов приложение без сети покажет ошибку загрузки.
Чек-лист перед публикацией
- Контент внутри — ваш или на него есть разрешение владельца сайта.
- Приложение делает что-то сверх страницы: пуши, офлайн-часть, нативные экраны, работа с камерой или файлами.
- Внешние ссылки открываются через Custom Tabs или SFSafariViewController, а не внутри WebView.
- Разрешение INTERNET на месте, JavaScript включён осознанно, WebViewClient настроен.
- addJavascriptInterface не используется для чужого контента.
- На iOS — WKWebView, не UIWebView.
- Если сборку делает подрядчик-генератор, публикация идёт с аккаунта владельца контента (правило 4.2.6).
Если задача — быстро проверить спрос, а не выпустить финальный продукт, разумнее начать с веб-версии и упаковать её позже. Как это выглядит на практике, показывают разбор сборки веб-приложения в Lovable и история MVP, собранного за две недели. Для самой обвязки на Android и iOS помогает связка с ассистентом — например, генерация кода приложения в GitHub Copilot и VS Code.
Частые вопросы
WebView — это браузер?
Нет. Это компонент, который показывает веб-страницу внутри приложения, без адресной строки, вкладок и общего с браузером состояния. Полноценный браузерный опыт внутри приложения дают Custom Tabs на Android и SFSafariViewController на iOS.
Что такое Android System WebView в списке приложений телефона?
Это системный компонент, который отрисовывает веб-страницы внутри других приложений. Его обновления, по документации Android Developers, распространяются через Google Play отдельно от обновлений системы.
Отклонят ли приложение, если это просто сайт в обёртке?
Правила не запрещают WebView, но запрещают две конструкции. Google Play: «We don’t allow apps whose primary purpose is to drive affiliate traffic to a website or provide a webview of a website without permission from the website owner or administrator». App Store, правило 4.2: приложение должно содержать функции, контент и интерфейс, «that elevate it beyond a repackaged website».
Чем WKWebView отличается от UIWebView?
WKWebView заменил UIWebView начиная с iOS 8. Apple сообщила, что App Store не принимает новые приложения с UIWebView с апреля 2020 года; срок по обновлениям был продлён за пределы 2020 года без публикации новой даты.
Нужен ли JavaScript в WebView?
Только если его использует загружаемая страница: «If the web page you want to load in your WebView uses JavaScript, you must enable JavaScript for your WebView». По умолчанию он выключен, и это осознанное ограничение, а не баг.
Можно ли сделать WebView-приложение без программирования?
Конструкторы обёрток существуют, но с ними связан отдельный риск приёмки в App Store: правило 4.2.6 требует, чтобы приложение, созданное из коммерческого шаблона или сервиса генерации, подавал сам владелец контента.
Материал проверен по документации Android Developers, Apple Developer и действующим правилам магазинов 28 июля 2026 года.
- Выполним базовые задачи на российских нейросетях и посмотрим на результаты!
- Файл-инструкцию «Как сделать нейро-фотосессию из своего фото бесплатно, без иностранных карт и прочих сложностей»
- Покажем 10+ способов улучшить свою жизнь с ИИ каждому — от ребенка и пенсионера до управленца и предпринимателя
- Возможность получить Доступ в Нейроклуб на целый месяц
- Как ИИ ускоряет работу и приносит деньги
- За 2 часа вы получите четкий план, как начать работать с ИИ прямо сейчас!