This document is devided in two sections:

Native Push

The Unified Push Server allows two different ways to send message to the native Push API, of the supported devices:

Broadcast

curl -v -H "Accept: application/json" -H "Content-type: application/json" 
   -H "ag-push-application: {PushApplicationID}
   -H "ag-mobile-variant: {MobileVariantID}
   -X POST
   -d '{"key":"value", "key2":"other value", "alert":"HELLO!", "sound":"default", "badge":7}'

http://localhost:8080/ag-push/rest/sender/broadcast 

If the ag-push-application header is used, a message is send to a PushApplication and ALLMobileVariantIncances will receive the message.

If the ag-mobile-variant header is used, a message is send to a particular MobileVariant and ALL of its MobileVariantIncances will receive the message.

Message Format

The message format is very simple: A generic JSON map is used to send messages to Android and iOS devices. The applications on the devices will receive the JSON map and are responsible for performing a lookup to read values of the given keys.

iOS special keys

If the JSON map contains on of the following reserved keywords, Apple specific hooks will be invoked on the device:

Android special keys

None! The JSON map is submitted as it is, directly to the device. There are no Android specific keywords.

Selective Send

A message is send to a restricted number of MobileVariantIncances, based on a given criteria. The following example shows the correspondent HTTP interface:

curl -v -H "Accept: application/json" -H "Content-type: application/json" 
   -X POST

   -d '{
      "alias" : ["user@account.com", "jay@redhat.org", ....],

      "deviceType" : ["iPad", "AndroidTablet"],

      "message": {"key":"value", "key2":"other value", "alert":"HELLO!"}
   }'

http://localhost:8080/ag-push/rest/sender/selected/{PushApplicationID} 

Message Format

Besides the actual payload the the API accepts a few classifiers to select a subset of registered devices.

Query component

Currently the Server will support the following query criterias:

Message Payload

The message format is very simple: A generic JSON map is used to send messages to Android and iOS devices. The applications on the devices will receive the JSON map and are responsible for performing a lookup to read values of the given keys. Like above, iOS specific keywords are honored.

SimplePush

The Unified Push Server allows two different ways to send message to SimplePush-enabled devices:

Broadcast

Sends a message to all connected devices of a SimplePush variant. The message (aka version) will be received on the broadcast channel (AeroGear specific broadcast channel, not part of the official spec).

curl -v -H "Accept: application/json" -H "Content-type: application/json"

    -X POST
    -d '{"version":1234}'

http://localhost:8080/ag-push/rest/sender/simplePush/broadcast/{SimplePushVariantID}

Message Format

The message format is very simple: The version number is send to the server, as a JSON object.

Selective Send

A message is send to a selected number of channels, connected against a specific SimplePush variant

curl -v -H "Accept: application/json" -H "Content-type: application/json"
    -X POST 
  -d '{
      "channelIDs":["someID", "moreID...."],
      "version":1909
      }'
http://localhost:8080/ag-push/rest/sender/simplePush/selected/{SimplePushVariantID} 

Message Format

The message format is very simple: A JSON object, containing the actual payload (version) and an array, containing all the different channels.

Discussion

SimplePush and NativePush do have different APIs / endpoints. However, that's mainly because the SimplePush is really.... simple.... and not 100% compliant with the richer APIs for Android/iOS.

We could (later?) try to unify the API and simply IGNORE everything besides the version, when talking toSimplePush Variant.


--
Matthias Wessendorf

blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf