Для большинства сервисов, где основа — каталог, формы, заказы, личный кабинет и уведомления, хватает PWA: адаптивного веб-приложения, которое можно поставить на экран телефона и которое частично работает без сети. Нативное приложение нужно, когда сервису необходимы фоновая работа, глубокий доступ к устройству или присутствие в магазине приложений как отдельный канал привлечения.

Мы делаем адаптивные веб-сервисы и PWA, нативные приложения для iOS и Android не делаем. Поэтому статья написана как разбор для того, кто решает, а не как реклама одного из вариантов: в конце есть вопросы, которые стоит задать любому подрядчику, и порядок, как не потерять деньги при ошибке выбора.

Коротко. PWA подходит, когда сервис держится на данных, формах и уведомлениях и приходит к людям по ссылке. Нативное приложение нужно при фоновой работе, сложном доступе к устройству и необходимости быть в магазине. Выбор безопаснее начинать с общей серверной части: тогда ошибка стоит одного клиентского слоя, а не всей системы.

Что такое PWA и чем оно отличается от сайта и от приложения

PWA (прогрессивное веб-приложение) — это обычное веб-приложение с тремя добавками: файл-описание, по которому браузер предлагает установить его на экран; служебный скрипт (service worker), который хранит часть страниц и данных на устройстве; и работа по защищённому соединению. Оно открывается по ссылке, не требует магазина и обновляется на сервере, а выглядит и ведёт себя близко к приложению.

СвойствоОбычный сайтPWAНативное приложение
Как получитьСсылкаСсылка, затем установка на экран по желаниюМагазин приложений, проверка магазином
ОфлайнНетЧастично: кэш страниц и данных, очередь действийПолноценно, если предусмотрено
УведомленияНетЕсть, с ограничениями на некоторых системахЕсть, полный набор
Доступ к устройствуМинимум: камера, геолокация по запросуТо же, что у браузера; часть возможностей недоступнаШирокий, включая фоновые режимы
ОбновлениеСразу у всехСразу у всех, но нужна стратегия смены кэшаЧерез магазин, не все обновляют сразу
КодОдинОдинОтдельный на каждую систему или кросс-платформенный слой
Присутствие в магазинеНетОбычно нетЕсть

Из таблицы видно главное: у PWA и обычного сайта один код и один канал распространения, а различие в степени «приложения». Если вам нужен просто адаптивный сервис, начните с веб-сервиса, а PWA добавьте поверх, когда понадобится установка и офлайн.

Что PWA умеет в продакшене

Заявленные возможности стоит делить на те, что работают надёжно, и те, что зависят от браузера и системы.

  • Установка на экран. Значок, запуск без адресной строки, отдельное окно. Способ установки различается на Android и iOS, и подсказывать его пользователю приходится самому интерфейсу.
  • Офлайн-чтение. Справочники, расписания, ранее открытые карточки, билеты и инструкции доступны без сети. Это самое надёжное применение.
  • Офлайн-запись. Действие сохраняется на устройстве и уходит на сервер, когда сеть вернётся. Это сложнее: нужны очередь, повтор без дублей и правило для конфликтов, если данные на сервере изменились.
  • Уведомления. Работают, но условия зависят от системы и версии. На части устройств они доступны только установленному на экран приложению и требуют согласия пользователя. Проверять нужно на устройствах вашей аудитории, а не в документации.
  • Камера, геолокация, файлы, голосовой ввод. Доступны через браузер с запросом разрешения. Для сканирования кодов и фото документов обычно достаточно.

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

Чего PWA не умеет или умеет с оговорками

Предел определяется тем, что браузер не отдаёт веб-приложению. Если ваш сервис упирается в строки ниже, нативное приложение, скорее всего, нужно.

ВозможностьPWAНативное приложениеКак это проверить
Постоянная работа в фонеОграничена: система усыпляет страницуЕсть, в рамках правил системыНужна ли работа при выключенном экране
Непрерывное отслеживание геолокацииТолько пока приложение открытоЕсть, с разрешением пользователяЧто сломается, если точка не отправляется минуту
Bluetooth, NFC и датчикиЧастично и не на всех системахШирокий доступКакое устройство подключается и какая у него модель
Присутствие в магазинеНетЕстьПриходят ли ваши клиенты через поиск по магазину
Оплата и подписка через магазинНетЕсть, по правилам магазинаКак именно вы собираетесь принимать деньги
Интеграция с системойМинимумВиджеты, звонки, ярлыки, сканерыНужен ли сервис на экране блокировки и в звонках
Скорость сложной графикиЗависит от браузераВыше, ближе к устройствуИгра, редактор видео, карта с очень большим числом объектов

Одна строка не всегда решает выбор. Чаще разумно пойти поэтапно: PWA на первых пользователях, а нативное приложение, если упёрлись в предел и это подтверждено поведением людей, а не предположением.

Что выбрать по типу сервиса

Ниже условные типы сервисов и вывод для каждого. Это отправная точка для обсуждения, а не приговор: на обследовании список возможностей проверяется на вашей аудитории.

Тип сервисаЧто выбратьПочемуЧто проверить
Личный кабинет клиента или партнёраPWA или адаптивный вебДанные, заказы, документы, уведомления; люди приходят по ссылке из письма или сообщенияНужна ли установка на экран вообще
Каталог и заказPWAПокупатель приходит из поиска и рассылки, магазин приложений для него лишний шагКакая доля заказов с телефона
Запись и бронированиеPWAКороткий сценарий, напоминания, возврат по ссылкеДоходят ли уведомления до вашей аудитории
Контент и лентаPWAОфлайн-чтение и быстрые страницыНужен ли фон для загрузки материалов
Полевая работа с формамиPWA с офлайн-записьюДанные вводятся без сети и синхронизируются позжеКонфликты правок и размер вложений
Курьеры и водители с трекомНативноеНужна непрерывная геолокация при выключенном экранеДопустим ли пропуск точек
Устройства по Bluetooth и NFCНативноеДоступ к оборудованию ограничен в браузереКакие модели устройств и систем
Игры и тяжёлая графикаНативноеСкорость и доступ к ресурсам устройстваТребования к скорости

Сервис с подпиской для частных лиц тоже обычно начинается с веб-версии: способ оплаты и условия доступа проще настроить на своём сервере. Подробнее о подписке в статье «Подписка в B2C-сервисе».

Каналы и аудитория: откуда придут пользователи

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

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

PWA индексируется как обычный сайт: адреса страниц остаются теми же, поисковые системы их видят. Для каталога и контента это даёт органический трафик, которого у нативного приложения нет. Важное условие: содержимое страниц должно отдаваться сервером, а не собираться на устройстве только после загрузки скриптов.

Офлайн: что стоит делать, а что нет

Слово «офлайн» объединяет три разные задачи, и у каждой своя цена.

ЗадачаПримерЧто нужноГлавный риск
Показать то, что уже открывалиБилет, инструкция, расписаниеКэш страниц и данных, понятная метка «данные на такое-то время»Показ устаревших данных без пометки
Принять действие без сетиЗаполнить форму на объектеЛокальное хранилище, очередь отправки, повтор без дублейПотеря данных, если хранилище очищено до отправки
Работать полностью без сетиРедактировать общие данные нескольких людейПравила слияния конфликтов, версии записейКонфликт правок, который не может решить компьютер

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

Стоимость владения: что платите после запуска

Разница в цене разработки видна сразу, а разница в цене владения проявляется позже. Суммы мы не называем: они зависят от состава функций, но структура расходов у вариантов различается.

  • PWA. Один код, обновления без магазина. Платите вниманием к кэшу: после выпуска новой версии часть людей может ещё какое-то время видеть старую, поэтому нужна понятная стратегия обновления и принудительная замена при критичных изменениях.
  • Нативное приложение. Отдельная сборка на каждую систему или кросс-платформенный слой, публикация и проверка магазином, поддержка устаревающих версий систем, учётные записи разработчика в магазинах. Часть пользователей будет сидеть на старых версиях, и сервер должен их обслуживать.
  • Серверная часть. Нужна в обоих случаях, и её лучше проектировать как общий программный интерфейс. Тогда клиентский слой можно заменить или дополнить, не трогая сервер. Как это делается, описано в статье «Проектирование API для интеграций».

Полную картину владения вместе с обслуживанием даёт подход из статьи о стоимости владения ИТ-системой.

Как проверить выбор до больших затрат

  1. Составьте список обязательных возможностей. Для каждой запишите, что случится, если её не будет. Строки, на которые ответ «сервис не работает», решают выбор.
  2. Проверьте на устройствах вашей аудитории. Не на новых флагманах разработчика, а на тех, что есть у ваших клиентов или сотрудников: уведомления, установка, офлайн и камера.
  3. Соберите прототип одного сценария. Не весь сервис, а путь пользователя от входа до результата. Дайте его десяти-пятнадцати людям из аудитории и посмотрите, где они останавливаются.
  4. Договоритесь о показателе перехода. Например: если треть пользователей просит возможность, которой PWA не даёт, начинаем нативное приложение. Показатель выбирается до запуска, иначе споры идут по ощущениям.
  5. Начните с общей серверной части. Права, логика и данные живут на сервере, клиент тонкий. Тогда переход к нативному приложению стоит клиентского слоя, а не переписывания системы.

Задание для подрядчика, предлагающего приложение, формулируйте по схеме из статьи «Как составить техническое задание на разработку».

Что делаем мы и с чего начать

Начинаем с обследования: 200 000 ₽ и 2–3 недели за один-два процесса, 350 000 ₽ и 3–4 недели, если сервис связан с несколькими системами. На выходе список возможностей с разбором, что из них закрывается PWA, и вилка бюджета. Стоимость вычитается из первого этапа, если продолжаете с нами, а документ пригодится и без нас. Остановиться можно после любой ступени, исходники лежат в вашем репозитории с первого коммита.

Мы делаем адаптивный веб-сервис и PWA, серверную часть и интеграции. Нативные приложения для iOS и Android не делаем, но серверную часть проектируем так, чтобы к ней можно было подключить приложение другого подрядчика. Круглосуточно не дежурим. Описание подхода к веб-сервису с геолокацией и обновлениями в реальном времени — на странице «Real-time сервис с геолокацией», а цены и сроки — на странице «Тарифы».

Частые вопросы

Что такое PWA простыми словами?

Это веб-приложение, которое браузер позволяет установить на экран телефона и которое частично работает без сети. Оно открывается по ссылке, обновляется на сервере и не требует публикации в магазине приложений.

PWA дешевле нативного приложения?

Разработка PWA обычно дешевле, потому что код один и не нужна публикация в магазинах. Но сравнивать нужно стоимость владения и список возможностей: если без фоновой геолокации сервис не работает, дешёвое решение не решает задачу.

Работает ли PWA на iPhone?

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

Можно ли разместить PWA в магазине приложений?

Иногда его оборачивают в оболочку и публикуют, но это отдельная работа с правилами магазина, и она превращает PWA в нативное приложение по процессу. Мы такие приложения не делаем.

Нужен ли PWA интернет?

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

Видят ли поисковые системы PWA?

Видят как обычный сайт, если содержимое страниц отдаёт сервер, а адреса страниц постоянные. Для каталога и контента это даёт трафик из поиска, которого у нативного приложения нет.

Что делать, если сначала нужен PWA, а потом приложение?

Проектировать серверную часть как общий программный интерфейс с правами на сервере. Тогда нативное приложение подключается как ещё один клиент, а логика не переписывается. Само приложение вам сделает другой подрядчик.

Входит ли PWA в ваши услуги?

Да, как часть веб-сервиса: адаптивный интерфейс, установка на экран, офлайн для выбранных сценариев. Нативные приложения для iOS и Android мы не делаем.