Часто задаваемые вопросы о push-уведомлениях

Почему push-уведомления не работают, когда браузер закрыт?

Этот вопрос возникает довольно часто, в основном потому, что есть несколько сценариев, которые затрудняют понимание.

Начнем с Android. ОС Android разработана таким образом, чтобы прослушивать push-сообщения и при получении одного из них активировать соответствующее приложение Android для обработки push-сообщения, независимо от того, закрыто приложение или нет.

Точно так же происходит в любом браузере на Android: при получении push-сообщения браузер активируется, а затем активирует сервис-воркер и отправляет push-событие.

На настольных ОС все немного сложнее. Проще всего объяснить это на примере Mac OS X, поскольку в ней есть визуальный индикатор, который помогает понять разные сценарии.

В Mac OS X вы можете определить, запущена ли программа, по отметке под значком приложения на панели Dock.

Если сравнить два значка Chrome на панели Dock ниже, то левый из них запущен, о чем свидетельствует отметка под ним, а правый – нет, поэтому отметки под ним нет.

Пример для OS X

В контексте получения push-сообщений на компьютере вы будете получать сообщения, когда браузер запущен, то есть под значком есть пометка.

Это означает, что в браузере может не быть открытых окон, но вы все равно будете получать push-сообщения в сервис-воркере, поскольку браузер работает в фоновом режиме.

Push-уведомления не будут получены, только если браузер полностью закрыт, то есть не запущен (нет пометки). То же самое относится и к Windows, хотя в этой ОС сложнее определить, работает ли Chrome в фоновом режиме.

Как сделать так, чтобы веб-приложение на главном экране открывалось в полноэкранном режиме при нажатии?

В Chrome для Android веб-приложение можно добавить на главный экран. Если запустить его оттуда, оно откроется в полноэкранном режиме без адресной строки, как показано ниже.

Значок главного экрана в полноэкранном режиме

Чтобы сохранить этот опыт, разработчики хотят, чтобы их нажатые уведомления также открывали веб-приложение в полноэкранном режиме.

В Chrome это реализовано, но работает не всегда надежно и понятно. Ниже приведены подробные сведения о реализации.

Это означает, что если пользователь не заходит на ваш сайт через значок на главном экране достаточно регулярно, ваши уведомления будут открываться в обычном интерфейсе браузера.

Мы продолжим работать над этой проблемой.

Почему это лучше, чем веб-сокеты?

Сервис-воркер может быть запущен, когда окно браузера закрыто. Веб-сокет будет работать, пока открыты браузер и веб-страница.

Что такое GCM, FCM, Web Push и Chrome?

У этого вопроса есть несколько аспектов, и проще всего объяснить его, пройдясь по истории веб-пушей и Chrome. (Не волнуйтесь, это не займет много времени.)

Декабрь 2014 г.

Когда в Chrome впервые была реализована поддержка веб-уведомлений, для их отправки с сервера в браузер использовался сервис Google Cloud Messaging (GCM).

Это не веб-push-уведомление. Есть несколько причин, по которым эта ранняя настройка Chrome и GCM не была "настоящим" веб-пушем.

  • Чтобы использовать GCM, разработчикам необходимо создать аккаунт в Google Developers Console.
  • Чтобы правильно настроить обмен сообщениями, Chrome и GCM требовался специальный идентификатор отправителя, который передавался веб-приложением.
  • Серверы GCM принимали запросы к специальному API, который не был веб-стандартом.

Июль 2016 г.

В июле в веб-push-уведомлениях появилась новая функция – ключи сервера приложений (или VAPID, как называется спецификация). Когда в Chrome была добавлена поддержка этого нового API, в качестве сервиса обмена сообщениями вместо GCM использовался Firebase Cloud Messaging (также известный как FCM). Это важно по нескольким причинам:

  • Для ключей Chrome и сервера приложений не нужно настраивать проект в Google или Firebase. Они будут работать автоматически.
  • FCM поддерживает протокол веб-пуш, который является API, который будут поддерживать все службы веб-пуш. Это означает, что независимо от того, какую службу push-уведомлений использует браузер, вы просто делаете один и тот же запрос, и он отправляет сообщение.

Почему это вызывает путаницу?

Сейчас существует большая путаница, поскольку на тему веб-пуш-уведомлений написано много контента, большая часть которого ссылается на GCM или FCM. Если в контенте упоминается GCM, скорее всего, он устарел или слишком сильно ориентирован на Chrome. (Я и сам грешил этим в некоторых старых записях).

Вместо этого представьте, что веб-push состоит из браузера, который использует службу push-уведомлений для управления отправкой и получением сообщений, где служба push-уведомлений принимает запрос "протокола веб-push". Если вы думаете в этих терминах, вы можете игнорировать, какой браузер и какой push-сервис он использует, и приступать к работе.

В этом руководстве мы сосредоточимся на стандартном подходе к веб-пушам и намеренно проигнорируем все остальное.

В Firebase есть JavaScript SDK. Что и почему?

Если вы уже знакомы с Firebase Web SDK и знаете, что в нем есть API для обмена сообщениями на JavaScript, то, возможно, вам интересно, чем он отличается от Web Push.

SDK для обмена сообщениями (известный как Firebase Cloud Messaging JS SDK) выполняет несколько трюков за кулисами, чтобы упростить реализацию веб-push.

  • Вместо того чтобы беспокоиться о PushSubscription и его различных полях, вам нужно беспокоиться только о токене FCM (строке).
  • Используя токены для каждого пользователя, вы можете использовать собственный API FCM для запуска push-сообщений. Этот API не требует шифрования полезной нагрузки. Вы можете отправить полезную нагрузку в виде обычного текста в теле запроса POST.
  • Проприетарный API FCM поддерживает специальные функции, например FCM Topics. Он работает и в интернете, хотя это плохо задокументировано.
  • Наконец, FCM поддерживает Android, iOS и веб-платформы, поэтому некоторым командам проще работать с ним в существующих проектах.

В этом случае используются веб-push-уведомления, но они скрыты от пользователя.

Как я уже говорил, если вы считаете веб-пуш просто браузером и пуш-сервисом, то вы можете рассматривать Messaging SDK в Firebase как библиотеку для упрощения реализации веб-пуш.

Куда отправиться дальше

Практические работы