Как обновить pwa приложение
С помощью сотрудника службы прогрессивные веб-приложения (PWAs) могут работать в фоновом режиме, когда пользователи даже не используют приложение. Раньше это было зарезервировано для родных приложений, но теперь также доступно для PWAs, что делает возможным улучшение автономного использования.
Рассмотрим следующие случаи использования:
Все три случая использования возможны с помощью API с помощью API фоновой синхронизации, периодической синхронизации фона и API для получения фона.
Хотя эти API имеют похожие имена, они отличаются по своему характеру.
Синхронизация данных с сервером с API фоновой синхронизации
Другой пример использования API фоновой синхронизации — загрузка контента в фоновом режиме для пользователя.
API фоновой синхронизации должен использоваться для небольших объемов данных. Это требует, чтобы рабочий службы был жив в течение всего срока передачи данных. Поскольку устройства могут принять решение о прекращении работы служб для сохранения времени автономной работы, API не следует использовать для получения больших файлов. Вместо этого используйте API для получения фона.
Проверка поддержки
Этот API доступен в Microsoft Edge, но необходимо убедиться, что он поддерживается в других браузерах и устройствах, в которые запускается ваше приложение. Это можно сделать, проверяя, есть ли у объекта ServiceWorkerRegistration sync свойство:
Дополнительные информацию об ServiceWorkerRegistration интерфейсе см. в документации ServiceWorkerRegistration.
Запрос синхронизации
Первое, что нужно сделать, это запросить синхронизацию. Это можно сделать с помощью передней панели приложения или сотрудника службы.
- Запрос синхронизации из интерфейса хорош, если вы хотите оставить пользователя, отвечающий за синхронизацию позже или нет.
- Запрос синхронизации у сотрудника службы хорош, если вы хотите, чтобы она была прозрачной для пользователя. В этом случае сотрудник службы может сразу же обнаружить неудачный запрос на извлечение и запросить синхронизацию.
Чтобы запросить синхронизацию, необходимо ServiceWorkerRegistration имя тега и имя тега. Из переднего кода приложения сделайте следующее:
Или, от сотрудника службы, сделайте это вместо этого:
Строка выше должна быть уникальным тегом, который определяет этот запрос синхронизации, чтобы можно было сделать my-tag-name несколько запросов.
React к событию синхронизации
После использования подключения и запуска сотрудника службы сотруднику службы отправляется событие, которое может использовать его для синхронизации sync необходимых данных. Событие sync можно прослушивать с помощью следующего кода:
Как правило, функция отправляет на сервер сведения, которые не могли быть отправлены, когда пользователь doTheWork был отключен. Возможно, будет полезно хранить эти сведения в хранилище IndexedDB из передней панели, чтобы впоследствии ее можно было получить у сотрудника службы при doTheWork выполнении.
Дополнительные сведения о событии, интерфейсе и интерфейсе см. в спецификации проекта синхронизации фона и документации Sync ServiceWorkerRegistration SyncManager API фоновой синхронизации.
Демонстрация PWA
Мой список PWA — это демо-приложение, использующее API фоновой синхронизации для получения сведений о кино позже, если пользователь отключен.
Чтобы проверить эту функцию:
Поиск фильмов с помощью поля ввода поиска.
Перейдите в автономный режим.
- Выберите F12 для открытия DevTools.
- Выберите **** > сотрудников службы приложенийв > автономном режиме.
Выберите дополнительные сведения в одном из результатов фильма.
Перейдите в Интернет, снова выбрав автономный режим в DevTools.
Перезагрузить приложение. Теперь отображаются сведения о фильме.
Для примера кода перейдите в исходный код GitHub.
Отладка фоновых синхронизаций с DevTools
Вам не нужно ходить в автономном режиме, а затем в Интернете, и ждать, пока Microsoft Edge, чтобы вызвать событие для проверки кода синхронизации фона, как sync DevTools позволяет имитировать это событие.
Для имитации sync события:
- Откройте DevTools (F12).
- Выберите **** > сотрудников службы приложений.
- Введите имя тега, используемого при регистрации синхронизации в поле ввода Sync.
- Выберите кнопку Синхронизация.
Вы также можете войти в журнал действий фоновой синхронизации, созданных вашим приложением в DevTools.
- Откройте DevTools (F12).
- Выберите **** > фоновую синхронизацию приложений.
- Выберите события начала записи.
В таблице журнала событий отображаются регистрации и отправки синхронизации.
Регулярно получать свежий контент с API периодической фоновой синхронизации
API периодической фоновой синхронизации позволяет PWAs периодически получать свежий контент в фоновом режиме, чтобы пользователи могли немедленно получить к нему доступ, когда они позже откроют приложение снова. Используя этот API, PWAs не должны загружать новый контент (например, новые статьи), пока пользователь использует приложение, которое может замедлить процесс работы, а вместо этого извлекать его в более удобное время.
Периодическая синхронизация происходит только в том случае, если устройство находится в известной сети (например, к ней уже было подключено ранее), и Microsoft Edge ограничивает частоту синхронизации в соответствие с тем, сколько человек использует приложение.
Проверка поддержки
Чтобы проверить, поддерживается ли этот API в браузерах и устройствах, в которые запускается ваше приложение, проверьте, есть ли у объекта ServiceWorkerRegistration periodicSync свойство:
Запрос разрешения пользователя
Периодическая синхронизация фона требует разрешения пользователя. Это произойдет только один раз в приложении и будет сделано с помощью API разрешений.
Чтобы зарегистрировать периодическую синхронизацию, необходимо определить минимальный интервал и уникальное имя тега (чтобы можно было зарегистрировать несколько периодических фоновых синхронизаций).
Используется minInterval в коде выше соответствует 1 день в миллисекунд. Это минимальный интервал, и Microsoft Edge учитывать другие факторы, прежде чем оповещать сотрудника службы о периодических событиях синхронизации, таких как сетевое подключение и регулярно ли пользователь работает с приложением.
React периодические события синхронизации
Когда Microsoft Edge решает, что это хорошее время для запуска периодической синхронизации, оно отправляет событие сотруднику periodicsync службы. Вы можете обрабатывать событие с помощью того же имени тега, указанного при регистрации синхронизации.
Это функция, в которой сотрудник службы может получать новое содержимое с getDailyNewsInCache сервера и хранить его в кэше. Ожидается, что эта функция возвращает обещание, которое сигнализирует, если синхронизация была успешной или не удалось.
Дополнительные сведения о событии, интерфейсе и интерфейсе см. в спецификации проекта синхронизации фонового фона Веб-периодического периода и документации API фоновой PeriodicSync ServiceWorkerRegistration PeriodicSyncManager синхронизации веб-периодов.
Демонстрация PWA
DevTools Советы — это PWA, использующий API периодической фоновой синхронизации. Он ежедневно получает советы по новым средствам разработки и хранит их в кэше, чтобы пользователи могли получать к ним доступ при следующем открываемом приложении, независимо от того, находятся ли они в сети или нет.
Перейдите к исходным кодам GitHub. В частности, приложение регистрирует периодическую синхронизацию в функции registerPeriodicSync. Код сотрудника службы — это место, где приложение прослушивает periodicsync событие.
Отладка периодических фоновых синхронизаций с DevTools
Вы можете использовать DevTools для periodicsync имитации событий, а не для ожидания минимального интервала.
Для имитации события:
- Откройте DevTools (F12).
- Выберите **** > сотрудников службы приложений.
- Введите имя тега, используемого при регистрации периодической синхронизации в поле ввода Periodic Sync.
- Выберите кнопку Периодическая синхронизация.
Вы также можете войти в журнал периодических действий синхронизации фона, созданных вашим приложением в DevTools.
- Откройте DevTools (F12).
- Выберите **** > периодическую фоновую синхронизацию приложений.
- Выберите события начала записи.
Периодические регистрации синхронизации и отправки отображаются в таблице журнала событий.
Извлечение больших файлов, когда приложение или сотрудник службы не работают с API background Fetch
API для получения фона позволяет PWAs полностью делегировать загрузку больших объемов данных в двигатель браузера. Таким образом, во время загрузки не нужно запускать приложение и сотрудника службы.
Этот API полезен для приложений, которые могут загружать большие файлы (например, музыку, фильмы или подкасты) для автономных случаев использования. Так как загрузка делегирована в браузерный движок, который знает, как обрабатывать отламывное подключение или даже полную потерю подключения, он может приостановить и возобновить загрузку при необходимости.
Проверка поддержки
Чтобы проверить, поддерживается ли этот API, проверьте, существует ли конструктор BackgroundFetchManager на глобальном объекте:
Запуск фонового получения
Чтобы начать фоновое извлечение:
Выше должен быть уникальный идентификатор строки для my-download-id этого фонового получения. fileUrls это список файлов для скачивания, это будет массив URL-адресов строки. Это объект, который можно использовать для настройки внешнего вида действия options загрузки в браузере.
Дополнительные сведения о функции можно найти в документации fetch BackgroundFetchManager.fetch() и на сайте Introducing Background Fetch.
Повторное вовлечение пользователей с помощью уведомлений и значков
Используйте API уведомлений и приложений, чтобы пользователи знали, что фоновые задачи, загрузки или свежий контент завершены, не прерывая их рабочий процесс. Использование уведомлений и значков может увеличить повторное взаимодействие пользователя с приложением.
С Microsoft Edge уведомления интегрируются с центром системных уведомлений, а значки отображаются на значках приложений в панели задач.
Говорят, чтобы статья была максимально полезной, она должна быть понятна даже твоему деду, который до сих пор не понимает чем вы там занимаетесь в своих “интырнетах”. Исходя из этого, я решил довольно простым языком расписать “Что такое PWA и нахрен оно вообще нужно?”. Поэтому, если тебе не удалось с первого раза разобраться с этой неведомой штукой, в этой статье будет всё, чтобы решить это раз и навсегда.
Цель статьи:
Я не буду подробно разжевывать тебе о PWA, так как на эту тему написано уже много статей.
Моя цель — простым языком дать основную информацию, которой тебе хватит, чтобы понимать что такое PWA. Потом показать реальный пример, которым забетонируем всё, что ты усвоил.
После прочтения ты будешь понимать следующее:
- Возможности и преимущества.
- Основные понятия.
- Настройка PWA.
- Как обновлять кэш.
А ну и еще, я настоятельно рекомендую взять сейчас ноутбук и повторять всё, что я буду делать. Иначе, информация вылетит из головы.
На этом вводная часть закончена, переходим к основной части.
Не просто верстка. Что нужно знать, чтобы верстать ХОРОШО?
Как и почему хорошая верстка напрямую влияет на качество продукта. Лучшие практики, чтобы повысить качество верстки.
Я подготовил несколько логически связанных пунктов, которыми попробую описать всю картину.
Технология PWA была анонсирована компанией Google в 2015 году. Она позиционирует себя как дополнительная надстройка, которая позволяет сделать из сайта подобие мобильного приложения.
При этом внутренности никакие не меняются, не трансформируются, сайт остаётся тем же, трансформируется только браузер.
Какие возможности предоставялет PWA?
- Отправка уведомлений, кэширование контента и установка ярлыка на рабочий стол;
- Отправка уведомлений в виде всплывающего окна, в котором можно оповещать пользователя о чем-либо;
- Работа в автономном режиме, то есть в отсутствие интернет-соединения, благодаря кэшированию контента.
Пару слов о преимуществах
Хотите разработать мобильное приложение? Уверены?
Преимущества и недостатки PWA для бизнеса в сравнении с мобльным приложением.
Не приятные моменты
Думаю, этого вполне достаточно, чтобы уже представить что такое PWA. Ну а если мало, можно почитать тут
Service Worker — Это по сути файл со скриптами, который отвечает за всю эту магию. Все запросы браузера идут через него, что даёт кучу возможностей, например, если отсутствует соединение с интернетом возвращает контент из кэша(если он конечно там есть).
В нем мы обрабатываем различные события, запись, удаление файлов из кэша и многое другое.
Скрипты работают в фоновом режиме, параллельно с приложением.
Manifest.json — Файл настроек. Там мы указывает какие иконки использовать, какой текст отображать в ярлыке, в каком формате открывать окно браузера и тд. Более подробно поговорим о нём чуть ниже.
Application Shell — Так называют оболочку для PWA. А если конкретнее, это браузер, который слегка трансформируется, чтобы дать больше возможностей разработчику.
Push Notifications — технология для отправки push-уведомлений.
А настроить её на самом деле очень просто, и чтобы это доказать, давай сразу перейдем к написанию кода, так будет проще. Погнали!
Итак, начнем с создания папки для проекта, назовем её PWA. Далее в эту папку добавим index.html, в котором будет вот такой код
Верстку я уже подготовил, но пока без стилей это выглядит плохо, поэтому добавим и их. Создаём папку css, в которую добавляем файл styles.css и вставляем в него код ниже
Конечно же, подключаем этот файл в index.html, в тэг <head>…</head>
Давай сразу подключим нужные картинки, которые можно скачать тут. Перейдешь по ссылке, там будет кнопка Clone or download, зеленая такая, жмешь её, потом кликаешь Download ZIP. Скачается архив, в нем и будут картинки в папке images. Фух, думаю довольно доступно объяснил
Открываешь проект, создаешь там директорию images, куда вставляешь все картинки. Далее открываешь index.html и вставляешь в тэг <head>…</head> мета информацию. Что это и зачем, можешь почитать тут.
В итоге, в файле index.html должна быть вот такая структура
Теперь остаётся запустить и посмотреть, что получилось. Я тут нашел очень удобный экстеншн Web Server for Chrome, который запускает локальный сервер, его нужно установить, он нам понадобится далее. Там ничего сложно, просто укажи папку с проектом, где лежит index.html, он сам всё сделает. Копируешь ссылку и вставляешь в браузер.
И вот что у нас получилось. Я бы не сказал, что это шЭдЭвр, но как по мне нормально!
Ну слушай, самое сложное, считай, мы сделали, давай-ка теперь посмотрим, что думает google валидация о нашей работе. Для этого нажми f12 и перейди во вкладку Lighthouse (раньше было Audits), там будет синяя кнопка Generate report, тыкай.
После того, как пройдет процесс валидации, мы увидим следующую картину: пункт отвечающий за PWA будет серым. Это говорит о том, что у нас отсутствуют настройки.
И если проскроллить ниже, можно увидеть рекомендации, которые нужно выполнить, чтобы PWA работало как часы.
Вкладка Lighthouse поможет тебе отслеживать все ошибки при настройки PWA.
Ну вот, наконец-то мы дошли до самого интересного.
Для начала нужно создать файл manifest.json в корне проекта. В него мы добавляем следующие метаданные:
- name — Полное название. Используется в ярлыке приложения
- short_name — Сокращенное название, будет задействовано там, где полное имя не будет помещаться
- icons — Список иконок, которые будут отображаться в ярлыке установленного приложения.
- lang — Язык по умолчанию
- start_url — Обязательный параметр. Он говорит приложению с какого файла нужно стартовать. При открытии приложения, браузер будет всегда открывать эту страницу
- display — Говорит о том, в каком формате открывать окно браузера.
- background_color — Это свойство используется на экране заставки при первом запуске приложения на мобильном устройстве.
- theme_color — Задает цвет панели инструментов и может быть отражен в предварительном просмотре приложения в переключателях задач. theme_color должен соответствовать цвету мета-темы, указанному в заголовке документа. В Нашем случае так <meta name=”theme-color” content=”black” />
Этого пока достаточно. Вот тут есть описание всех свойств этого файла, как будет время, почитай обязательно.
Подключаем manifest.json в index.html в тэг <head>…</head>
Приступаем к написанию скриптов. Создаем папку c названием js, в которую добавляем файл main.js с вот таким кодом:
Пару слов о том, что там происходит.
- Как только страница загрузилась, проверяем, поддерживает ли браузер serviceWorker, и если успешно, то идём дальше.
- Далее регистрируем наш файл sw.js(который еще предстоит настроить). Ничего необычного.
Подключаем cкрипты в index.html, но уже не в тэг <head>…</head>, а перед закрывающим тэгом </body>.
Ну теперь давай создадим сам файл sw.js. В нем будет храниться вся логика для Service Worker. Создаем его в корне проекта, и первой строкой добавим туда название кэша.
Следующей строкой добавим переменную includeToCache. В ней мы указываем файлы, которые нужно закэшировать. Да, я понимаю, что не удобно, приходится руками прописывать все файлы, но имеем то, что имеем. Зато мы всегда будем уверены, что ничего лишнего не кэшируется. Экономия трафика и стабильность.
Следующими идут события. Service Worker имеет несколько событий под капотом, их ещё называют жизненные циклы. И первое из них - это install. Оно срабатывает только один раз при записи кэша.
Событие fetch. Это событие просматривает все запросы, и если что-то совпадает с тем, что лежит в кэше, отдает совпадение из кэша. Иначе, отдает то, что приходит с сервера.
Метод respondWith, который дословно переводится “Ответь с помощью…”, как раз и отвечает за выдачу данных из кэша или тех, что вернул сервер. А если сервер ничего не вернул, то берем из кэша.
Продолжаем движение по боковой навигационной панели, находим выпадающий список с названием Cache Storage, где собственно и хранится наш кэш. Если на него нажать, можно увидеть какие файлы и контент были закэшированны.
Теперь, если отключить интернет и перезагрузить страницу, сайт будет работать.
Подведём итоги. Для того, чтобы заставить сайт работать при отсутствии интернета, не нужно устанавливать никакие фреймворки, добавлять библиотеки и прочее. Достаточно нескольких строк кода и общего понимания этой технологии.
Первая проблема, с которая я столкнулся, разбираясь с PWA, была связана с обновлением старого кэша. Но, как оказалось, это решается очень просто.
Давай поменяем парочку стилей, чтобы было видно что, что-то изменилось. Обновим страницу, убедимся что стили поменялись на странице. Обрубим соединение с интернетом, ещё раз перезагрузим страницу, но почему-то кэш не обновился, и мы видим старую версию сайта.
Решение выглядит следующим образом. В файл sw.js добавляем событие activate, при вызове которого, будем проверять имя старого и нового кэша, и если имена отличаются, то удаляем старый и добавляем новый. Да, чтобы кэш обновлялся, нам нужно менять его название при каждом обновлении кода.
В начале я не зря в имени кэша указал постфикс *_v1, это и будет его версией. На самом деле не важно, как называть, главное, чтобы имена отличались.
Если почитать код, можно увидеть условие, где сравниваются имена кэшей, и если они не совпадают, старый кэш удаляется.
Теперь кэш будет обновляться сразу после регистрации нового воркера. Добавляем его в событие install.
И в файле main.js добавим функцию update, которая при каждой перезагрузке страницы будет запускать обновление кэша.
Добавляем над методом console.log(). На самом деле не важно, главное чтобы в коллбэке .then()
Вот и всё, перезагружаем страницу. Снова открываем инструменты разработчика, ставим галочку offline в табе Service Workers на боковой панели, ещё раз перезагружаем страницу и наблюдаем за вкладкой Cache Storage. Там можно будет увидеть, как старый кэш сменится новым.
Хочу предупредить, может понадобиться несколько раз перезагрузить страницу, так как на установку нового воркера тоже требуется время (около 2 мин обычно).
Прочитав эту статью, вы поймете:
Преимущества и недостатки PWA.
Как настроить эту технологию на вашем сайте.
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Как обновить кэш.
Преимущества и недостатки
Как и у любой технологии, у PWA есть свои преимущества и недостатки. Прежде чем рассказать о них, давайте разберемся, что такое PWA.
Технология PWA была анонсирована Google в 2015 году. Она позиционируется как дополнительная надстройка, позволяющее сделать сайт похожим на мобильное приложение. При этом интерфейс не меняется, не трансформируется, сайт остается прежним, трансформируется только браузер. Кроме того, вы должны знать, для какого типа бизнеса PWA является лучшим решением, чем мобильное приложение.
Что может PWA?
Отправка уведомлений, кэширование контента и установка ярлыка на рабочий стол;
Отправка уведомлений в виде всплывающего окна, где вы можете уведомить пользователя о чем-либо;
Работа в автономном режиме, то есть без подключения к Интернету, благодаря кешированию контента.
Преимущества PWA
PWA прост в установке. Вам не нужно искать магазины приложений, скачивать что-либо или танцевать с бубном. Просто откройте сайт, нажав на ссылку, появится окно «Установить ярлык на рабочий стол», установите его, и все готово.
Работает на всех более-менее современных устройствах, вам нужен только браузер.
Это позволяет сайту быть более доступным из-за ярлыка на рабочем столе. Вы разблокировали свой телефон, нажали на ярлык, и сайт открылся. Это классно.
Занимает меньше памяти, меньше 1 МБ.
Настройка PWA требует меньше времени на разработку, чем создание мобильного приложения. Нет необходимости писать два одинаковых приложения на Android и IOS. Поэтому это будет намного дешевле для бизнеса.
Стабильная работа. Если есть проблемы с интернетом, контент будет компенсирован из кэша, поэтому сайт всегда будет доступен.
Недостатки PWA
Существует неверное представление о том, что PWA помогает улучшить производительность SEO. Я не согласен с этим!
И чтобы быть более обоснованными, давайте убедимся в этом на реальном примере. Давайте возьмем сайт //madops.io, который является одностраничным приложением. Если вы посмотрите на него через view-source: //madops.io, вы увидите все, что я описал выше.
В других случаях, когда сервер отображает всю HTML-разметку одновременно, проблем не возникает, как, например, здесь view-source: //maddevs.io.
Есть еще некоторые браузеры, которые не поддерживают PWA. Например, push-уведомления на IOS.
Основная концепция
Прежде чем углубляться в настройку PWA, давайте разберемся с ее основными понятиями и компонентами.
В нем мы обрабатываем различные события, пишем, удаляем файлы из кеша и многое другое. Скрипты запускаются в фоновом режиме, параллельно с приложением.
Всем привет. на связи @GamblingProMax! Сегодня поговорим о масштабном обновлении PWA! Мы сделали все, чтобы максимально повысить траст юзера и увеличить конверт! Как? Читайте в статье!
🔥@GamblingPro_Cloaking_bot — переходи и получи мощные PWA-прилки с оптимизацией, которые хорошо живут
Трастовый URL под Google Play.
Одно из самых главных и заметных обновлений — это изменения URL, где находится наш фейковый стор Google Play. Раньше было:
То есть URL был dragonhitapp, а следом шли сабы. Во второй же версии все PWA приложения имеют домен, максимально похожий на оригинальную веб-версию Google Play:
Так мы еще больше увеличиваем доверие юзера, чтобы у него не было ни тени сомнения, что это не Google Play. С этим доменом еще больше увеличивается конверт из клика в инстал, так как раньше пользователи могли смущается, что это левый URL, а теперь смущения нет 🙂
Конструктор PWA.
Теперь создание PWA приложения занимает не более 5 минут! Вы можете просто скинуть нам дизайн для фейка Google Play, и мы создадим PWA менее чем за 5 минут.
Также можно изменять:
- Имя приложения
- Описание приложения
- Отзывы
- Любой элемент на фейковой странице Google Play
Также всего за несколько минут мы можем абсолютно бесплатно сделать дизайн под любой оффер! Или можете скинуть готовый дизайн своему личному менеджеру.
Возможность лить с оптимизацией на «покупку+установку»
Это очень большой адпейт, который в разы увеличивает конверт и ROI! 🔥 Более подробно читайте в нашей статье на эту тему 💪🏻
Еще мы выпустили много разных обновлений технического плана, что оптимизируют и ускоряют работу 🙂
Читайте также: