这是
实验性技术
检查
浏览器兼容性表格
要小心谨慎在生产中使用这之前。
subscribe()
方法在
PushManager
interface subscribes to a push service.
It returns a
Promise
解析为
PushSubscription
object containing details of a push subscription. A new push subscription is created if the current service worker does not have an existing subscription.
PushManager.subscribe(options).then(function(pushSubscription) { ... } );
选项
可选
userVisibleOnly
: A boolean indicating that the returned push subscription will only be used for messages whose effect is made visible to the user.
applicationServerKey
: A Base64-encoded
DOMString
or
ArrayBuffer
containing an
ECDSA
P-256 public key that the push server will use to authenticate your application server. If specified, all messages from your application server must use the
VAPID
authentication scheme, and include a JWT signed with the corresponding private key. This key
IS NOT
the same ECDH key that you use to encrypt the data. For more information, see "
Using VAPID with WebPush
".
注意: This parameter is required in some browsers like Chrome and Edge.
A
Promise
解析为
PushSubscription
对象。
this.onpush = function(event) {
console.log(event.data);
// From here we can write the data to IndexedDB, send it to any open
// windows, display a notification, etc.
}
navigator.serviceWorker.register('serviceworker.js');
// Use serviceWorker.ready to ensure that you can subscribe for push
navigator.serviceWorker.ready.then(
function(serviceWorkerRegistration) {
var options = {
userVisibleOnly: true,
applicationServerKey: applicationServerKey
};
serviceWorkerRegistration.pushManager.subscribe(options).then(
function(pushSubscription) {
console.log(pushSubscription.endpoint);
// The push subscription details needed by the application
// server are now available, and can be sent to it using,
// for example, an XMLHttpRequest.
}, function(error) {
// During development it often helps to log errors to the
// console. In a production environment it might make sense to
// also report information about errors back to the
// application server.
console.log(error);
}
);
});
subscribe()
calls should be done in response to a user gesture, such as clicking a button, for example:
btn.addEventListener('click', function() {
serviceWorkerRegistration.pushManager.subscribe(options)
.then(function(pushSubscription) {
// handle subscription
});
})
This is not only best practice — you should not be spamming users with notifications they didn't agree to — but going forward browsers will explicitly disallow notifications not triggered in response to a user gesture. Firefox is already doing this from version 72, for example.
| 规范 | 状态 | 注释 |
|---|---|---|
|
Push API
The definition of 'subscribe()' in that specification. |
工作草案 | 初始定义。 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
subscribe
|
Chrome
42
|
Edge
16
Disabled
|
Firefox
44
|
IE 不支持 No | Opera 29 | Safari 不支持 No | WebView Android 不支持 No | Chrome Android 42 |
Firefox Android
48
|
Opera Android 29 | Safari iOS 不支持 No | Samsung Internet Android 4.0 |
完整支持
不支持
实验。期望将来行为有所改变。
见实现注意事项。
用户必须明确启用此特征。