based on the "unification issues" (see old thread), Dan, Kris and I met


here is what we have come up with:




Draft for the AeroGear Push Message Format

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", "alert":"HELLO!", "sound":"default", "badge":7,
       "simple-push":"version=123"}'

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

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

If the ag-mobile-variant header is used, a message is send to a particular MobileVariant and ALL of its MobileVariantInstances 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.

SimplePush special keys

Every AeroGear-SimplePush application can subscribe to a broadcast channel. If, on the abovebroadcast Endpoint, you are providing the simple-push key, the version (that's what SimplePush is really about), is extracted and send to ALL "connected" broadcast channels, of the given SimplePush variant(s). NOTE: On all other platforms, the simple-push key will be simply :-) ignored. Also, for SimplePush, all OTHER keys are ignored (since that does not make sense for SP).

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 MobileVariantInstances, 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!",
        "simple-push": { "SomeCategory":"version=123", "anotherCategory":"version=456"}
      }
   }'

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

Message Format

Besides the actual payload 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

For SimplePush an extra simple-push object is provided. Only for SimplePush Variants this key is used (similar to the broadcast case). However HERE we use an object, to send (selective) different versions to different channels.











'Thoughts ??