PushSubscription
Базовая версия 2023
Новое
С марта 2023 года эта функция работает на последних версиях устройств и браузеров. Возможно, эта функция не будет работать на более старых устройствах или браузерах.
Защищённый контекст: Эта функция доступна только в защищённых контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Веб-воркерах.
Интерфейс PushSubscription API Push предоставляет конечную точку URL подписки, а также открытый ключ и секреты, которые следует использовать для шифрования сообщений push для этой подписки. Эта информация должна быть передана серверу приложения с помощью любого желаемого метода, специфичного для приложения.
Интерфейс также предоставляет информацию о том, когда подписка истечёт, и метод для отписки от подписки.
Свойства экземпляра
-
PushSubscription.endpointТолько для чтения -
Строка, содержащая конечную точку, связанную с подпиской push.
-
PushSubscription.expirationTimeТолько для чтения -
DOMHighResTimeStampвремени истечения срока действия подписки, связанной с подпиской push, если таковая имеется, в противном случае null. -
PushSubscription.optionsТолько для чтения -
Объект, содержащий параметры, используемые для создания подписки.
-
PushSubscription.subscriptionIdУстарело Только для чтения Нестандартно -
Строка, содержащая идентификатор подписки, связанный с подпиской push.
Методы экземпляра
PushSubscription.getKey()-
Возвращает
ArrayBuffer, содержащий открытый ключ клиента, который затем может быть отправлен на сервер и использован для шифрования данных сообщений push. PushSubscription.toJSON()-
Стандартный сериализатор — возвращает JSON-представление свойств подписки.
PushSubscription.unsubscribe()-
Запускает асинхронный процесс отписки от службы push, возвращая
Promise, который разрешается в булево значение, когда текущая подписка успешно удаляется.
Описание
Каждый браузер использует определённую службу push. Сервис-воркер может использовать PushManager.subscribe() для подписки на поддерживаемую службу и использовать возвращённое значение PushSubscription для определения конечной точки, куда следует отправлять сообщения push.
Также PushSubscription используется для получения открытого ключа и секрета, которые сервер приложения должен использовать для шифрования сообщений, которые он отправляет в службу push. Обратите внимание, что закрытые ключи, используемые для расшифровки сообщений push, не разделяются браузером и используются для расшифровки сообщений перед передачей в сервис-воркер. Это гарантирует, что сообщения push остаются конфиденциальными во время прохождения через инфраструктуру сервера push.
Сервис-воркер не должен знать ничего о конечных точках или шифровании, кроме как передать соответствующую информацию на сервер приложения. Для обмена информацией с сервером приложения можно использовать любой механизм.
Пример
Отправка кодировочной информации на сервер
Открытый ключ p256dh и секрет auth, используемые для шифрования сообщения, предоставляются сервис-воркеру через его подписку push с помощью метода PushSubscription.getKey(), а также целевая конечная точка для отправки сообщений push в PushSubscription.endpoint. Кодировка, которая должна использоваться для шифрования, предоставляется статическим свойством PushManager.supportedContentEncodings.
В этом примере показано, как вы можете поместить необходимую информацию из PushSubscription и supportedContentEncodings в JSON-объект, сериализовать его с помощью JSON.stringify() и отправить результат на сервер приложения.
// Get a PushSubscription object
const pushSubscription = await serviceWorkerRegistration.pushManager.subscribe();
// Create an object containing the information needed by the app server
const subscriptionObject = {
endpoint: pushSubscription.endpoint,
keys: {
p256dh: pushSubscription.getKeys('p256dh'),
auth: pushSubscription.getKeys('auth'),
},
encoding: PushManager.supportedContentEncodings,
/* other app-specific data, such as user identity */
};
// Stringify the object an post to the app server
fetch(`https://example.com/push/`, {
method: "post",
body: JSON.stringify(subscriptionObject);
});
Отписка от менеджера push
navigator.serviceWorker.ready.then((reg) => {
reg.pushManager.getSubscription().then((subscription) => {
subscription
.unsubscribe()
.then((successful) => {
// You've successfully unsubscribed
})
.catch((e) => {
// Unsubscribing failed
});
});
});
Спецификации
| Спецификация |
|---|
| Push API # pushsubscription-interface |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
PushSubscription |
42 | 17 | 44 | 29 | 16Уведомления поддерживаются в macOS Ventura и более поздних версиях. |
42 | 48 | 29 | 16.4Уведомления поддерживаются в веб-приложениях, сохранённых на главном экране. |
4.0 | Нет |
endpoint |
42 | 17 | 44 | 29 | 16Уведомления поддерживаются в macOS Ventura и более поздних версиях. |
42 | 48 | 29 | 16.4Уведомления поддерживаются в веб-приложениях, сохранённых на главном экране. |
4.0 | Нет |
expirationTime |
60 | 17 | 96 | 47 | 16Уведомления поддерживаются в macOS Ventura и более поздних версиях. |
60 | 96 | 44 | 16.4Уведомления поддерживаются в веб-приложениях, сохранённых на главном экране. |
8.0 | Нет |
getKey |
42 | 17 | 44 | 29 | 16Уведомления поддерживаются в macOS Ventura и более поздних версиях. |
42 | 48 | 29 | 16.4Уведомления поддерживаются в веб-приложениях, сохранённых на главном экране. |
4.0 | Нет |
options |
54 | 17 | 44 | 41 | 16Уведомления поддерживаются в macOS Ventura и более поздних версиях. |
54 | 48 | 41 | 16.4Уведомления поддерживаются в веб-приложениях, сохранённых на главном экране. |
6.0 | Нет |
subscriptionId |
42 | 17 | Нет | 29 | Нет | 42 | Нет | 29 | Нет | 4.0 | Нет |
toJSON |
42 | 17 | 44 | 29 | 16Уведомления поддерживаются в macOS Ventura и более поздних версиях. |
50 | 48 | 37 | 16.4Уведомления поддерживаются в веб-приложениях, сохранённых на главном экране. |
5.0 | Нет |
unsubscribe |
42 | 17 | 44 | 29 | 16Уведомления поддерживаются в macOS Ventura и более поздних версиях. |
50 | 48 | 37 | 16.4Уведомления поддерживаются в веб-приложениях, сохранённых на главном экране. |
5.0 | Нет |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription