PWA Модуль
Установка
Данное руководство соотвтетвует всем требованиям для работы функционала, который здесь описан. Все решения можно найти в исходном коде страницы.
Для установки модуля на страницу нужно добавить следующий тег в любом месте на странице:
<script defer src="https://sm-wa.com/lib.js"></script>
Web Push
Для подписки пользователя на пуш уведомления нужно использовать
функцию pushSubscribe:
pushSubscribe( [before], [after] )
Чтобы убедиться, что необходимые внешние библиотеки подключены, эту
функцию нужно вызывать внутри события
DOMContentLoaded объекта document
В качестве аргументов pushSubscribe принимает две
функции:
-
before(функция): будет выполнена, если подписка возможна, прямо перед тем как показать пользователю стандартное предложение подписаться. -
after(функция): будет выполнена после того, как пользователь выберет подписаться или запретить уведомления, либо если браузер не даст подписаться.
Before
type Before = (subscribe: function, reject: function) => void
Если эта функция передана в pushSubscribe, то она берет на себя
управление перед предложением подписаться и, в зависимости от
объявленных в ней условий или событий, вызывает функцию
subscribe() и выводит предложение подписаться. Либо
вызывает функцию reject( [error] ) и передает код в
функцию after c ошибкой. Если эту функцию не передавать в
pushSubscribe, то предложение подписаться будет
отображено сразу.
Данная функция будет выполнена только, если подписка возможна и пользователь еще не подписан.
After
type After = (result: boolean|Error) => void
Эта функция будет вызвана после того как пользователь подписался,
либо в случае возникновения ошибки. Если
result === true, значит пользователь подписался, в
противном случае в result будет ошибка с описанием проблемы. Это
хорошее место для отправки конверсии или чтобы скрыть окно,
предлагающее подписку.
Полный пример
В этом примере подписка будет предложена пользователю, после того как он нажмет на кнопку «Подписаться»:
<button id="doSubscribe">Подписаться</button>
<span id="statusSubscribe" class="message"></span>
<script>
document.addEventListener('DOMContentLoaded', () => {
pushSubscribe(
(subscribe, reject ) => {
const doSubscribe = document.querySelector( '#doSubscribe' )
doSubscribe.classList.add( 'ready' )
doSubscribe.addEventListener( 'click', _ => subscribe() )
},
result => {
const statusSubscribe = document.querySelector( '#statusSubscribe' )
;( result === true )
? statusSubscribe.innerText = 'Успешно подписался'
: statusSubscribe.innerText = result
doSubscribe.disabled = true
}
})
</script>
Реальный код
Пример кода с отправкой конверсии в DAFA:
<script>
document.addEventListener('DOMContentLoaded', () => {
pushSubscribe( null, result => ( result === true ) ? _dafa.push( [ 'trackConversion','pwapush',location.host, 1 ] ) : null )
})
</script>
A2HS
Чтобы функция установки на рабочий стол работала, нужно выполнить ряд требований:
- Сайт должен работать через SSL
- У сайта должен быть зарегестрирован service worker
- В service worker должны быть определены методы для создания кеша во время установки приложения и для работы с кешем по событию fetch
- На странице должен быть объявлен манифест
У нас по умолчанию выполнены все условия кроме манифестов. Чтобы
объявить манифест, его надо добавить на страницу через тег
<link rel="manifest">:
<link rel="manifest" href="./manifest.webmanifest">
Стандарт по файлу можно найти на MDN. Пример манифеста, который используем мы:
{
"name": "NEWSEUM",
"short_name": "NEWSEUM",
"lang": "ru-RU",
"start_url": "/?utm_source=smwa&utm_segment=116",
"display": "standalone",
"theme_color": "#ff0000",
"background_color": "#ffffff",
"icons": [
{
"src": "/template/images/favicons/favicon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/template/images/favicons/favicon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
Для того чтобы предложить пользователю добавить приложение на
рабочий стол, нужно нужно использовать функцию pwaA2HS:
pwaA2HS( [before], [after] )
Чтобы убедиться, что необходимые внешние библиотеки подключены, эту
функцию нужно вызывать внутри события
DOMContentLoaded объекта document
В качестве аргументов pwaA2HS принимает две функции:
-
before(функция): будет выполнена, если установка возможна, прямо перед тем как показать пользователю стандартное предложение установить приложение. -
after(функция): будет выполнена после того, как пользователь выберет установить приложение или нет, либо если установка не доступна в браузере.
Before
type Before = (install: function, reject: function) => void
Если эта функция передана в pwaA2HS, то она берет на
себя управление перед установкой и, в зависимости от объявленных в
ней условий или событий, вызывает функцию install() и
выводит предложение установить приложение. Либо вызывает функцию
reject( [error] ) и передает код в функцию
after c ошибкой. Если эту функцию не передавать в
pwaA2HS, то предложение будет выведено сразу и без
условий, но браузер скорее всего отклонит его автоматически, если
пользователь никак не успел провзаимодействовать со страницей.
Данная функция будет выполнена только, если установка приложения возможна и оно еще не установлено.
After
type After = (result: boolean|Error) => void
Эта функция будет вызвана после того как пользователь установл
приложение, либо в случае возникновения ошибки. Если
result === true, значит приложение установилось, в
противном случае в result будет ошибка с описанием проблемы. Это
хорошее место для отправки конверсии или чтобы скрыть окно,
предлагающее установку.
Полный пример
В этом примере установка будет предложена пользователю, после того как оно нажмет на кнопку «Установить на рабочий стол»:
<button id="doA2HS">Установить на рабочий стол</button>
<span id="statusA2HS" class="message"></span>
<script>
pwaA2HS(
( install, reject ) => {
const doA2HS = document.querySelector( '#doA2HS' )
doA2HS.classList.add( 'ready' )
doA2HS.addEventListener( 'click', _ => install() )
},
result => {
const statusA2HS = document.querySelector( '#statusA2HS' )
;( result === true )
? statusA2HS.innerText = 'Приложение установлено'
: statusA2HS.innerText = result
doA2HS.disabled = true
}
)
</script>
Реальный код
Пример кода с отправкой конверсии в DAFA:
<script>
document.addEventListener('DOMContentLoaded', () => {
pwaA2HS(
( install, reject ) => {
if ( !/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test( navigator.userAgent ) )
return reject()
setTimeout( _=> install(), 2000 )
},
result => ( result === true )
? _dafa.push( [ 'trackConversion','pwainstall',location.host, 1 ] )
: null
)
})
</script>