<div dir="ltr">Hi Folks,<div style>As you know we have a Java Sender Library that can be used by any backend application that want to send messages to the Unified Message Push Server (<a href="https://github.com/aerogear/aerogear-unified-push-java-client">https://github.com/aerogear/aerogear-unified-push-java-client</a>).</div>
<div style>The format is quite open and flexible as Matthias described it here : <a href="https://gist.github.com/matzew/b21c1404cc093825f0fb">https://gist.github.com/matzew/b21c1404cc093825f0fb</a><br></div><div style>We can divide the creation of a message in 2 main parts :</div>
<div style><br></div><div style>- The  &quot;signalling&quot; part : list of client identifiers / specific devices etc ...</div><div style>- The &quot;core&quot; message containing actually the information we want to push</div>
<div style><br></div><div style>Both are passed as Map and are finally converted into JSON. </div><div style>Here an example of how a &quot;core&quot; message is build :</div><div style><br></div><div style><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:13px;line-height:19px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(221,221,221);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:rgb(0,0,0);margin-top:0px!important">
<code style="font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:12px;line-height:normal;margin:0px;padding:0px;border:none;background-color:transparent;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">Map categories = new HashMap();
categories.put(&quot;lead&quot;, &quot;version=&quot;+leadVersion++); 
Map json = new HashMap();
json.put(&quot;id&quot;, lead.getId());
json.put(&quot;messageType&quot;, &quot;pushed_lead&quot;);
json.put(&quot;name&quot;, lead.getName());
json.put(&quot;location&quot;, lead.getLocation());
json.put(&quot;phone&quot;, lead.getPhoneNumber());
json.put(&quot;simple-push&quot;, categories);
json.put(&quot;sound&quot; ,&quot;default&quot;);
json.put(&quot;alert&quot; ,&quot;A new lead has been created&quot;);</code></pre></div><div style><br></div><div style>Even the format is open, we could &quot;assist&quot; a bit the developer in building the message. For that we have different options : </div>
<div style>- Propose a simple Message object containing the message &quot;API&quot; :</div><div style><br></div><div style><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:13px;line-height:19px;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(221,221,221);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:rgb(0,0,0)">
<code style="font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:12px;line-height:normal;margin:0px;padding:0px;border:none;background-color:transparent;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">Message message = new Message();
message.setClientIdentifiers(&quot;jake&quot;,&quot;maria&quot;);
message.enableSound();//by default use &quot;default&quot; or we could do message.enableSound(&quot;boing&quot;)
message.setAlert(&quot;Watch out!);
message.setAttribute(&quot;customAttribute&quot;,&quot;yo&quot;); // custom simple strings
message.setAttribute(&quot;customStructure&quot;,myObject); // passing objects</code></pre></div><div style><br></div><div style>- Propose a Message Builder (following the Builder Pattern) to propose a more fluent API : </div>
<div style><br></div><div style><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:13px;line-height:19px;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(221,221,221);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:rgb(0,0,0)">
<code style="font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:12px;line-height:normal;margin:0px;padding:0px;border:none;background-color:transparent;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">Message message = new Message().builder()
  .clientIdentifiers(&quot;jake&quot;,&quot;maria&quot;)
  .enableSound()
  .alert(&quot;AAAAHHH!&quot;)
  .attribute(&quot;customAttribute&quot;,&quot;yo&quot;)
  .attribute(&quot;customStructure&quot;,myObject)
  .build()</code></pre></div><div style><br></div><div style>- Same as above but more DSL focused (not sure about this one ;) )</div><div style><pre style="font-size:13px;font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;line-height:19px;margin-top:15px;margin-bottom:15px;background-color:rgb(248,248,248);border:1px solid rgb(221,221,221);overflow:auto;padding:6px 10px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:rgb(0,0,0)">
<code style="font-family:Consolas,&#39;Liberation Mono&#39;,Courier,monospace;font-size:12px;line-height:normal;margin:0px;padding:0px;border:none;background-color:transparent;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">Message message = MessageDSL.to(<span style="background-color:transparent">&quot;jake&quot;,&quot;maria&quot;).withSound() //etc ...</span><br>
<br></code></pre></div><div style><br></div><div style>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 ? </div><div style>
<br></div><div style>Do we want also to separate the &quot;signalling&quot; part from the &quot;core&quot; part when building a message ? </div><div style><br></div><div style>Inputs and comments more than welcome !</div>
<div style><br></div><div style>Seb</div><div style><br></div></div>