Files
ospab.host/ospabhost/TROUBLESHOOTING_PUSH.md
2025-11-23 14:35:16 +03:00

375 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Где должно появиться Push-уведомление?
## 🎯 Правильный ответ: В СИСТЕМНЫХ УВЕДОМЛЕНИЯХ
Push-уведомления - это **НЕ уведомления на сайте**, а **системные уведомления браузера/ОС**.
### Windows
- Появляются в **правом нижнем углу экрана** (Action Center)
- Выглядят как обычные Windows уведомления
- Звук уведомления (если включен)
### macOS
- Появляются в **правом верхнем углу** экрана
- Стиль нативных macOS уведомлений
### Linux
- Зависит от DE (GNOME, KDE, etc.)
- Обычно верхний правый или верхний центр
### Android/iOS (мобильные браузеры)
- В панели уведомлений телефона
- Как обычные push-уведомления приложений
---
## ❓ Почему уведомление может не появиться?
### 1. Уведомления заблокированы в браузере
**Проверка:**
1. Откройте сайт
2. Нажмите на **иконку замка** 🔒 слева от адресной строки
3. Найдите "Уведомления"
4. Должно быть **"Разрешить"** (Allow)
**Решение:**
```
Chrome/Edge: 🔒 → Уведомления → Разрешить → Обновить страницу
Firefox: Меню → Настройки → Приватность → Разрешения → Уведомления
```
---
### 2. Уведомления заблокированы в ОС
#### Windows 10/11
1. **Параметры → Система → Уведомления и действия**
2. Убедитесь, что уведомления **включены глобально**
3. Найдите ваш браузер в списке приложений
4. Убедитесь, что для браузера уведомления **разрешены**
#### macOS
1. **System Preferences → Notifications**
2. Найдите ваш браузер (Chrome, Firefox, Safari)
3. Убедитесь, что уведомления **включены**
#### Linux (GNOME)
```bash
gnome-control-center notifications
```
Проверьте, что уведомления включены для браузера.
---
### 3. Режим "Не беспокоить"
#### Windows
- Проверьте **Action Center** (Win + A)
- Отключите "Фокусировка внимания" (Focus Assist)
#### macOS
- Проверьте, что не включен **Do Not Disturb**
- Notification Center → Отключите DND
---
### 4. Service Worker не зарегистрирован
**Проверка:**
1. Откройте **DevTools** (F12)
2. Вкладка **Application**
3. Слева: **Service Workers**
4. Должен быть зарегистрирован `/service-worker.js` со статусом **"activated and is running"**
**Если нет:**
```javascript
// В консоли браузера
navigator.serviceWorker.getRegistrations().then(regs => {
console.log('Registered Service Workers:', regs.length);
regs.forEach(reg => console.log(reg));
});
```
**Решение:**
1. Перейдите в **Дашборд → Уведомления**
2. Нажмите **"Включить уведомления"** снова
3. Проверьте консоль на ошибки регистрации
---
### 5. Push подписка не создана
**Проверка в консоли браузера:**
```javascript
navigator.serviceWorker.ready.then(reg => {
reg.pushManager.getSubscription().then(sub => {
if (sub) {
console.log('✅ Push подписка существует:', sub.endpoint);
} else {
console.log('❌ Push подписка отсутствует');
}
});
});
```
**Решение:**
Включите уведомления заново на странице "Уведомления".
---
### 6. Ошибка на сервере при отправке
**Проверка логов backend:**
```bash
pm2 logs ospab-backend --lines 100 | grep "TEST PUSH"
```
**Должны увидеть:**
```
✅ [TEST PUSH] Push-уведомление успешно отправлено!
```
**Если ошибка:**
```
❌ [TEST PUSH] Ошибка при отправке Push: ...
```
**Возможные причины:**
- Неправильные VAPID ключи
- Устаревшая подписка (410 Gone)
- Проблемы с сетью
---
## 🧪 Пошаговая диагностика
### Шаг 1: Проверьте разрешения браузера
```javascript
// В консоли браузера
console.log('Notification permission:', Notification.permission);
// Должно быть: "granted"
if (Notification.permission !== 'granted') {
console.log('❌ Уведомления не разрешены!');
console.log('Перейдите в Дашборд → Уведомления → Включить уведомления');
}
```
### Шаг 2: Проверьте Service Worker
```javascript
// В консоли браузера
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 подписку
```javascript
// В консоли браузера
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: Тестовое уведомление вручную
```javascript
// В консоли браузера (для быстрой проверки)
new Notification('Тест', {
body: 'Это локальное тестовое уведомление',
icon: '/logo192.png'
});
```
**Если это уведомление появилось:**
- ✅ Браузер и ОС настроены правильно
- ❌ Проблема в Push-подписке или на сервере
**Если не появилось:**
- ❌ Проблема в настройках браузера/ОС
- Проверьте разрешения (см. выше)
### Шаг 5: Проверьте консоль Service Worker
1. **DevTools → Application → Service Workers**
2. Найдите ваш SW
3. Кликните **"inspect"** или кнопку консоли
4. Откроется отдельная консоль Service Worker
5. Нажмите тестовую кнопку в админке
6. Следите за логами:
```
[Service Worker] Push-уведомление получено
[Service Worker] Показываем уведомление: {...}
```
### Шаг 6: Отправьте тестовое уведомление
1. **Админ-панель → 🧪 Тест Push-уведомления**
2. Откройте **консоль браузера (F12)**
3. Откройте **консоль сервера** (pm2 logs)
4. Нажмите кнопку
5. Проверьте логи в обеих консолях
**Браузер должен показать:**
```
🧪 [FRONTEND] Начинаем тестовую отправку...
📝 [FRONTEND] Токен найден: Да
📤 [FRONTEND] Отправляем запрос...
✅ [FRONTEND] Ответ от сервера: {success: true, ...}
```
**Сервер должен показать:**
```
🧪 [TEST PUSH] Запрос от пользователя: {...}
✅ [TEST PUSH] Push-уведомление успешно отправлено!
```
**Через 1-3 секунды** должно появиться системное уведомление.
---
## 🎬 Видео-пример того, где появляется уведомление
### Chrome на Windows
```
┌─────────────────────────────────────┐
│ 🧪 Тестовое уведомление │
│ Это тестовое Push-уведомление. │
│ Если вы его видите — всё работает │
│ │
│ [Закрыть] [Открыть сайт] │
└─────────────────────────────────────┘
Появляется в правом нижнем углу
```
### Firefox на Windows
```
┌──────────────────────────────┐
│ 🧪 Тестовое уведомление │
│ Это тестовое Push-уведомле │
│ ние. Если вы его видите... │
│ │
│ [×] │
└──────────────────────────────┘
Правый нижний угол
```
### Chrome на macOS
```
┌─────────────────────────────────┐
│ ospab.host │
│ 🧪 Тестовое уведомление │
│ Это тестовое Push-уведомление │
└─────────────────────────────────┘
Правый верхний угол
```
---
## 🔧 Быстрое решение проблем
### "Уведомление не появляется вообще"
1. **Проверьте консоль браузера** на ошибки
2. **Проверьте pm2 logs** на ошибки сервера
3. **Попробуйте локальное уведомление:**
```javascript
new Notification('Тест', {body: 'Тест'});
```
4. Если локальное появилось → проблема в Push-подписке
5. Если локальное не появилось → проблема в разрешениях
### "Ошибка 400 - нет активных подписок"
1. **Дашборд → Уведомления**
2. **"Включить уведомления"**
3. **Разрешить** в браузере
4. Попробуйте снова
### "Ошибка 403 - нет прав администратора"
```sql
UPDATE User SET isAdmin = 1 WHERE id = YOUR_USER_ID;
```
### "Ошибка 500 при отправке Push"
```bash
# Проверьте 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
---
## 📞 Если ничего не помогает
1. **Очистите всё и начните заново:**
```javascript
// В консоли браузера
navigator.serviceWorker.getRegistrations().then(regs => {
regs.forEach(reg => reg.unregister());
console.log('Service Workers удалены');
});
// Удалите из БД
// DELETE FROM PushSubscription WHERE userId = YOUR_ID;
// Обновите страницу (Ctrl+Shift+R)
// Включите уведомления заново
```
2. **Попробуйте другой браузер** (Chrome vs Firefox)
3. **Попробуйте режим инкогнито** (чтобы исключить расширения)
4. **Проверьте файрвол** - может блокировать FCM (Firebase Cloud Messaging)
5. **Проверьте антивирус** - может блокировать уведомления
---
**Итог:** Push-уведомление должно появиться как **системное уведомление** в углу экрана, а **НЕ** на сайте как элемент интерфейса!