Описал архитектуру уведомлений Pulse
Этот коммит содержится в:
@@ -0,0 +1,114 @@
|
||||
# Pulse Push Notifications
|
||||
|
||||
Дата: 2026-05-09
|
||||
Репозиторий: viktor138irk/SWChat
|
||||
Связанный клиент: viktor138irk/SWChat-App
|
||||
|
||||
## Цель
|
||||
|
||||
Добавить уведомления Pulse так, чтобы пользователь получал push на Android при новых сообщениях, но сервер Matrix/Synapse не зависел напрямую от клиентского UI.
|
||||
|
||||
## Важное решение
|
||||
|
||||
Уведомления делаем через отдельный серверный Push Gateway.
|
||||
|
||||
Схема:
|
||||
|
||||
```text
|
||||
Synapse / Matrix
|
||||
↓ Matrix push rules / pusher
|
||||
Pulse Push Gateway
|
||||
↓ FCM / Android push
|
||||
Pulse Android App
|
||||
```
|
||||
|
||||
Push Gateway должен жить в серверном репозитории `SWChat`, а клиентские настройки и регистрация pusher — в `SWChat-App`.
|
||||
|
||||
## Почему нужен Push Gateway
|
||||
|
||||
Matrix-клиент не получает push напрямую из Synapse в Firebase. Synapse отправляет push на gateway, а gateway уже отправляет уведомление в Firebase Cloud Messaging.
|
||||
|
||||
Это позволяет:
|
||||
- не хранить Firebase-логику в Synapse;
|
||||
- централизованно управлять push;
|
||||
- позже добавить web push, desktop push, Telegram/dev alerts;
|
||||
- контролировать payload и приватность;
|
||||
- отключать/включать уведомления пользователям.
|
||||
|
||||
## MVP Push Gateway
|
||||
|
||||
Минимальные функции:
|
||||
|
||||
1. Endpoint приёма push от Synapse:
|
||||
|
||||
```text
|
||||
POST /_matrix/push/v1/notify
|
||||
```
|
||||
|
||||
2. Проверка входящего payload.
|
||||
3. Извлечение event/user/room/pusher данных.
|
||||
4. Отправка уведомления в FCM.
|
||||
5. Логи отправки.
|
||||
6. Healthcheck endpoint:
|
||||
|
||||
```text
|
||||
GET /health
|
||||
```
|
||||
|
||||
7. Конфигурация через `.env`.
|
||||
8. Отдельный контейнер в `docker-compose.yml`.
|
||||
|
||||
## Предварительные домены
|
||||
|
||||
Рекомендуемый домен:
|
||||
|
||||
```text
|
||||
push.stackworks.ru
|
||||
```
|
||||
|
||||
Альтернатива внутри API:
|
||||
|
||||
```text
|
||||
api-chat.stackworks.ru/push
|
||||
```
|
||||
|
||||
На MVP лучше отдельный поддомен `push.stackworks.ru`, чтобы не мешать будущему backend API.
|
||||
|
||||
## Требования к Android-клиенту
|
||||
|
||||
В `SWChat-App` нужно:
|
||||
|
||||
- проверить наличие `google-services.json` под package `ru.stackworks.pulse`;
|
||||
- проверить Firebase project;
|
||||
- включить FCM token registration;
|
||||
- убедиться, что `pushNotificationsAppId = ru.stackworks.pulse`;
|
||||
- настроить pusher URL на Pulse Push Gateway;
|
||||
- проверить уведомления на debug APK;
|
||||
- проверить уведомления на release APK.
|
||||
|
||||
## Безопасность
|
||||
|
||||
Push Gateway не должен раскрывать текст сообщений без необходимости.
|
||||
|
||||
На MVP можно отправлять:
|
||||
|
||||
```text
|
||||
Новое сообщение
|
||||
```
|
||||
|
||||
или:
|
||||
|
||||
```text
|
||||
Новое сообщение в Pulse
|
||||
```
|
||||
|
||||
Без тела сообщения, пока не будет понятна политика приватности и E2EE.
|
||||
|
||||
## Следующий шаг
|
||||
|
||||
1. Проверить Android/Firebase config.
|
||||
2. Создать каркас `push-gateway` в серверном репозитории.
|
||||
3. Добавить сервис в `docker-compose.yml`.
|
||||
4. Добавить `.env.example` переменные.
|
||||
5. Настроить Synapse pusher/client pusher registration.
|
||||
6. Проверить push на тестовом аккаунте.
|
||||
Ссылка в новой задаче
Block a user