SHA256
Улучшить звуки входящих личных сообщений
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
## Краткое описание
|
||||
|
||||
Доработаны входящие уведомления для личных сообщений в сценарии, когда UI открыт, но страница скрыта на телефоне:
|
||||
|
||||
- для входящего DM при `document.visibilityState !== visible` UI пытается показать системное уведомление через `service worker`;
|
||||
- добавлен `best effort` сигнал через `navigator.vibrate()`;
|
||||
- добавлен короткий локальный звуковой сигнал через Web Audio, если аудио-контекст был ранее разблокирован пользовательским действием.
|
||||
- для видимой активной страницы этот же сигнал теперь проигрывается на каждое новое входящее DM;
|
||||
- для скрытой страницы звуковой сигнал сделан длиннее и заметнее.
|
||||
|
||||
## Что проверять
|
||||
|
||||
- открыть SHiNE в Chrome/Android и один раз взаимодействовать со страницей;
|
||||
- свернуть браузер или увести вкладку в фон, не закрывая её полностью;
|
||||
- отправить DM с другого аккаунта;
|
||||
- при открытой видимой странице тоже отправить DM и убедиться, что короткий сигнал воспроизводится без системного уведомления в шторке;
|
||||
- проверить, что:
|
||||
- сообщение пришло в шторку как системное уведомление;
|
||||
- при поддержке устройства есть вибрация;
|
||||
- на части устройств/браузеров может прозвучать локальный сигнал;
|
||||
- отдельно проверить, что при открытой видимой странице не появилось лишних дублей системного уведомления.
|
||||
|
||||
## Ожидаемый результат
|
||||
|
||||
- скрытая, но живая страница стала заметнее реагировать на входящий DM;
|
||||
- уведомление в фоне не зависит только от `new Notification(...)` из страницы;
|
||||
- если браузер разрешает локальный аудио-сигнал, пользователь слышит короткое оповещение.
|
||||
|
||||
## Статус
|
||||
|
||||
`pending`
|
||||
@@ -184,6 +184,15 @@ Read-receipt пока остаются в legacy-формате:
|
||||
|
||||
- `AckSessionDelivery`
|
||||
|
||||
WebPush и локальные уведомления сейчас работают так:
|
||||
|
||||
- для активной онлайн-сессии приоритет у доставки по WebSocket через `SignedMessageArrived`;
|
||||
- если целевая сессия не онлайн по WebSocket, сервер может отправить WebPush с `kind=new_message`;
|
||||
- если вкладка/приложение живы, но страница скрыта (`document.visibilityState !== visible`), UI дополнительно пытается показать системное уведомление через `service worker`;
|
||||
- для активной видимой страницы UI проигрывает короткий локальный сигнал на каждое новое входящее DM, если браузер ранее разрешил аудио-контекст после пользовательского жеста;
|
||||
- для скрытой, но живой страницы UI также делает `best effort` сигнал через `vibrate()` и более длинный локальный звук;
|
||||
- эти локальные сигналы не гарантируются браузером: на мобильных устройствах они зависят от политики Chrome/Android/iOS.
|
||||
|
||||
## Правила UI
|
||||
|
||||
UI сейчас работает так:
|
||||
@@ -194,6 +203,8 @@ UI сейчас работает так:
|
||||
- позволяет владельцу сообщения вызвать меню `Скопировать как текст / Прочесть / Изменить / Удалить`;
|
||||
- при редактировании показывает над полем ввода полоску `Редактируем сообщение: ...` с кнопкой отмены;
|
||||
- после редактирования показывает под временем отдельную строку `изменено: <дата время>`;
|
||||
- на видимом экране чата/приложения проигрывает короткий локальный звук на новое входящее DM;
|
||||
- при входящем DM для скрытой, но ещё живой страницы пытается поднять системное уведомление через `service worker`;
|
||||
- не показывает и не принимает вложения.
|
||||
|
||||
## Что обязательно помнить
|
||||
|
||||
Reference in New Issue
Block a user