PWA, нативное приложение, React Native или Flutter: что выбрать в 2026 году?
Вы уже решили, что бизнесу нужно присутствие в телефоне клиента. Теперь расходятся предложения подрядчиков: один уверяет, что хватит PWA, другой настаивает на нативной разработке, третий предлагает одну кодовую базу на оба магазина. Рассказываем, что умеет и чего не умеет каждый вариант на ноябрь 2026 года, как магазины меняют расчёт, во что обходится вторая кодовая база и как принять решение по той единственной функции, без которой продукт не работает.
КОРОТКО
Что выбрать
Выбирайте по самому сложному, что продукт должен делать в телефоне. PWA подходит для контента, каталогов и нечастых заказов, если вы готовы просить владельцев iPhone установить её, прежде чем заработают уведомления. React Native или Flutter подходят, когда нужны оба магазина, а большинство экранов на двух платформах совпадает. Нативная разработка на Swift и Kotlin нужна, когда основной сценарий зависит от геолокации в фоне, Bluetooth или другой глубокой работы с устройством. А бюджет считайте на годы после запуска: именно там варианты расходятся сильнее всего.
В статье Когда бизнесу реально нужно мобильное приложение? мы разбирали более ранний вопрос: нужно ли оно вообще, судя по тому, кто им пользуется и как часто. Здесь мы начинаем с того места, где та статья заканчивается. Причина быть в телефоне у вас есть, и осталось понять, на какой технологии это делать.
Мы разрабатываем приложения на Swift, Kotlin и React Native, а PWA работает на нашем собственном сайте. Flutter-разработчики тоже есть в нашем пуле, и на нём мы делаем MVP, когда этого требует продукт, но опубликованного кейса на Flutter у нас нет, поэтому всё сказанное о нём взято из его документации.
Выбирайте по самому сложному, что должен делать телефон.
ЧЕТЫРЕ ВАРИАНТА
Что есть что на самом деле
PWA (прогрессивное веб-приложение) это ваш сайт с двумя дополнениями: файл-манифест, благодаря которому телефон устанавливает его со своей иконкой и в своём окне, и обычно service worker, небольшой скрипт между страницей и сетью, который работает без связи и принимает пуш-сообщения. Магазина и проверки нет, поэтому всё, что вы выложили, доступно при следующем визите.
Нативное приложение пишут дважды: на Swift для iOS и на Kotlin для Android. Каждая версия первой получает новые возможности системы, а вам приходится держать в согласии две кодовые базы и два цикла релизов.
React Native это одна кодовая база на JavaScript или TypeScript. Во время работы он создаёт настоящие представления Android и iOS для ваших компонентов, так что список или поле ввода принадлежат самой платформе (документация React Native).
Flutter это одна кодовая база на Dart, и путь у него обратный. Он обходит системные библиотеки интерфейса и рисует экран собственными виджетами через Impeller, движок отрисовки, который поставляется внутри приложения (документация Flutter).
Ещё в некоторых предложениях «приложением» называют ваш сайт в тонкой нативной оболочке. К этому мы вернёмся в главе о магазинах.
PWA В 2026
Что PWA умеет сейчас
Пуш на iPhone работает, но с условиями. Начиная с iOS и iPadOS 16.4 веб-приложение, добавленное на экран «Домой», может запросить разрешение на уведомления. Запрос должен следовать за прямым действием, например нажатием на кнопку подписки, а сайт в обычной вкладке Safari спросить не может вовсе. В том же релизе появились цифры на иконке. Членство в Apple Developer Program для этого не требуется, а доставка идёт через тот же Apple Push Notification service, что и у нативных приложений (WebKit, февраль 2023). На Android Chrome поддерживает Push API прямо в браузере, без установки (Can I use, ноябрь 2026).
Настоящее препятствие в самой установке. iOS не поддерживает beforeinstallprompt, событие, через которое сайт показывает свою кнопку установки, поэтому человек сам ищет пункт «На экран Домой» в меню «Поделиться» (MDN). С iOS 26 каждый добавленный так сайт по умолчанию открывается как веб-приложение, даже без манифеста (WebKit, сентябрь 2025). Сколько ваших клиентов пройдёт эти шаги, можно только измерить.
Поэтому важно, какая доля iPhone на вашем рынке. В ОАЭ в октябре 2026 года на Android приходилось 80,69% мобильных операционных систем, на iOS 19,29% (StatCounter). Значит, для большинства телефонов в стране веб-пуш работает без ручной установки. Но если вы продаёте премиальный продукт, доля iPhone среди ваших клиентов может оказаться намного выше средней, поэтому смотрите аналитику собственного сайта, а не только общую цифру.
На iPhone веб-пуш начинается только после установки.
Хранилище больше не слабое место. С Safari 17 сайт может занимать в браузере до 60% диска, и у веб-приложений на экране «Домой» такая же квота (WebKit, август 2023). Chrome тоже разрешает одному источнику до 60%, Firefox до 2 ГБ на группу сайтов (web.dev). Риск в удалении данных. Safari стирает хранилище, доступное скриптам, включая данные service worker, после семи дней использования Safari без взаимодействия с сайтом, а у веб-приложений на экране «Домой» свой счётчик дней использования (WebKit, март 2020).
На практике чтение без связи и сохранённая корзина в установленной PWA работают надёжно. Но несинхронизированные складские заказы мы бы в ней держать не стали: Background Sync, API, которое завершает отправку после закрытия страницы, не поддерживается в Safari на iOS и в Firefox (Can I use, ноябрь 2026).
Жёсткие ограничения на ноябрь 2026 года:
- Геолокация в фоне. В черновике W3C Geolocation от 30 октября 2026 года сказано, что обновления позиции предназначены исключительно для полностью активных видимых документов, поэтому слежение останавливается, когда страница скрыта.
- Bluetooth и NFC. Web Bluetooth работает в Chrome на Android и на компьютере, Web NFC отмечен как поддерживаемый в Chrome для Android, и ни один из них не работает в Safari на iOS (Can I use).
- Камера. Съёмка фото и видео через getUserMedia широко доступна с 2017 года, а встроенный Barcode Detection API всё ещё экспериментальный (MDN), поэтому сканер обычно означает библиотеку на JavaScript.
В Европе положение то же. В начале 2024 года Apple собиралась убрать веб-приложения с экрана «Домой» в ЕС, а в марте заявила, что сохранит эту возможность на движке WebKit (TechCrunch со ссылкой на Apple). Более нового решения, которое бы это меняло, мы не нашли. Это важно, если вы продаёте и клиентам в Европе.
НАША PWA
Чему нас научила собственная
Наш сайт устанавливается как PWA, так что механику мы описываем изнутри. Страницы всегда приходят из сети, поэтому текст свежий; последние 30 открытых страниц сохраняются, и без связи читатель получает сохранённую копию или небольшую офлайн-страницу.
Новые статьи уходят еженедельным пушем: одно уведомление на устройство, на том языке, на котором человек подписался, обо всём, что вышло после прошлой рассылки. Если на каком-то языке новых статей нет, в эту неделю по нему ничего не отправляется. На иконке установленного приложения видно, сколько статей вышло, счётчик ведёт service worker, а любая открытая страница его сбрасывает.
Блок подписки стоит в конце статей и в блоге, никогда не всплывает окном и показывается только там, где браузер поддерживает уведомления и не заблокировал их. На iPhone запрос разрешения должен прозвучать внутри самого нажатия, поэтому наша кнопка сначала спрашивает, а всё остальное делает потом.
Одну ошибку стоит пересказать. Мы регистрировали service worker при загрузке страницы, как это обычно делают. Затем PageSpeed начал падать на всех страницах с сообщением «Browser tab has unexpectedly crashed». Мы проверяли в PageSpeed статические копии статьи и убирали из них части, пока падение не исчезло. Наш хостинг отвечает 403 на user agent HeadlessChrome, а скрипт воркера запрашивается с собственным user agent браузера, и тестовый браузер не мог его получить. Теперь воркер регистрируется при первом касании, клике или нажатии клавиши посетителя, а при загрузке только если воркер уже управляет страницей. Посетители разницы не замечают. Что ещё показали нам проверки скорости на тяжёлой странице, рассказано в статье 3D на живом сайте: наш эксперимент с three.js и что увидел Google.
У нас контентный сайт, заказов в этой PWA нет. Он показывает, что установку, чтение без связи и пуш можно добавить к существующему сайту без магазина и второй кодовой базы, но ничего не говорит о том, будут ли клиенты заказывать через такую PWA ужин снова и снова.
МАГАЗИНЫ
Что добавляют магазины
Магазин даёт присутствие и привычную установку, а вместе с ними правила двух компаний. Цифры мы проверили в ноябре 2026 года; они часто меняются, поэтому перечитайте их перед расчётом бюджета.
| Правило | Apple App Store | Google Play |
|---|---|---|
| Аккаунт | $99 в год | $25 один раз |
| Цифровые товары и подписки | Обязательна покупка внутри приложения; комиссия 15% в Small Business Program для новых разработчиков или с выручкой до $1 млн в год | Для покупателей в ОАЭ и на других рынках вне новой схемы: 15% на первый $1 млн в год, 30% сверх него, подписки 15% |
| Физические товары и услуги | Покупку внутри приложения использовать нельзя: Apple Pay или ввод карты | Биллинг Play использовать нельзя; среди примеров доставка еды и билеты на мероприятия |
| Срок проверки | Не менее 50% заявок менее чем за 24 часа, 90% менее чем за 48 | Мы закладываем от нескольких часов до нескольких дней |
| Порог входа | Компания регистрируется как юрлицо с номером D-U-N-S | Личные аккаунты, созданные после 13 ноября 2023 года, проходят закрытый тест: 12 тестировщиков, 14 дней подряд |
| Удаление аккаунта | Обязательно внутри приложения | Путь в приложении и веб-ссылка |
Для покупателей в США, ЕЭЗ, Великобритании, Японии и Австралии у Google уже действуют новые ставки: 10% плюс 5% за биллинг на первый $1 млн годового дохода. Новая схема будет распространяться и на другие рынки, дату для них Google на этой странице не называет.
Заказ еды, бронирование столика или посылка вообще не платят комиссию магазину, только комиссию платёжного провайдера, поэтому бизнесу с физическими товарами незачем выбирать PWA ради экономии на комиссиях. Apple Pay доступен и в ОАЭ (Apple). С цифровой подпиской или платным контентом всё иначе: там канал влияет на вашу маржу. В витрине США приложение может вести на вашу собственную оплату цифровых товаров, а в других витринах Apple это ограничено (Guidelines, п. 3.1.1).
Правило 4.2 Apple требует от приложения большего, чем «перепакованный сайт», поэтому оболочка на Capacitor должна нести реальные функции устройства или полезные нативные экраны, чтобы пройти проверку. На Android такой путь поддерживается официально: Trusted Web Activity открывает вашу PWA на весь экран в Chrome, владение подтверждается через Digital Asset Links, а Bubblewrap создаёт Android-проект (Chrome for Developers). После публикации на неё действуют платёжные правила Play.
В ЕС нотаризованные приложения iOS можно также ставить из альтернативных магазинов или с сайта разработчика. С 1 октября 2026 года такая дистрибуция облагается комиссией Core Technology Commission в 5% с цифровых продаж (Apple).
ОДНА БАЗА
Докуда хватает одной кодовой базы
| Вопрос | React Native | Flutter |
|---|---|---|
| Язык | JavaScript или TypeScript | Dart |
| Что рисует экран | Представления самой платформы | Собственные виджеты Flutter через движок внутри приложения |
| Ритм релизов | Новая минорная версия примерно раз в два месяца; поддерживаются последние 3 серии | Стабильный релиз примерно раз в три месяца |
| Когда нужен код платформы | Для API, которых нет в React Native и библиотеках: Turbo Native Module | Для API вне Dart: каналы к Kotlin или Java и Swift или Objective-C |
| Лучше всего подходит | Командам на JavaScript или TypeScript, например рядом с сайтом на React | Командам, готовым вести Dart, и интерфейсам, одинаковым на обеих платформах |
| У нас | Проекты приложений и специалисты | MVP и специалисты из пула |
Одна кодовая база снимает значительную часть дублирования на экранах и в бизнес-логике. Работу с платформами она не снимает: подпись и сборки для магазинов, разрешения, настройка пуша и тестирование на обеих системах в любом случае остаются двойными.
Если вашему продукту нужен арабский интерфейс, закладывайте это сразу. React Native поддерживает зеркальную вёрстку через I18nManager, но жесты и анимации в компонентах без такой поддержки приходится дорабатывать вручную (React Native, 2016; проверяйте по актуальной документации). Flutter задаёт направление текста через делегаты локализации (документация Flutter), а на вебе этому служат логические свойства CSS (MDN).
React Native 0.88 вышел 15 октября 2026 года, 0.89 запланирован на декабрь, и поддерживаются только три последние серии. При таком темпе версия выходит из поддержки примерно через полгода после релиза. Проект, пропустивший обновления за год, потом прыгает сразу через несколько версий.
Мы советуем React Native, когда обе платформы используют одни и те же экраны и логику: каталог, заказы, аккаунты, бронирование. Наши проекты приложений идут на нативном коде или React Native, а Flutter мы используем для MVP и для приложений, которые уже на нём написаны. Если он есть в предложении, спросите, кто будет поддерживать код через три года и насколько легко вам будет нанять разработчиков на Dart. Когда приложение уже существует и вам нужны только люди для работы над ним, это другой формат: Нанять мобильного разработчика, от $45 до $65 в час, под вашим руководством.
ТАБЛИЦА РЕШЕНИЯ
Решайте по потребностям продукта
| Продукту нужно | PWA | React Native или Flutter | Натив на Swift и Kotlin |
|---|---|---|---|
| Пуш на iPhone | Только после ручной установки | Да, после разрешения | Да, после разрешения |
| Камера и сканирование | Фото и видео; сканирование через библиотеку на JavaScript | Да, через библиотеки | Прямой доступ |
| Bluetooth или NFC | Только Chrome на Android | Через библиотеку или нативный модуль | Прямой доступ |
| Геолокация в фоне | Нет | Через нативный код | Прямой доступ |
| Чтение без связи и сохранённая корзина | Да, лучше после установки | Да | Да |
| Работа без связи с последующей синхронизацией | Слабо на iPhone | Да, с локальной базой | Да, с локальной базой |
| Физические товары | Ваш платёжный провайдер, без сбора магазина | Apple Pay или карты, без сбора магазина | Apple Pay или карты, без сбора магазина |
| Цифровые товары | Ваша оплата, без сбора магазина | Покупка внутри приложения и её комиссия | Покупка внутри приложения и её комиссия |
| Присутствие в магазинах | Google Play через оболочку; в App Store нет | Оба | Оба |
| Исправление доходит до людей | При следующем визите | После проверки и обновления | После проверки и обновления |
| Кодовых баз поддерживать | Одну, общую с сайтом | Одну плюс работа с платформами | Две |
Читайте сверху вниз и остановитесь на первой строке, без которой продукт не обойдётся. Приложение для сотрудников, отслеживающее маршруты в фоне, исключает PWA одной этой строкой. У каталога с нечастыми заказами такой строки обычно нет, и ему чаще всего хватает PWA или хорошего сайта.
Один случай требует более внимательного взгляда: Apple Pay внутри установленного веб-приложения. Мы не нашли ясного ответа в документации Apple и WebKit, поэтому проверьте его на настоящем iPhone со своим платёжным провайдером, прежде чем обещать клиентам.
ВТОРАЯ БАЗА
Во что обходится поддержка
За пять лет эти варианты различает прежде всего список обязанностей, который никогда не заканчивается:
| Постоянная обязанность | PWA | React Native или Flutter | Натив |
|---|---|---|---|
| Ежегодное требование магазинов к SDK | Нет | Один проект, два магазина | Два проекта, два магазина |
| Обновление фреймворков | Только вашего сайта | Раз в несколько месяцев, по графику | Библиотеки на каждой платформе |
| Ключи подписи и аккаунты в магазинах | Нет | Оба магазина | Оба магазина |
| Старые версии на руках | Нет: у всех текущая | API должен их обслуживать | API должен их обслуживать |
| Новая функция | Делается один раз | Один раз плюс работа с платформами | Дважды, и два релиза |
Сроки вполне конкретные. С 28 апреля 2026 года всё, что загружается в App Store Connect, должно быть собрано в Xcode 26 с iOS 26 SDK или новее, а с 9 сентября 2026 года поддерживать iOS 13 или новее как минимальную (Apple). С 31 августа 2026 года новые приложения и обновления в Google Play должны быть нацелены на Android 16, API level 36. Существующие приложения должны были достичь API level 35 к той же дате, с отсрочкой до 1 ноября по запросу, иначе пользователи новых версий Android их не находят (Google). Приложение, которое никто не обновляет, рано или поздно не сможет выпустить даже мелкое исправление.
Готовое приложение стареет, даже когда к нему никто не прикасается.
Самый наглядный наш пример это LavShash. Мы построили как одну систему сайт ресторана, гастромаркет и нативные приложения доставки для iOS и Android. Затем планы клиента изменились, и запуск отложили. Спустя пять лет перед новым запуском системе потребуется серьёзная доработка, потому что платформы, требования магазинов и привычки клиентов успели измениться. Приложения были закончены, а работу создало одно только время.
Универсальный процент на поддержку мы не называем: надёжного источника для него у нас нет, а работа отличается от продукта к продукту. Попросите любого подрядчика внести перечисленные обязанности в предложение с часами напротив каждой. При ставке мобильного разработчика от $45 до $65 в час вы посчитаете этот список сами. Аккаунтам в магазинах, ключам подписи и почте для восстановления тоже нужен названный владелец, об этом статья Чем ты реально владеешь, а что арендуешь: Digital Ownership Audit; чаще всего аккаунты принадлежат клиенту, и мы публикуем под ними.
КАК МЫ РЕШАЕМ
Как мы принимаем решение
Нативные приложения мы пишем на Swift и Kotlin, кроссплатформенные на React Native, и ни один из этих вариантов не выбран у нас по умолчанию. Два наших проекта показывают, насколько по-разному это может обернуться.
В LavShash доставка получила нативные приложения для iOS и Android, а ресторан и маркет остались в вебе: место в телефоне зарабатывает повторяющееся действие, то есть очередной заказ ужина. Логика подробно разобрана в статье Ресторан, интернет-магазин и доставка: одна система или три продукта?. В MEDPRESSO, платформе непрерывного медицинского образования, контент, логика сертификации и аккаунты уже жили в платформе, поэтому приложение, готовое к выпуску, стало более удобным интерфейсом для врачей между сменами, без собственных данных.
Порядок работы, который мы предлагаем:
- Запишите самое сложное требование одним предложением и найдите его строку в таблице выше.
- Проверьте поведение раньше платформы. Если сомнение в том, вернутся ли клиенты, PWA или небольшая первая версия ответит на него дешевле. Об этом статья MVP, это не минимальный продукт. Это цена входа., а доля установок и подписок на уведомления в PWA будет реальным доказательством.
- Держите логику за API. Каталог, заказы, аккаунты и админ-панель остаются на сервере, поэтому рядом с PWA позже можно добавить нативное приложение без второй системы. Новый продукт такого рода относится к услуге Разработка веб-приложений и SaaS, от $25 000; отдельной строки в прайсе для добавления PWA к существующему сайту нет, цена зависит от сайта.
- Выбирайте на discovery, с причинами на бумаге. Наша Discovery-фаза проекта занимает от двух до четырёх недель, стоит от $4 000 и даёт кликабельный прототип, выбор между нативом и React Native с обоснованием и оценку.
- Считайте бюджет на всю систему. Разработка приложений начинается от $30 000, полное приложение обычно занимает от 10 до 20 недель; цену двигают платформы, экраны, интеграции и бэкенд. Дизайн, бэкенд, админ-панель и приложения мы делаем сами вокруг логики вашего бизнеса, а код передаётся вам по договору.
Самый ранний шаг это стратегическая сессия: от двух до трёх часов с основателем, с подготовкой заранее, $500, которые засчитываются в проект в течение 30 дней.
FAQ
Частые вопросы
Может ли PWA присылать пуш-уведомления на iPhone?
Да, начиная с iOS и iPadOS 16.4, но только после того, как человек добавит её на экран «Домой», и запрос разрешения должен следовать за нажатием. Сайт в обычной вкладке Safari спросить не может. На Android пуш работает в браузере без установки.
Можно ли разместить PWA в App Store или Google Play?
В Google Play можно, через Trusted Web Activity, и тогда на неё действуют платёжные правила Play. В App Store обёрнутый сайт должен пройти правило 4.2, которое требует большего, чем перепакованный сайт, поэтому нужна реальная нативная ценность.
React Native или Flutter: что выбрать бизнесу?
Оба дают одну кодовую базу на две платформы. React Native использует представления самой платформы и JavaScript или TypeScript, Flutter рисует собственные виджеты и использует Dart. В проектах приложений мы используем React Native, а Flutter-разработчиков подключаем к MVP и существующим приложениям на Flutter; в любом случае спросите, кто будет поддерживать выбранный вариант.
Берут ли магазины комиссию с заказов еды и физических товаров?
Нет. Apple требует для физических товаров и услуг, потребляемых вне приложения, способ оплаты, отличный от покупки внутри приложения, а биллинг Google Play для них использовать нельзя. Вы платите только платёжному провайдеру. Комиссии относятся к цифровым товарам и подпискам.
Можно начать с PWA, а нативное приложение добавить потом?
Да, если бизнес-логика с самого начала находится за API. Каталог, аккаунты, заказы и админ-панель остаются на месте, а приложение становится ещё одним интерфейсом. Заново вы делаете слой интерфейса и получаете обязанности перед магазинами.
Сколько стоит каждый вариант в Peretz Agency?
Нативные приложения и приложения на React Native начинаются от $30 000 и обычно занимают от 10 до 20 недель. Новое веб-приложение начинается от $25 000. Мобильный разработчик в вашей команде стоит от $45 до $65 в час. Все цены есть на нашей странице цен.
Источники
- WebKit: Web Push for Web Apps on iOS and iPadOS (февраль 2023)
- WebKit: Updates to Storage Policy (август 2023)
- Can I use: Push API, Background Sync, Web Bluetooth, Web NFC
- Apple: App Store Review Guidelines
- Google Play: Service fees
Подрядчики спорят о PWA, нативе и кроссплатформе? Давайте посмотрим, что вашему продукту нужно от телефона.
Раз в неделю одно уведомление с новыми статьями PERETZ. Ничего лишнего.