Skip to content

Уведомления: браузер и приложение (напоминания Упосатхи, гонги в /memo) #47

Description

@dhammagift

Уведомления: что можно в браузере, а что только в приложении. Про календарь Упосатхи и про гонги в /memo.

Что умеют браузерные уведомления

  • Notification показывает уведомление, пока жива страница. Процесс он не держит.
  • Таймеры в фоновой вкладке замедляются: минимум раз в секунду, после нескольких минут Chrome доводит до раза в минуту. На телефоне фоновая вкладка замораживается: таймеры и звук встают. Закрытая страница ничего не покажет.
  • Способы разбудить закрытую страницу: Web Push (нужен сервер, который хранит подписки и место пользователя), Periodic Background Sync (только установленный PWA на Chromium Android, интервал не гарантирован), Notification Triggers (планирование без сервера, в браузерах не выпущено). Хранение подписок у нас решили не делать.

/memo: гонги

Сейчас там общий Audio (gong.mp3 и другие) и Wake Lock (экран не гаснет). Уведомление звук гонга не заменит: свой звук в веб-уведомлении задать нельзя, играет системный. Держать процесс уведомления тоже не будут. Вывод: для гонгов браузерные уведомления почти бесполезны, максимум визуальный дубль на десктопе, пока вкладка в фоне. Надёжно это делают только локальные уведомления приложения со своим звуком.

Что уже сделано в вебе (/uposatha-calendar)

  • напоминания: за 1 час – 2 суток (по умолчанию за сутки) до 8-го и 14-го дня; напоминание за 14-й говорит, что будут две упосатхи; за 15-й отдельного нет
  • работают, пока страница открыта или приложение в фоне; что наступило за время отсутствия, показывается при возвращении
  • файл календаря .ics с будильниками: единственный способ напомнить при полностью закрытом браузере без сервера
  • в приложении страница сама зовёт Capacitor.Plugins.LocalNotifications (идентификаторы 7000–7059, не больше 60 из-за лимита iOS в 64), без плагина ничего не делает; проверено только на заглушке плагина

Приложение (dg-app-full), НЕ начато

  • @capacitor/local-notifications; Android 13+: разрешение POST_NOTIFICATIONS, для точного времени SCHEDULE_EXACT_ALARM; iOS: разрешение при первом запросе
  • страницу /uposatha-calendar и zone-coords.js нужно включить в офлайн-бандл приложения, иначе она откроется только с сетью
  • для /memo: гонг локальным уведомлением со своим звуком (канал Android, файл в бандле iOS), таймер тогда не зависит от того, что сделала система с вкладкой
  • открытый вопрос: сколько вперёд планировать (сейчас 60 уведомлений, около 15 месяцев) и когда пересчитывать расписание (при каждом открытии, при смене места или пояса)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions