aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/pushmanager/index.html
blob: 28ba565023a5caf74eb8d211a8114be199f8d49d (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
---
title: PushManager
slug: Web/API/PushManager
tags:
  - API
  - Experimental
  - Interface
  - NeedsTranslation
  - Push
  - Push API
  - Reference
  - Service Workers
  - TopicStub
translation_of: Web/API/PushManager
---
<p>{{SeeCompatTable}}{{ApiRef("Push API")}}</p>

<p><a href="/en-US/docs/Web/API/Push_API">Push API</a> 的<code>PushManager</code>接口提供了从第三方服务器接收消息通知的能力。</p>

<p>可以通过ServiceWorkerRegistration.pushManager属性获得</p>

<div class="note">
<p><strong>注意</strong>: 这个属性替代了已被废弃的{{domxref("PushRegistrationManager")}}</p>
</div>

<h2 id="Properties">Properties</h2>

<p><em>None.</em></p>

<h2 id="Methods">Methods</h2>

<dl>
 <dt>{{domxref("PushManager.getSubscription()")}}</dt>
 <dd>用于获取已经存在的push订阅。返回一个{{jsxref("Promise")}},这个{{jsxref("Promise")}}包装着push订阅信息的{{domxref("PushSubscription")}}对象。如果没有已经存在的订阅,则返回<code>null</code></dd>
 <dt>{{domxref("PushManager.permissionState()")}}</dt>
 <dd>返回一个{{jsxref("Promise")}},标识这当前{{domxref("PushManager")}}的权限状态,只能是<code>'granted'<font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;"></span></font></code><code>'denied'</code> ,<code>'prompt'</code>中的一种。</dd>
 <dt>{{domxref("PushManager.subscribe()")}}</dt>
 <dd>向push服务器(即第三方push server)发起订阅。返回一个{{jsxref("Promise")}},这个{{jsxref("Promise")}}包装着push订阅信息的{{domxref("PushSubscription")}}对象。如果当前的service worke没有已经存在的订阅,则会创建一个新的push订阅。</dd>
</dl>

<h3 id="已废弃的方法">已废弃的方法</h3>

<dl>
 <dt>{{domxref("PushManager.hasPermission()")}} {{deprecated_inline}}</dt>
 <dd>(已废弃)返回一个{{jsxref("Promise")}},标识着该webapp的<code>PushPermissionStatus</code>状态,该状态只能是<code>'granted'<font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;"></span></font></code><code>'denied'</code> ,<code>'default'</code>中的一种。目前已经被{{domxref("PushManager.permissionState()")}}取代。</dd>
 <dt>{{domxref("PushManager.register()")}} {{deprecated_inline}}</dt>
 <dd>(已废弃)发起注册push订阅。目前已经被{{domxref("PushManager.subscribe()")}}取代。</dd>
 <dt>{{domxref("PushManager.registrations()")}} {{deprecated_inline}}</dt>
 <dd>(已废弃)返回已存在的push订阅信息。目前已经被{{domxref("PushManager.getSubscription()")}}取代。</dd>
 <dt>{{domxref("PushManager.unregister()")}} {{deprecated_inline}}</dt>
 <dd>(已废弃)取消注册并删除指定的注册信息。在更新后的API中,请使用 {{domxref("PushSubscription.unsubscribe()")}}方法取消注册。</dd>
</dl>

<h2 id="示例">示例</h2>

<pre class="brush: js">this.onpush = function(event) {
  console.log(event.data);
  // 这里我们可以将数据写入IndexedDB,发送给其他window对象,或者显示一个通知
}

navigator.serviceWorker.register('serviceworker.js').then(
  function(serviceWorkerRegistration) {
    serviceWorkerRegistration.pushManager.subscribe().then(
      function(pushSubscription) {
        console.log(pushSubscription.subscriptionId);
        console.log(pushSubscription.endpoint);
        // 现在我们已经获取到了服务器需要的push订阅信息,我们可以使用XHR将它们发送给服务器
      }, function(error) {
        // 在开发环境下打印错误是很有帮助的。在生产环境下,将错误上报到服务器也是十分必要的
        console.log(error);
      }
    );
  });</pre>

<h2 id="Specifications">Specifications</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','#pushmanager-interface','PushManager')}}</td>
   <td>{{Spec2('Push API')}}</td>
   <td>Initial definition.</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility">Browser compatibility</h2>

<div>{{CompatibilityTable}}</div>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari (WebKit)</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>{{CompatChrome(42.0)}}</td>
   <td>{{CompatGeckoDesktop(44.0)}}<sup>[1]</sup></td>
   <td>{{CompatNo}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatNo}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Android</th>
   <th>Android Webview</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>Firefox OS</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
   <th>Chrome for Android</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatGeckoMobile(48)}}<sup>[2]</sup></td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatChrome(42.0)}}</td>
  </tr>
 </tbody>
</table>
</div>

<ul>
 <li>[1] Push (and <a href="/en-US/docs/Web/API/Service_Worker_API">Service Workers</a>) have been disabled in the <a href="https://www.mozilla.org/en-US/firefox/organizations/">Firefox 45 Extended Support Release</a> (ESR.)</li>
 <li>[2] Push has been enabled by default on Firefox for Android version 48.</li>
</ul>

<h2 id="See_also">See also</h2>

<ul>
 <li><a href="/en-US/docs/Web/API/Push_API/Using_the_Push_API">Using the Push API</a></li>
 <li><a href="/en-US/docs/Web/API/Push_API">Push API</a></li>
 <li><a href="/en-US/docs/Web/API/Service_Worker_API">Service Worker API</a></li>
</ul>