diff --git a/README.md b/README.md index 439b039..d6e4986 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ - **Автоопределение дня недели** — будни/выходные. - **Полное расписание** — по кнопке раскрывается вся таблица (4 остановки: Кандалакша · ПЗ→Зашеек · Зашеек · ПЗ→Кандалакша). +- **Пуш-уведомления** — через RuStore Push, см. раздел ниже. - Тёмная тема, живые часы МСК, подсветка ближайших рейсов (< 15 мин). ## Технические данные @@ -24,6 +25,42 @@ | Сборка | Gradle 8.6 + AGP 8.2.2 | | Подпись | keystore `~/bus127.keystore` (alias `bus127`) | +## Пуш-уведомления (RuStore) + +Приложение интегрировано с [RuStore Push SDK](https://www.rustore.ru/help/sdk/push-notifications) +(аналог Firebase Cloud Messaging). Проект в консоли RuStore привязан к пакету +`ru.ua1zbe.bus127` и подписи release-keystore; пока подпись не меняется, перерегистрация не нужна. + +Для доставки на устройстве должен быть установлен и авторизован **RuStore**. + +Рассылка выполняется с сервера через API RuStore: + +``` +POST https://vkpns.rustore.ru/v1/projects/{project_id}/messages:send +Authorization: Bearer {service-token} +Content-Type: application/json + +{ + "message": { + "token": "{push-token устройства}", + "notification": { + "title": "Автобус 127", + "body": "Ближайший рейс через 5 мин" + } + } +} +``` + +- `project_id` и `service-token` берутся в консоли RuStore: **Push-уведомления > Проекты**. + В приложение попадает только `project_id`; сервисный токен в APK не хранится. +- `push-token` устройства приходит в `onNewToken` (лог `RuStorePush`) и сохраняется + в `SharedPreferences` `bus127_push`. +- Приложение подписывается на топик `bus127` — топик должен существовать в консоли. + Сообщения без поля `topic` приходят всем устройствам проекта. +- Если в запросе есть секция `notification` — уведомление показывает сам SDK; + если переданы только `data` (`title`/`body`, необязательный `url`) — приложение + показывает его само и открывает ссылку по клику. + ## Структура ``` @@ -32,7 +69,12 @@ apk-webview/ # исходники APK (WebView) │ ├── build.gradle │ └── src/main/ │ ├── AndroidManifest.xml -│ ├── java/ru/ua1zbe/bus127/MainActivity.java +│ ├── java/ru/ua1zbe/bus127/ +│ │ ├── MainActivity.java # WebView + запрос разрешения на уведомления +│ │ ├── Bus127App.java # инициализация RuStore Push SDK +│ │ ├── PushMessagingService.java # приём уведомлений +│ │ ├── PushIntents.java # переход по клику +│ │ └── push/PushStore.java # хранение push-токена │ ├── assets/index.html # интерфейс (HTML/JS) │ └── res/values/strings.xml └── settings.gradle, build.gradle, gradle.properties