Service Worker. Усунення несправностей

Скрипт для веб-пушів eSputnik завантажується через файл Service Worker, який називається sw.js та розміщується в корені сайту. Проблема може виникнути у випадках, коли в коді сайту вже використовуються файли з такою самою назвою, або якщо на сайті вже використовується інший Service Worker.

1. Зміна назви Worker sw.js

Деякі конструктори (Хорошоп, Wix тощо) за умовчанням розміщують файл sw.js в корені сайтів. Оскільки файл eSputnik має ту саму назву, можуть виникати помилки.

Щоб уникнути неполадок, у скрипті eSputnik можна перейменувати файл і за необхідності вказати до нього шлях.

Для цього знайдіть у коді скрипту eSputnik функцію ініціалізації

es("pushOn");

і додайте до цього запису параметри у такому форматі:

es("pushOn", {'service-worker': {'relUrl': '/push-worker.js'} });

де параметр 'relUrl' – шлях до файлу та його довільна назва.

Код функції ініціалізації es(pushOn) з параметром relUrl для перейменування Service Worker

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:

  • onPushNotification
  • getNotificationContent
  • showNotification
  • getNotificationData
  • determineClickedLink
  • collectActionLinks
  • trackNewServiceWorkerActivation

У разі збігу цих назв із назвами у вашому Service Worker, буде викликатися функція, яка розташована в коді останньою. Наприклад, якщо код відповідно до цієї інструкції закінчується рядком

importScripts('https://push.esputnik.com/service-worker.js');

то коректно відпрацює функціональність, пов'язана із веб-пушами.

3. Вимоги до manifest.json для PWA-сайтів

Скрипт web push eSputnik не створює й не керує файлом manifest.json вашого PWA — він лише об'єднується з Service Worker, який вже існує на сайті (див. розділ 2 вище). Якщо ви налаштовуєте Progressive Web App і вам потрібен manifest.json, цей файл є стандартною частиною специфікації PWA і не пов'язаний зі скриптом eSputnik.

Кілька моментів, важливих для сайтів, що поєднують PWA та web push eSputnik:

  • Поля display і start_url впливають на поведінку встановленого застосунку, але не впливають на саму підписку на web push eSputnik.
  • gcm_sender_id більше не потрібен для push-сповіщень у Chrome — його замінили ключі VAPID, які скрипт eSputnik обробляє автоматично.

4. Помилка "None of providers responded with success"

Ця помилка виникає для так званих "фантомних" підписників — записів без інформації про тип браузера. Оскільки система не може визначити провайдера для таких підписників, вона не може їх коректно таргетувати.

5. Помилка WEB_PUSH_GENERAL_ERROR

GENERAL_ERROR для Web Push — це резервний результат відправника: він з'являється тоді, коли конкретнішої причини від провайдера зафіксувати не вдалося. У логах зберігаються лише канал, код помилки та загальне повідомлення "General error" — HTTP-код провайдера та його необроблена відповідь не зберігаються.

Із цього випливають два наслідки:

  • Ця помилка не спричиняє автоматичне видалення токена.
  • Один і той самий код верхнього рівня може приховувати різні причини, тому самого лише коду недостатньо, щоб побудувати таблицю причин або обґрунтувати масове видалення токенів. Видаляйте токени лише після перевірки конкретної групи токенів.

Did this page help you?