blob: 9172396f1995ed436e02578d402e257a20fc0b83 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
---
title: PushManager.subscribe()
slug: Web/API/PushManager/subscribe
translation_of: Web/API/PushManager/subscribe
---
<p>{{SeeCompatTable}}{{ApiRef("Push API")}}</p>
<p>{{domxref("PushManager")}} 的 <code><strong>subscribe() </strong></code>接口订阅了一个推送服务。</p>
<p>返回一个 {{jsxref("Promise")}} 形式的 {{domxref("PushSubscription")}} 对象,该对象包含了推送订阅详情。如果当前 service worker 没有已存在的订阅,则会创建一个新的推送订阅。</p>
<h2 id="语法">语法</h2>
<pre class="syntaxbox">PushManager.subscribe(options).then(function(pushSubscription) { ... } );</pre>
<h3 id="参数">参数</h3>
<dl>
<dt><code>options {{optional_inline}}</code></dt>
<dd><code>一个包含可选配置参数的对象。包含以下属性:</code>
<ul>
<li><code>userVisibleOnly</code>: 布尔值,表示返回的推送订阅将只能被用于对用户可见的消息。</li>
<li>applicationServerKey:推送服务器用来向客户端应用发送消息的公钥。该值是应用程序服务器生成的签名密钥对的一部分,可使用在 P-256 曲线上实现的椭圆曲线数字签名(ECDSA)。可以是{{domxref("DOMString")}} 或 {{domxref("ArrayBuffer")}}。</li>
</ul>
</dd>
</dl>
<h3 id="返回值">返回值</h3>
<p>返回 {{domxref("PushSubscription")}} 对象的 {{jsxref("Promise")}}。</p>
<h2 id="示例">示例</h2>
<pre><code>this.onpush = function(event) {
console.log(event.data);
// </code>这里可以向 IndexDB 写入数据,向任何打开的窗口发送数据以及显示通知等<code>
}
navigator.serviceWorker.register('serviceworker.js').then(
function(serviceWorkerRegistration) {
var options = {
userVisibleOnly: true,
applicationServerKey: applicationServerKey
};
serviceWorkerRegistration.pushManager.subscribe(options).then(
function(pushSubscription) {
console.log(pushSubscription.endpoint);
// 应用服务器所需的推送订阅详情现在可用,并且可以通过如 XMLHttpRequest 的方式发送
}, function(error) {
// 开发过程中将错误打印到控制台通常很有帮助。同样,生产环境下将错误信息发送至应用服务器后台也一样。
console.log(error);
}
);
});</code></pre>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName('Push API', '#widl-PushManager-subscribe-Promise-PushSubscription--PushSubscriptionOptions-options', 'subscribe()')}}</td>
<td>{{Spec2('Push API')}}</td>
<td>Initial definition.</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
{{Compat("api.PushManager.subscribe")}}
<h2 id="另见">另见</h2>
<ul>
<li><a href="/en-US/docs/Web/API/Push_API/Using_the_Push_API">使用 Push API</a></li>
</ul>
|