Service Worker. Усунення несправностей
Скрипт для веб-пушів eSputnik завантажується через файл Service Worker, який називається sw.js та розміщується в корені сайту. Проблема може виникнути у випадках, коли в коді сайту вже використовуються файли з такою самою назвою, або якщо на сайті вже використовується інший Service Worker.
1. Зміна назви Service Worker sw.js
sw.jsДеякі конструктори (Хорошоп, Wix тощо) за умовчанням розміщують файл sw.js в корені сайтів. Оскільки файл eSputnik має ту саму назву, можуть виникати помилки.
Щоб уникнути неполадок, у скрипті eSputnik можна перейменувати файл і за необхідності вказати до нього шлях.
Для цього знайдіть у коді скрипту eSputnik функцію ініціалізації
es("pushOn");і додайте до цього запису параметри у такому форматі:
es("pushOn", {'service-worker': {'relUrl': '/push-worker.js'} });де параметр 'relUrl' – шлях до файлу та його довільна назва.

2. Поєднання Service Worker від eSputnik та PWA
Сайти з PWA (progressive web app) вже використовують Service Worker, тобто містять JavaScript-файл з певним набором функцій. Щоб додати на сайт можливість підписки та відправки веб-пушів через eSputnik, вам потрібно в кінці JavaScript-коду вашого Service Worker додати рядок
importScripts('https://push.esputnik.com/service-worker.js');Зверніть увагу
Назви функцій, змінних або обробників у вашому Service Worker та Service Worker від eSputnik можуть збігтися. У такому разі можливі конфлікти, що призводять до збоїв у роботі як вашого PWA, так і скрипту eSputnik.
Нижче наведено перелік назв методів (функцій) у файлі eSputnik:
onPushNotificationgetNotificationContentshowNotificationgetNotificationDatadetermineClickedLinkcollectActionLinkstrackNewServiceWorkerActivation
У разі збігу цих назв із назвами у вашому Service Worker, буде викликатися функція, яка розташована в коді останньою. Наприклад, якщо код відповідно до цієї інструкції закінчується рядком
importScripts('https://push.esputnik.com/service-worker.js');то коректно відпрацює функціональність, пов'язана із веб-пушами.
3. Вимоги до manifest.json для PWA-сайтів
manifest.json для PWA-сайтівСкрипт web push eSputnik не створює й не керує файлом manifest.json вашого PWA — він лише об'єднується з Service Worker, який вже існує на сайті (розділ 2 вище). Якщо ви налаштовуєте Progressive Web App і вам потрібен manifest.json, цей файл є стандартною частиною специфікації PWA і не пов'язаний зі скриптом eSputnik.
Кілька моментів, важливих для сайтів, що поєднують PWA та web push eSputnik:
- Браузер дізнається про файл маніфесту з HTML-сторінки сайту. Для цього додайте в розділ
<head>тег<link rel="manifest" href="/manifest.json">, деhrefмістить шлях до вашого файлу маніфесту. - Для PWA на iOS/iPadOS у маніфесті потрібно вказати
"display": "standalone"або"display": "fullscreen". Якщоdisplayне вказано, браузер використовує значенняbrowserза замовчуванням, і Web Push на iOS/iPadOS може не працювати. - Поле
start_urlвизначає, яка сторінка відкриватиметься під час запуску встановленого PWA. Якщо застосунок має відкриватися з головної сторінки сайту, вкажіть"start_url": "/". gcm_sender_idбільше не потрібен для push-сповіщень у Chrome — його замінили ключі VAPID, які скрипт eSputnik обробляє автоматично.
4. Помилка None of providers responded with success
None of providers responded with successЦя помилка виникає для так званих "фантомних" підписників — записів без інформації про тип браузера. Оскільки система не може визначити провайдера для таких підписників, вона не може їх коректно таргетувати.
Щоб очистити базу від таких підписників, використовуйте опцію видалення токенів, за якими немає прочитань протягом визначеної кількості днів.
5. Помилка WEB_PUSH_GENERAL_ERROR
WEB_PUSH_GENERAL_ERRORGENERAL_ERROR для Web Push — це резервний результат відправника: він з'являється тоді, коли конкретнішої причини від провайдера зафіксувати не вдалося. У логах зберігаються лише канал, код помилки та загальне повідомлення "General error" — HTTP-код провайдера та його необроблена відповідь не зберігаються.
Із цього випливають два наслідки:
- Ця помилка не спричиняє автоматичне видалення токена.
- Один і той самий код верхнього рівня може приховувати різні причини, тому самого лише коду недостатньо, щоб побудувати таблицю причин або обґрунтувати масове видалення токенів. Видаляйте токени лише після перевірки конкретної групи токенів.
6. Помилка Invalid subscription
Invalid subscriptionInvalid subscription означає, що токен браузера більше не дійсний — найчастіше тому, що відвідувач відкликав дозвіл на сповіщення або очистив його в налаштуваннях браузера. Система дізнається про це лише під час спроби надіслати повідомлення: тоді токен видаляється, а якщо в контакта не лишилось інших каналів, його буде видалено автоматично з причиною No media channels.
Тому в контакта можуть бути успішні відправлення, а на наступній — ця помилка, і при цьому в акаунті нічого не змінювалось. Повторна підписка на сайті створює новий токен.
Updated 17 days ago