aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/pushmanager/subscribe/index.html
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>