Максим Сальников
@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",
// Tomorrow, same time
showTrigger: new TimestampTrigger(Date.now() + 24 * 60 * 60 * 1000)
});
}
main.js
self.addEventListener('notificationclick', (event) => {
if (event.notification.tag === 'update-content') {
event.waitUntil(updateContentAndLaunchApp());
}
});
service-worker.js
Статус установки приложения
Длинный ответ
Короткий ответ
* Progressive = "Прогрессивное улучшение"
Максим Сальников
@webmaxru
Максим Сальников
@webmaxru