SHiNE-server/DOC/api/PWA_FCM_SETUP.md

53 lines
2.4 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.

# Настройка PWA + FCM для веб-клиента (Chrome/Edge/Firefox/Safari iOS)
## 1) Что нужно создать в Firebase
1. Создать проект Firebase.
2. Включить Cloud Messaging.
3. Создать Web App и получить конфиг:
- apiKey
- authDomain
- projectId
- messagingSenderId
- appId
4. В Cloud Messaging -> Web Push certificates сгенерировать VAPID key.
5. Для серверной отправки взять **Server key** (legacy) или настроить HTTP v1 (service account).
## 2) Куда вставить токены в клиенте
Файл: `shine-UI/index.html` и `shine-UI/firebase-messaging-sw.js`.
Заполнить:
- `window.__SHINE_FIREBASE_CONFIG__`
- `window.__SHINE_FIREBASE_VAPID_KEY__`
- `FIREBASE_CONFIG` (в service worker)
## 3) Куда вставить серверный ключ FCM
Файл: `src/main/resources/application.properties`
Добавить:
```
fcm.server.key=YOUR_FCM_SERVER_KEY
```
## 4) PWA требования
1. Открывать сайт только по HTTPS (или localhost).
2. Разрешить уведомления в браузере.
3. Убедиться, что `manifest.webmanifest` доступен.
4. Убедиться, что `firebase-messaging-sw.js` зарегистрирован.
## 5) Safari / iPhone (iOS)
- Нужен iOS 16.4+.
- Пользователь должен добавить сайт на Home Screen.
- После запуска PWA с Home Screen дать разрешение на уведомления.
- Без Home Screen web push в Safari iOS не работает.
## 6) Проверка
1. Логин в приложении.
2. Клиент вызывает `UpsertPushToken` и отправляет FCM токен на сервер.
3. Вызов `SendDirectMessage` пользователю без активной WS доставки.
4. Сервер шлет push через FCM.
## 7) Поддержка разных браузеров
- Chrome/Edge/Opera/Android Browser: FCM web push поддерживается нативно.
- Firefox: поддержка web push есть, но тестировать отдельно (поведение токенов отличается).
- Safari macOS/iOS: web push есть, но требуется PWA режим и Apple-ограничения.