2016-08-08 5 views
0

Я делаю push-уведомления, , когда я регистрирую страницу, затем проверяю ее с помощью команд curl, я получил уведомление!Получать уведомления 24/7 через service-worker.js в Chrome

Однако через некоторое время (возможно, 1-2 минуты), когда я закрываю вкладку, на которой была зарегистрирована область уведомлений push, затем снова проверяйте уведомления, я не могу получать уведомления. Обычно это происходит в Google Chrome на мобильных телефонах.

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

Вот мой толчок событие службы работника

self.addEventListener('push', function(event) { 
    var SOME_API_ENDPOINT = "https://somewhre.com/push_notification_api/service_worker_endpoint"; 

    event.waitUntil(
     fetch(SOME_API_ENDPOINT, { 
       method: 'post',  
       headers: { 
        "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" 
       }, 
       body: 'subscription_id=' + subscriptionId 
      }).then(function(response) { 

      return response.json().then(function(data) { 
       var title = data.notification.title; 
       var message = data.notification.message; 
       var icon = base + "assets/images/logo_notification.png"; 
       var notificationTag = data.notification.url; 
       // var notificationTag = 'https://google.com'; //data.notification.tag; 
       return self.registration.showNotification(title, { 
        body: message, 
        icon: icon, 
        tag: notificationTag 
       }); 
      }); 
     }) 
    ); 
}); 

Как мне сделать мои рабочие 24/7 обслуживание, даже если я не нахожусь в странице сферы в регистрации SW?

Нужно ли использовать функции eventListeners ',' activate 'и' fetch '?

ответ

0

Служащие службы, похоже, сохраняются, но на самом деле этого не делают - в ответ на события появляется новый экземпляр. Это будет иметь место при перезагрузке на мобильном устройстве для обработки события push, но есть также предположения о том, что занятые работники служб должны разрешать несколько экземпляров параллельно.

Ваш subscriptionId является глобальным параметром, поэтому может быть undefined к моменту вашего пожара push.

Чтобы исправить это, вам необходимо сохранить subscriptionId в каком-то хранилище (mayber IndexedDB).

Я также думаю, что для того, чтобы работник службы оставался на месте, он должен иметь событие install, и это событие должно быть успешным.

Смежные вопросы