PWA или нативное приложение: когда достаточно веб-приложения
Основы4 минРедакция Innovialabs
Коротко
PWA достаточно, если продукту нужны быстрый запуск, работа по ссылке, базовый офлайн и уведомления без глубокого доступа к железу. Нативное приложение нужно, когда важны Bluetooth, фоновая работа, сложная графика, витрина в App Store или максимальная плавность.
Короткий ответ
PWA (Progressive Web App) — это сайт, который умеет устанавливаться на главный экран, работать без сети и присылать уведомления. Нативное приложение пишется под iOS и Android и распространяется через App Store и Google Play.
PWA — хороший первый шаг, когда нужно быстро проверить идею, пользователи приходят по ссылке, а функции не выходят за рамки того, что умеет браузер. Нативное приложение оправдано, когда продукт опирается на возможности устройства, фоновые процессы или присутствие в магазинах.
Сравнение по пунктам
| Критерий | PWA | Нативное приложение |
|---|---|---|
| Установка | Из браузера, без магазина | Через App Store и Google Play |
| Обновления | Мгновенно, как у сайта | Через ревью и обновление в сторе |
| Офлайн | Через Service Worker и кэш | Полный контроль над данными |
| Push на Android | Поддерживается | Поддерживается |
| Push на iOS | Только после добавления на главный экран | Поддерживается |
| Доступ к железу | Ограничен API браузера | Полный |
| Присутствие в сторах | Google Play — возможно, App Store — сложно | Да |
| Кодовая база | Одна, веб | Две нативные или одна кроссплатформенная |
Установка
На Android Chrome сам предлагает установить PWA, если у сайта есть манифест и Service Worker. Иконка появляется на экране, приложение открывается без адресной строки.
На iOS установка неочевидна: пользователь должен открыть сайт в Safari, нажать «Поделиться» и выбрать «На экран "Домой"». Многие об этом не знают, поэтому на iOS стоит показывать короткую подсказку.
Офлайн-режим
Service Worker перехватывает запросы и отдает данные из кэша. Так можно сделать:
- открытие приложения без сети;
- просмотр ранее загруженных данных;
- очередь действий, которая отправится при появлении связи.
Ограничение в том, что браузер может очистить хранилище, если места мало или сайтом долго не пользовались. Для приложений, где офлайн-данные критичны, надежнее нативное хранилище.
Push-уведомления
На Android веб-push работает давно и стабильно. На iOS веб-push появился позже и работает только для PWA, добавленной на главный экран: из обычной вкладки Safari подписаться нельзя. Разрешение нужно запрашивать по действию пользователя, например по нажатию кнопки.
Если уведомления — ядро продукта (мессенджер, доставка, такси), нативное приложение дает больше контроля: категории, действия в уведомлении, тихие пуши для фоновой синхронизации.
Доступ к железу
PWA умеет работать с камерой, геолокацией, микрофоном, вибрацией (не везде) и буфером обмена. Но многие API, например Web Bluetooth и Web NFC, доступны не во всех браузерах, а в Safari часть из них отсутствует. Фоновая геолокация, работа с HealthKit, виджеты, интеграция с Apple Pay внутри приложения и тонкая работа с камерой остаются за нативом.
Магазины и стоимость
- Google Play принимает PWA, упакованную через Trusted Web Activity.
- App Store требует, чтобы приложение давало ценность сверх обычного сайта, поэтому простая обертка над PWA часто не проходит ревью.
- Стоимость PWA обычно ниже: одна кодовая база, нет аккаунтов разработчика и ревью, обновления без задержек. Нативная разработка дороже из-за двух платформ, публикации и поддержки версий.
Когда PWA — разумный первый шаг
- Проверка гипотезы. Нужно быстро понять, нужен ли продукт людям.
- Сервис по ссылке. Пользователи приходят из рекламы, мессенджеров или QR-кода и не хотят ничего скачивать.
- Внутренние инструменты. Панели для сотрудников, учет, заявки.
- Контентные продукты. Каталоги, медиа, бронирование, личный кабинет.
Нативное приложение выбирайте, если нужны Bluetooth-устройства, фоновая работа, сложная анимация и графика, глубокие интеграции с ОС или продукт живет за счет поиска в магазинах.
Частые ошибки
- Делать натив «потому что так солиднее», не проверив спрос.
- Рассчитывать на push на iOS, не объяснив пользователю, как установить PWA.
- Обещать офлайн, не продумав синхронизацию и конфликты данных.
- Забывать про переход: если PWA взлетит, API и бэкенд должны подойти и для будущего нативного клиента.