Push API
Experimental
Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.
Push API дает веб приложениям возможность получать сообщения отправленные с сервера, независимо от того, запущено ли веб приложение в фоне или даже загружено ли оно вообще пользователем. Это позволяет разработчикам посылать асинхронные сообщения и обновления пользователям которые подписались на них, как результат улучшается информированность пользователей о новом контенте
Примечание: Эта документация охватывает спецификацию W3C Push API ; если вы ищете документацию по запатентованной технологии Firefox OS , смотрите здесь.
Общие сведения об использовании push уведомлений
При внедрении подписки PushManager, жизненно важно защищать запросы от CSRF/XSRF атак в вашем приложении.
Дополнительную информацию см. В следующих статьях:
Для получения push уведомлений приложение должно иметь активный service worker. Когда service worker активен, оно может подписаться на push уведомления используя PushManager.subscribe()
.
Полученный объект PushSubscription
включает в себя всю необходимую информацию, которая может потребоваться приложению чтобы отправить push уведомление: адрес и ключ шифрования, необходимые для отправки данных.
Service worker будет запущен для того чтобы обрабатывать входящие push сообщения, которые будут доставлены в ServiceWorkerGlobalScope.onpush
обработчик события. Это позволит приложению реагировать на push сообщения, к примеру показывать нотификации через метод ServiceWorkerRegistration.showNotification()
.
Каждая подписка уникальна по отношению к service worker. Адрес для подписки это уникальный capability URL: все что нужно чтобы отослать сообщение вашему приложению это адрес. Однако это URL необходимо держать в секрете, иначе любое другое приложение сможет слать push уведомление к вашему приложению.
Использование service worker для получения push уведомлений может привести к повышенному потреблению ресурсов, например это может влиять на расход батареи. Во всех браузерах это работает по разному - нет стандарта на этот счет. К примеру Firefox позволяет лишь ограниченное число уведомлений которое может быть отправлено приложению, а Chrome не имеет таких ограничений, однако обязывает показывать уведомление пользователю каждый раз, чтобы пользователь мог решить хочет он или нет принимать их дальше.
Примечание: Начиная с Gecko 44, разрешенная квота push-уведомлений для каждого приложения не увеличивается, в случае если новое уведомление срабатывает когда другое все еще должна отображаться в течение трех секунд. Это обрабатывает случаи, когда получены несколько Push уведомлений подряд и не все генерируют видимое уведомление.
Примечание: Так же Chrome обязывает регистрировать проект в Google Cloud Messaging для отправки push сообщений, а также использовать присвоенный номер проекта и API ключ когда отправляются push уведомления. К тому же требуется наличие манифеста приложения с некоторыми параметрами для использования этого сервиса. Возможно эти ограничения будут убраны в будущем.
Интерфейсы
PushEvent
- Представляет собой push действие отправленное в global scope
ServiceWorker
-а. Содержит информацию отправленную вPushSubscription
. PushManager
- Предоставляет способ для получения уведомлений из сторонних серверов, а также из URL запросов для push уведомлений. Этот интерфейс заменил устаревшую функциональность интерфейса
PushRegistrationManager
. PushMessageData
- Предоставляет доступ к push данным отправленным сервером и включает методы для манипулирования полученными данными.
PushSubscription
- Предоставляет конечную точку URL подписки и позволяет отписаться от push сервиса.
Служебный работник дополнения
Следущие дополнения к Service Worker API описанные в спецификации Push API, представляют собой первостепенные действия для использования Push сообщений, а также для обработки push событий.
ServiceWorkerRegistration.pushManager
Только для чтения- Возвращает ссылку на интерфейс
PushManager
для манипулирования push подписок включая подписование, получение активной подписки и доступ к статусу push разрешения. Это входная точка к обмену push сообщениями. ServiceWorkerGlobalScope.onpush
- Данный обработчик событий вызывается всякий раз когда происходит событие
push
; то есть всегда когда принимается push сообщение сервера. ServiceWorkerGlobalScope.onpushsubscriptionchange
- Данный обработчик событий вызывается всякий раз когда происходит событие
pushsubscriptionchange
; например, когда push подписка стала недействительной или собирается быть недействительной (к примеру, когда push сервис устанавливает время истечения.)
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
Push API | Рабочий черновик | Initial definition |
Совместимость браузера
Свойство | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Базовая поддержка | 42.0 | 44.0 (44.0)[1] | ?[2] | ? | ? |
PushEvent.data ,PushMessageData |
50.0 | 44.0 (44.0) | Нет | Нет | Нет |
Свойство | Android | Android Webview | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|---|
Базовая поддержка | Нет | Нет | Нет | Нет | ?[2] | ? | ? | 51.0 |
PushEvent.data ,PushMessageData |
Нет | Нет | Нет | Нет | Нет | Нет | Нет | 51.0 |
[1] В настоящее время доступно только для настольных версий Firefox; также push-сообщения доставляются только во время работы Firefox.
Смотрите также
- Using the Push API
- Push API Demo, на Github
- Push Notifications on the Open Web, Matt Gaunt
- Service Worker API