Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 1106455 of PushManager.subscribe()

  • Revision slug: Web/API/PushManager/subscribe
  • Revision title: PushManager.subscribe()
  • Revision id: 1106455
  • Created:
  • Creator: JessevanAssen
  • Is current revision? Yes
  • Comment Type error in parameters

Revision Content

{{SeeCompatTable}}{{ApiRef("Push API")}}

The subscribe() method of the {{domxref("PushManager")}} interface subscribes to a push service.

It returns a {{jsxref("Promise")}} that resolves to a {{domxref("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.

Syntax

​PushManager.subscribe(options).then(function(pushSubscription) { ... } );

Parameters

options {{optional_inline}}
An object containing optional configuration parameters. It can have the following properties:
  • 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 public key your push server will use to send messages to client apps via a push server. This value is part of a signing key pair generated by your application server and usable with elliptic curve digital signature (ECDSA) over the P-256 curve. 

Returns

A {{jsxref("Promise")}} that resolves to a {{domxref("PushSubscription")}} object.

Example

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').then(
  function(serviceWorkerRegistration) {
    serviceWorkerRegistration.pushManager.subscribe().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);
      }
    );
  });

Specifications

Specification Status Comment
{{SpecName('Push API', '#widl-PushManager-subscribe-Promise-PushSubscription--PushSubscriptionOptions-options', 'subscribe()')}} {{Spec2('Push API')}} Initial definition.

Browser compatibility

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support {{CompatChrome(42.0)}} {{CompatGeckoDesktop(44.0)}}[1] {{CompatNo}} {{CompatUnknown}} {{CompatNo}}
applicatonServerKey {{CompatChrome(52.0)}}     39  
Feature Android Android Webview Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile(48)}}[2] {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatChrome(42.0)}}
applicatonServerKey {{CompatNo}} {{CompatNo}}       {{CompatChrome(52.0)}}   {{CompatChrome(52.0)}}

See also

Revision Source

<p>{{SeeCompatTable}}{{ApiRef("Push API")}}</p>

<p>The <strong><code>subscribe()</code></strong> method of the {{domxref("PushManager")}} interface subscribes to a push service.</p>

<p>It returns a {{jsxref("Promise")}} that resolves to a {{domxref("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.</p>

<h2 id="Syntax">Syntax</h2>

<pre class="syntaxbox">
​PushManager.subscribe(options).then(function(pushSubscription) { ... } );</pre>

<h3 id="Parameters">Parameters</h3>

<dl>
 <dt><code>options {{optional_inline}}</code></dt>
 <dd>An object containing optional configuration parameters. It can have the following properties:
 <ul>
  <li><code>userVisibleOnly</code>: A boolean indicating that the returned push subscription will only be used for messages whose effect is made visible to the user.</li>
  <li><code>applicationServerKey</code>: A public key your push server will use to send messages to client apps via a push server. This value is part of a signing key pair generated by your application server and usable with&nbsp;elliptic curve digital signature (ECDSA) over the P-256 curve.&nbsp;</li>
 </ul>
 </dd>
</dl>

<h3 id="Returns">Returns</h3>

<p>A {{jsxref("Promise")}} that resolves to a {{domxref("PushSubscription")}} object.</p>

<h2 id="Example">Example</h2>

<pre class="brush: js">
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').then(
  function(serviceWorkerRegistration) {
    serviceWorkerRegistration.pushManager.subscribe().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);
      }
    );
  });</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', '#widl-PushManager-subscribe-Promise-PushSubscription--PushSubscriptionOptions-options', 'subscribe()')}}</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>
  <tr>
   <td><code>applicatonServerKey</code></td>
   <td>{{CompatChrome(52.0)}}</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>39</td>
   <td>&nbsp;</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>
  <tr>
   <td><code>applicatonServerKey</code></td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>&nbsp;</td>
   <td>{{CompatChrome(52.0)}}</td>
   <td>&nbsp;</td>
   <td>{{CompatChrome(52.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>
</ul>
Revert to this revision