Look good !+1 to discuss later how to "unify" the message APIRegarding the message formats, don't we want to also define what the format of the message responses are ?On Mon, May 27, 2013 at 1:51 PM, Matthias Wessendorf <matzew@apache.org> wrote:
_______________________________________________This document is devided in two sections:
- Native Push (Android and iOS)
- SimplePush (web-based Push)
Native Push
The Unified Push Server allows two different ways to send message to the native Push API, of the supported devices:
- broadcast
- to all
MobileVariants
and theirMobileVariant Instances
(devices)- to one specific
MobileVariant
and itsMobileVariant Instances
(devices)- seletive Send
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 aPushApplication
and ALLMobileVariantIncances will receive the message.If the
ag-mobile-variant
header is used, a message is send to a particularMobileVariant
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:
alert
(triggers a dialog, displaying the value - no iOS API needs to be invoked by the app developer)sound
(plays a given sound - no iOS API needs to be invoked by the app developer)badge
(sets the value of the badge icon - no iOS API needs to be invoked by the app developer)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:
alias
: A list of email address (or usernames) to send messages to ALL devices of the users. Thealias
needs to be stored, when the device is registering itself with the server. See here for detailsdeviceType
: A list of raw devices types that should receive the message (e.g. Coupon only for iPad and AndroidTablets). ThedeviceType
needs to be stored, when the device is registering itself with the server. See here for detailsMessage 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
- seletive Send
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
variantcurl -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
andNativePush
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 to
SimplePush
Variant.--
Matthias Wessendorf
blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf
aerogear-dev mailing list
aerogear-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev
_______________________________________________
aerogear-dev mailing list
aerogear-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev