🔔 Урок 7: Таксі прибуло!
📱 Сидиш, чекаєш таксі, гортаєш TikTok...
Раптом — PUSH! "🚖 Водій на місці!"
🔔 Notification API — показує сповіщення навіть коли вкладка неактивна!
🔐 Permission — спочатку питає дозвіл у користувача
Сьогодні створюємо СПРАВЖНІ сповіщення! 🔔
🔔 Push-сповіщення збільшують залученість на 88%!
📱 Uber та Bolt надсилають мільйони сповіщень щодня
⚠️ Але спам сповіщеннями — найшвидший спосіб втратити користувача!
👆 Спочатку увімкни сповіщення → потім натисни "Тест"!
Що таке Notification API?
Notification API — вбудований інструмент браузера, який дозволяє показувати системні сповіщення користувачу.
✨ Головна фішка: Сповіщення працюють навіть коли:
- Вкладка браузера згорнута
- Користувач в іншому додатку
- Екран заблокований (на мобільних)
⚠️ Але є правило: Браузер захищає користувачів від спаму. Перед тим як надсилати сповіщення — потрібно отримати явний дозвіл від користувача.
Це схоже на підписку на розсилку: сайт не може просто надсилати email без дозволу. Так само і зі сповіщеннями — спочатку питаємо, потім надсилаємо.
requestPermission() — встановлюємо дзвінок.
new Notification() — хтось дзвонить!
permission: denied — дзвінок вимкнено, ніхто не потурбує.
requestPermission() — це ввічливий стук у двері. Господар (браузер) питає користувача: "Впустити?"
Користувач може відповісти: "Так" (granted), "Ні, і більше не питай" (denied), або просто не відповісти (default).
1. Перевірка підтримки браузером:
•
'Notification' in window — перевіряємо чи браузер взагалі підтримує сповіщення• Не всі браузери підтримують цю функцію (наприклад, старі версії або деякі мобільні)
• Завжди перевіряй перед використанням — це defensive programming
2. Запит дозволу:
•
requestPermission() — показує системний діалог браузера• Користувач бачить: "Цей сайт хоче надсилати вам сповіщення" з кнопками "Дозволити" / "Заблокувати"
• Цей запит можна зробити тільки після дії користувача (клік на кнопку) — браузери блокують автоматичні запити
3. Promise та асинхронність:
•
.then() — це Promise, бо користувач відповідає НЕ одразу• Код продовжує виконуватись, а коли користувач натисне кнопку — виконається
.then()• Можна також використати
async/await: const permission = await Notification.requestPermission();4. Результат:
•
'granted' — користувач дозволив, можна надсилати!•
'denied' — користувач заблокував, НЕ питай знову•
'default' — користувач закрив діалог без вибору
• Хто дзвонить (title) — "Водій Олександр"
• Деталі (body) — "Білий Peugeot 308"
• Фото (icon) — аватарка контакту
new Notification() працює так само! І найкрутіше — цей "дзвінок" прийде навіть якщо ти граєш у гру або дивишся YouTube. Вкладка може бути згорнута!
Синтаксис:
new Notification(title, options)1. Перший параметр — title (обов'язковий):
• Заголовок сповіщення — перше що бачить користувач
• Має бути коротким та зрозумілим: "Водій прибув!", "Нове повідомлення"
• Можна використовувати емодзі для привернення уваги 🚖
2. Другий параметр — options (об'єкт з налаштуваннями):
•
body — детальний текст сповіщення (до 2-3 рядків)•
icon — URL картинки або емодзі (з'являється зліва)•
tag — унікальний ID, щоб не дублювати однакові сповіщення•
requireInteraction — чи залишати сповіщення поки користувач не закриє•
silent — чи вимкнути звук сповіщення3. Особливості системних сповіщень:
• Працюють навіть коли вкладка згорнута або браузер у фоні
• Відображаються операційною системою, не браузером
• На Windows з'являються справа знизу, на Mac — справа зверху
• Користувач може клікнути на сповіщення — можна додати обробник
notification.onclick
Notification.permission — це той самий "список":
• "granted" — "Ви в списку, проходьте!" ✅
• "denied" — "Вам заборонено вхід, навіть не питайте" 🚫
• "default" — "Хм, вас немає в списку... Давайте перевіримо" ❓
Завжди перевіряй статус перед створенням сповіщення — це гарний тон!
1.
'granted' — Дозвіл отримано ✅• Користувач натиснув "Дозволити"
• Можна вільно створювати сповіщення через
new Notification()• Цей стан зберігається в браузері для цього домену
2.
'denied' — Заборонено 🚫• Користувач натиснув "Заблокувати"
• ВАЖЛИВО: НЕ питай знову!
requestPermission() навіть не покаже діалог• Користувач може змінити це тільки вручну в налаштуваннях браузера
• Покажи повідомлення: "Сповіщення заблоковано. Увімкніть в налаштуваннях браузера"
3.
'default' — Ще не вирішено ❓• Користувач закрив діалог без вибору або ще не бачив запит
• Можна запитати знову через
requestPermission()• Поводься так само як з
'denied' — не надсилай сповіщення💡 Best Practice — перевіряй статус ПЕРЕД надсиланням:
Не викликай
new Notification() якщо permission !== 'granted'. Це викличе помилку в консолі та поганий user experience.
🏆 Що ти вивчив:
Best Practices: НЕ спамуй сповіщеннями!
❌ Погано: Питати дозвіл одразу при відкритті сайту — користувач ще не знає навіщо йому це. 88% відхилять запит!
✅ Добре: Питати дозвіл коли користувач клікає кнопку "Увімкнути сповіщення" — він САМ хоче їх отримувати.
❌ Погано: Надсилати сповіщення кожні 5 секунд — користувач заблокує сайт назавжди.
✅ Добре: Надсилати тільки важливі сповіщення: "Водій прибув", "Замовлення готове", "Нове повідомлення".
Реальні приклади використання
✅ Коли все працює:
Натисни "Готово" в редакторі!
⏱️ ~15 хв • Урок 7 з 8
Потрібна допомога?
Напиши код і натисни Run ▶
