Hi Folks,
We can divide the creation of a message in 2 main
parts :
- The "signalling" part : list of client
identifiers / specific devices etc ...
- The "core" message containing actually the
information we want to push
Both are passed as Map and are finally converted
into JSON.
Here an example of how a "core" message is build :
Map categories = new HashMap();
categories.put("lead", "version="+leadVersion++);
Map json = new HashMap();
json.put("id", lead.getId());
json.put("messageType", "pushed_lead");
json.put("name", lead.getName());
json.put("location", lead.getLocation());
json.put("phone", lead.getPhoneNumber());
json.put("simple-push", categories);
json.put("sound" ,"default");
json.put("alert" ,"A new lead has been created");
Even the format is open, we could "assist" a bit
the developer in building the message. For that we have
different options :
- Propose a simple Message object containing the
message "API" :
Message message = new Message();
message.setClientIdentifiers("jake","maria");
message.enableSound();//by default use "default" or we could do message.enableSound("boing")
message.setAlert("Watch out!);
message.setAttribute("customAttribute","yo"); // custom simple strings
message.setAttribute("customStructure",myObject); // passing objects
- Propose a Message Builder (following the Builder
Pattern) to propose a more fluent API :
Message message = new Message().builder()
.clientIdentifiers("jake","maria")
.enableSound()
.alert("AAAAHHH!")
.attribute("customAttribute","yo")
.attribute("customStructure",myObject)
.build()
- Same as above but more DSL focused (not sure
about this one ;) )
Message message = MessageDSL.to("jake","maria").withSound() //etc ...
So, beside that we have to discuss what we want
allow to pass to the message API : only Strings and simple
Maps ? Full Objects that will be JSONified ?