WebAPI/SimplePush: Difference between revisions

(fix)
 
(93 intermediate revisions by 11 users not shown)
Line 1: Line 1:
<h2> Client Side API </h2>
<p style="border:2px solid red;border-radius:5px;background-color:#FFF;box-shadow:5px 5px 10px #888;padding:.5em;text-align:center;text-weight:bold;font-size:120%;">'''For documentation on <b>Using SimplePush in your App</b>, please see [https://developer.mozilla.org/en-US/docs/Web/API/Simple_Push_API the MDN SimplePush Documentation]'''</p>
<pre>


partial interface Navigator {
<p style="border:2px solid red;border-radius:5px;background-color:#FFF;box-shadow:5px 5px 10px #888;padding:.5em;text-align:center;text-weight:bold;font-size:120%;">'''For documentation on <b>the Service</b>, please see [http://mozilla-push-service.readthedocs.org/en/latest/ the Mozilla Push Service Documentation]'''</p>
  PushNotification pushNotification;
};


interface PushNotification&#160;: EventTarget {
Go here for [[Firefox/Push_Notifications|project page]]


  // registers to receive push notifications for a given topic
[[Category:Web APIs]]
  // DOMRequest.result is a PushRegistration in case of success
  DOMRequest register();
 
  // registers to stop receiving push notifications for a given topic
  // DOMRequest.result is a PushRegistration in case of success
  DOMRequest unregister(ChannelID channelID);
 
  // returns the list of all push registrations for this origin
  PushRegistration[] registrations();
};
 
interface PushRegistration {
  // this is the URL to which push notifications from the web application
  // must be sent to.
  // application should send this and pushRequestID as a pair to the
  // application server
  DOMString pushEndpoint;
 
  // this is the push request id that must be sent to the push server with
  // every push notification update
  DOMString channelID;
};
 
interface PushEvent : Event {
  // this is topic string used when registering for push notifications
  DOMString channelID;
 
  // this is the most current version
  unsigned long long version;
}
 
</pre>
 
== Client Example ==
 
=== App manifest ===
<pre>
 
{
  ...
  "permissions": {
    ...
    "push": {
      "description": "Check for new mail"
    }
  },
  "messages": [
    {"notification": "/view_to_launch.html"}
    {"notification-register": "/view_to_launch.html"}
  ]
}
 
</pre>
 
=== JavaScript ===
<pre>
 
// all notifications will be sent to the system message handler.
// which is up to the U/A to implement
 
// apps can do something like
// This handler may be triggered *immediately* after mozSetMessageHandler is called
// so applications should ensure they are ready (UI created, state loaded etc.)
navigator.mozSetMessageHandler('push-register', {
  handleMessage: function(e) {
    // (re)issue register() calls
    // to register to listen for a notification,
    // you simply call push.register
    navigator.pushNotifications.register();
  }
});
 
navigator.mozSetMessageHandler('push', {
  handleMessage: function(e) {
    e.channelID == This is the topic that is being observed
    e.version == This is the current version for this topic
  }
});
 
 
// to unregister, you simply call..
 
navigator.pushNotifications.unregister(channelID);
</pre>
 
== Server API ==
 
=== Definitions ===
;UserAgent
:The client acting on behalf of the user and consumer of update notices
 
;UAID
:A server generated, globally unique UserAgent ID
 
;PushServer
:The server managing interactions between AppServers and the UserAgent
 
;AppServer
:The third party publisher of update notices
 
;Channel
:The flow of information from AppServer through PushServer to UserAgent
 
;ChannelID
:Globally Unique identifier for a Channel
 
UserAgent and AppServer will use a RESTful API to interact with the Push Server.
 
=== API ===
* Requests from UserAgent to PushServer MUST provide a PushServer Generated UserAgentID (UAID) as the "X-UserAgent-ID" header.
* UserAgent requests may include a /{network} prefix to indicate a request may be handled by a third party network (e.g. <code>GET http:<i>host</i>/foonet/update</code> will return update requests for elements provided by the "foonet" sub-provider.
* Calls will return standard HTTP status headers.
* Calls will return status 200 (unless otherwise noted below).
* On Errors, calls will return a proper error code, and where permitted, a standard JSON block containing information regarding the error. The contents of this block are not intended for end user display and have yet to be finalized.
 
==== GET /register ====
Request a new ChannelID.
 
If the <i>X-UserAgent-ID</i> is not provided, the UserAgent is presumed to be new and a new UserAgentID will be generated for the UserAgent.
 
===== Arguments =====
 
No additional arguments are required.
 
===== Returns =====
{ "channelID": "New Channel ID",
  "uaid": "UserAgent ID"
}
 
NOTE: The uaid is either the X-UserAgent-ID value echoed back, or a new X-UserAgent-ID value to be used for all subsequent calls if no X-UserAgent-ID was present.
 
===== Example =====
GET http://push.m.o/register
---
{"channelID": "foo1234", "uaid": "bar5678"}
 
==== DELETE /<ChannelID> ====
Delete an associated ChannelID. Subsequent calls to this ChannelID will result in a 404 status.
 
NOTE: the X-UserAgent-ID Header must be present and match the one associated with this ChannelID
 
===== Arguments =====
There are no arguments for this call.
 
===== Returns =====
 
This returns an empty JSON object
{}
===== Example =====
DELETE http://push.m.o/unregister/foo1234
---
{}
 
==== GET /update ====
Return a list of known ChannelIDs and current versions.
 
NOTE: the X-UserAgent-ID must be provided and match the value returned by the <code>/register</code> call.
 
===== Arguments =====
There are no arguments for this call.
 
===== Returns =====
This will return a hash containing a list of hashes defining the known, associated Channels and versions.
 
NOTE: If the server is unable to determine previous data for this X-UserAgent-ID, it will return a 410.
See <code>POST /update</code> for details.
===== Example =====
 
GET http://push.m.o/update
---
{"channels":[{"channelID":"1ced595d7f6c9f60cc5c9395dc6b72aa7e1a69a7","version":"42"},{"channelID":"bf08e25861c900c3ab343670eee1873d0b724eef","version":"1"}]}
 
<h4> POST /update </h4>
<p>Refresh the server from the client.
</p><p>This request requires a X-UserAgent-ID header. If the UserAgent attempts to POST information to the server which already has data for that X-UserAgent-ID, the server will deny the request with a 403 error. In that case, the UserAgent should request re-registration for all Channels.
</p>
 
<h5> Arguments </h5>
<p>The POST body is a JSON encoded block which matches the form and structure of the GET /update/ request.
</p>
<h5> Returns </h5>
<p>This will return an empty object.
</p>
<h5> Example </h5>
<pre class="_fck_mw_lspace">POST http://push.m.o/update
{&quot;channels&quot;:[{&quot;channelID&quot;:&quot;1ced595d7f6c9f60cc5c9395dc6b72aa7e1a69a7&quot;,&quot;version&quot;:&quot;42&quot;},{&quot;channelID&quot;:&quot;bf08e25861c900c3ab343670eee1873d0b724eef&quot;,&quot;version&quot;:&quot;1&quot;}]}
</pre>
<pre class="_fck_mw_lspace">---
{}
</pre>
 
==== PUT /update/<ChannelID> ====
 
Update the version of a given channel.
 
Arguments should be passed as standard form data (enctype: multipart/form-data)
This call does not require a X-UserAgent-ID, as it may be called by the AppServer.
 
===== Arguments  =====
version=<version>
 
The version is the AppServer specific VersionID to use. This ID is opaque to the PushServer, however it is suggested that:
* The ID be sequential.
* The ID be less than 100 characters.
* The ID should be UTF8 compliant.
 
===== Returns =====
 
This call returns an empty JSON object.
 
===== Example =====
PUT http://push.m.o/update/foo1234
version=1.3
---
{}

Latest revision as of 00:03, 12 November 2015

For documentation on Using SimplePush in your App, please see the MDN SimplePush Documentation

For documentation on the Service, please see the Mozilla Push Service Documentation

Go here for project page