13 KiB
Где должно появиться Push-уведомление?
🎯 Правильный ответ: В СИСТЕМНЫХ УВЕДОМЛЕНИЯХ
Push-уведомления - это НЕ уведомления на сайте, а системные уведомления браузера/ОС.
Windows
- Появляются в правом нижнем углу экрана (Action Center)
- Выглядят как обычные Windows уведомления
- Звук уведомления (если включен)
macOS
- Появляются в правом верхнем углу экрана
- Стиль нативных macOS уведомлений
Linux
- Зависит от DE (GNOME, KDE, etc.)
- Обычно верхний правый или верхний центр
Android/iOS (мобильные браузеры)
- В панели уведомлений телефона
- Как обычные push-уведомления приложений
❓ Почему уведомление может не появиться?
1. Уведомления заблокированы в браузере
Проверка:
- Откройте сайт
- Нажмите на иконку замка 🔒 слева от адресной строки
- Найдите "Уведомления"
- Должно быть "Разрешить" (Allow)
Решение:
Chrome/Edge: 🔒 → Уведомления → Разрешить → Обновить страницу
Firefox: Меню → Настройки → Приватность → Разрешения → Уведомления
2. Уведомления заблокированы в ОС
Windows 10/11
- Параметры → Система → Уведомления и действия
- Убедитесь, что уведомления включены глобально
- Найдите ваш браузер в списке приложений
- Убедитесь, что для браузера уведомления разрешены
macOS
- System Preferences → Notifications
- Найдите ваш браузер (Chrome, Firefox, Safari)
- Убедитесь, что уведомления включены
Linux (GNOME)
gnome-control-center notifications
Проверьте, что уведомления включены для браузера.
3. Режим "Не беспокоить"
Windows
- Проверьте Action Center (Win + A)
- Отключите "Фокусировка внимания" (Focus Assist)
macOS
- Проверьте, что не включен Do Not Disturb
- Notification Center → Отключите DND
4. Service Worker не зарегистрирован
Проверка:
- Откройте DevTools (F12)
- Вкладка Application
- Слева: Service Workers
- Должен быть зарегистрирован
/service-worker.jsсо статусом "activated and is running"
Если нет:
// В консоли браузера
navigator.serviceWorker.getRegistrations().then(regs => {
console.log('Registered Service Workers:', regs.length);
regs.forEach(reg => console.log(reg));
});
Решение:
- Перейдите в Дашборд → Уведомления
- Нажмите "Включить уведомления" снова
- Проверьте консоль на ошибки регистрации
5. Push подписка не создана
Проверка в консоли браузера:
navigator.serviceWorker.ready.then(reg => {
reg.pushManager.getSubscription().then(sub => {
if (sub) {
console.log('✅ Push подписка существует:', sub.endpoint);
} else {
console.log('❌ Push подписка отсутствует');
}
});
});
Решение: Включите уведомления заново на странице "Уведомления".
6. Ошибка на сервере при отправке
Проверка логов backend:
pm2 logs ospab-backend --lines 100 | grep "TEST PUSH"
Должны увидеть:
✅ [TEST PUSH] Push-уведомление успешно отправлено!
Если ошибка:
❌ [TEST PUSH] Ошибка при отправке Push: ...
Возможные причины:
- Неправильные VAPID ключи
- Устаревшая подписка (410 Gone)
- Проблемы с сетью
🧪 Пошаговая диагностика
Шаг 1: Проверьте разрешения браузера
// В консоли браузера
console.log('Notification permission:', Notification.permission);
// Должно быть: "granted"
if (Notification.permission !== 'granted') {
console.log('❌ Уведомления не разрешены!');
console.log('Перейдите в Дашборд → Уведомления → Включить уведомления');
}
Шаг 2: Проверьте Service Worker
// В консоли браузера
navigator.serviceWorker.getRegistrations().then(regs => {
if (regs.length === 0) {
console.log('❌ Service Worker не зарегистрирован!');
} else {
console.log('✅ Service Workers найдены:', regs.length);
regs.forEach((reg, i) => {
console.log(` SW ${i+1}:`, reg.active ? '✅ Активен' : '❌ Не активен');
});
}
});
Шаг 3: Проверьте Push подписку
// В консоли браузера
navigator.serviceWorker.ready.then(reg => {
reg.pushManager.getSubscription().then(sub => {
if (!sub) {
console.log('❌ Push подписка не найдена!');
console.log('Включите уведомления в разделе "Уведомления"');
} else {
console.log('✅ Push подписка активна');
console.log(' Endpoint:', sub.endpoint);
}
});
});
Шаг 4: Тестовое уведомление вручную
// В консоли браузера (для быстрой проверки)
new Notification('Тест', {
body: 'Это локальное тестовое уведомление',
icon: '/logo192.png'
});
Если это уведомление появилось:
- ✅ Браузер и ОС настроены правильно
- ❌ Проблема в Push-подписке или на сервере
Если не появилось:
- ❌ Проблема в настройках браузера/ОС
- Проверьте разрешения (см. выше)
Шаг 5: Проверьте консоль Service Worker
- DevTools → Application → Service Workers
- Найдите ваш SW
- Кликните "inspect" или кнопку консоли
- Откроется отдельная консоль Service Worker
- Нажмите тестовую кнопку в админке
- Следите за логами:
[Service Worker] Push-уведомление получено
[Service Worker] Показываем уведомление: {...}
Шаг 6: Отправьте тестовое уведомление
- Админ-панель → 🧪 Тест Push-уведомления
- Откройте консоль браузера (F12)
- Откройте консоль сервера (pm2 logs)
- Нажмите кнопку
- Проверьте логи в обеих консолях
Браузер должен показать:
🧪 [FRONTEND] Начинаем тестовую отправку...
📝 [FRONTEND] Токен найден: Да
📤 [FRONTEND] Отправляем запрос...
✅ [FRONTEND] Ответ от сервера: {success: true, ...}
Сервер должен показать:
🧪 [TEST PUSH] Запрос от пользователя: {...}
✅ [TEST PUSH] Push-уведомление успешно отправлено!
Через 1-3 секунды должно появиться системное уведомление.
🎬 Видео-пример того, где появляется уведомление
Chrome на Windows
┌─────────────────────────────────────┐
│ 🧪 Тестовое уведомление │
│ Это тестовое Push-уведомление. │
│ Если вы его видите — всё работает │
│ │
│ [Закрыть] [Открыть сайт] │
└─────────────────────────────────────┘
↑
Появляется в правом нижнем углу
Firefox на Windows
┌──────────────────────────────┐
│ 🧪 Тестовое уведомление │
│ Это тестовое Push-уведомле │
│ ние. Если вы его видите... │
│ │
│ [×] │
└──────────────────────────────┘
↑
Правый нижний угол
Chrome на macOS
┌─────────────────────────────────┐
│ ospab.host │
│ 🧪 Тестовое уведомление │
│ Это тестовое Push-уведомление │
└─────────────────────────────────┘
↑
Правый верхний угол
🔧 Быстрое решение проблем
"Уведомление не появляется вообще"
- Проверьте консоль браузера на ошибки
- Проверьте pm2 logs на ошибки сервера
- Попробуйте локальное уведомление:
new Notification('Тест', {body: 'Тест'}); - Если локальное появилось → проблема в Push-подписке
- Если локальное не появилось → проблема в разрешениях
"Ошибка 400 - нет активных подписок"
- Дашборд → Уведомления
- "Включить уведомления"
- Разрешить в браузере
- Попробуйте снова
"Ошибка 403 - нет прав администратора"
UPDATE User SET isAdmin = 1 WHERE id = YOUR_USER_ID;
"Ошибка 500 при отправке Push"
# Проверьте VAPID ключи
cd /var/www/ospab-host/backend
cat .env | grep VAPID
# Должны быть заполнены
VAPID_PUBLIC_KEY=...
VAPID_PRIVATE_KEY=...
VAPID_SUBJECT=mailto:support@ospab.host
✅ Чеклист перед тестированием
- Уведомления разрешены в браузере (🔒 → Уведомления → Разрешить)
- Уведомления разрешены в ОС (Windows: Параметры → Уведомления)
- Режим "Не беспокоить" отключен
- Service Worker зарегистрирован (DevTools → Application → Service Workers)
- Push подписка создана (консоль:
navigator.serviceWorker.ready.then(...)) - Вы являетесь администратором (isAdmin: true в БД)
- Backend запущен (pm2 list → ospab-backend → online)
- VAPID ключи настроены в .env
📞 Если ничего не помогает
- Очистите всё и начните заново:
// В консоли браузера
navigator.serviceWorker.getRegistrations().then(regs => {
regs.forEach(reg => reg.unregister());
console.log('Service Workers удалены');
});
// Удалите из БД
// DELETE FROM PushSubscription WHERE userId = YOUR_ID;
// Обновите страницу (Ctrl+Shift+R)
// Включите уведомления заново
-
Попробуйте другой браузер (Chrome vs Firefox)
-
Попробуйте режим инкогнито (чтобы исключить расширения)
-
Проверьте файрвол - может блокировать FCM (Firebase Cloud Messaging)
-
Проверьте антивирус - может блокировать уведомления
Итог: Push-уведомление должно появиться как системное уведомление в углу экрана, а НЕ на сайте как элемент интерфейса!