WebAPI/SimplePush: Difference between revisions

fix
(fix)
 
(107 intermediate revisions by 12 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(DOMString topic);
 
  // registers to stop receiving push notifications for a given topic
  // DOMRequest.result is a PushRegistration in case of success
  DOMRequest unregister(DOMString topic);
 
  // returns the list of all push registrations for this origin
  PushRegistration[] registered();
 
  // event MUST be of type PushEvent
  attribute EventHandler onmessage;
};
 
interface PushRegistration {
 
  // this is the string that was used when calling register()
  DOMString topic;
 
  // 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 pushRequestID;
 
};
 
interface PushEvent : Event {
 
  // this is topic string used when registering for push notifications
  DOMString topic;
 
  // this is the most current version
  unsigned long long version;
}
 
</pre>
 
== Client Example ==
<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
navigator.pushNotification.onmessage = function(e) {
  e.topic == This is the topic that is being observed
  e.version == This is the current version for this topic
});
 
 
// to register to listen for a notification,
// you simply call push.register and pass a
// topic of interest:
 
var req = navigator.pushNotifications.register("topic");
 
 
// success callback
req.onsuccess(e) = function() {
  // post to application server
  e.target.result.pushEndpoint
  e.target.result.pushRequestID
}
 
req.onerror() = function(e) {}
 
// to unregister, you simply call..
 
req = navigator.pushNotifications.unregister("topic");
req.onsuccess() = function() {}
req.onerror() = function() {}
 
</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.
 
==== POST /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.
 
===== Return Value =====
{ "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/delete/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":[{"foo1234","1.2"},{"gorp789","20121210164802-a"}]}
 
==== POST /update ====
 
Refresh the server from the client.
 
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.
 
===== Arguments =====
The POST body is a JSON encoded block which matches the form and structure of the GET /update/ request.
 
===== Returns =====
This will return an empty object.
 
===== Example =====
 
POST http://push.m.o/update
{"channels":[{"foo1234","1.2"},{"gorp789","20121210164802-a"}]}
---
{}
 
==== 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
---
{}
Confirmed users
964

edits