Максим Сальников
@webmaxru
Фоновые сервисы в браузерах:
Что доступно из фоновых сервисов сегодня
Ответственный за успех Azure-разработчиков в Microsoft
Сервис-воркер
ОС
Браузер
Интернет
Апп
Событие
Событие
Событие
Событие
Отправить сообщение
Открыть вкладку с приложением
Показать уведомление
Выполнить произвольный код
Сообщение
(Triggers)
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
  registration.periodicSync.register('update-content', {
    
      // Интервал в один день
      minInterval: 24 * 60 * 60 * 1000
  })
}main.js
self.addEventListener('periodicsync', (event) => {
  if (event.tag === 'update-content') {
    
    // Не уверен - не запускай! Think before you sync!
    event.waitUntil( updateContent() );
  }
});service-worker.js
}
| Engagement Score | Интервал Periodic Sync (часы) | 
|---|---|
| NONE | Никогда | 
| MINIMAL | 36 | 
| LOW | 24 | 
| MEDIUM | 24 | 
| HIGH | 12 | 
| MAX | 12 | 
const registration = await navigator.serviceWorker.ready;
if ('showTrigger' in Notification.prototype) {
      
  // 5 секунд от "сейчас"
  const triggerTime =  Date.now() + 5 * 1000
  registration.showNotification('Notification Trigger Demo', {
    body: `Scheduled for ${new Date( triggerTime ).toLocaleTimeString()}`,
    showTrigger: new TimestampTrigger( triggerTime )
  });
}main.js
const registration = await navigator.serviceWorker.ready;
if ('showTrigger' in Notification.prototype) {
  registration.showNotification('Reminder', {
    tag: 'update-content',
    body: "Click to sync with the server",
      
    // Через сутки
    showTrigger: new TimestampTrigger(Date.now() + 24 * 60 * 60 * 1000)
  });
}main.js
self.addEventListener('notificationclick', (event) => {
  if (event.notification.tag === 'update-content') {
    
    event.waitUntil( updateContent() );
  }
});service-worker.js
Статус установки приложения
Длинный ответ
Короткий ответ
* Progressive = "Прогрессивное улучшение"
Максим Сальников
@webmaxru
Максим Сальников
@webmaxru