<div dir="ltr"><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">I am happy to announce the result of 3 months working on the GSoC project: &quot;Communicating with mobile devices&quot;. After reading many documentation, looking for a good abstraction, learning about mobile apps and networks connections, and really valuable recommendations from my mentor, (I really want to thank Michael Snoyman for his availability and kindness) I succeeded in developing 3 libraries to make it easy to send push notifications to mobile devices. They are available on Hackage:</p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"><br></p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"><b>* push-notify-0.1.0.0 : </b>This library offers a simple API for sending notifications through APNS, GCM and MPNS. <a href="http://hackage.haskell.org/package/push-notify-0.1.0.0">[1]</a></p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"><br></p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"><b>* push-notify-ccs-0.1.0.0 :</b> This library offers an API for sending/receiving notifications through CCS (XMPP - Google Cloud Messaging). <a href="http://hackage.haskell.org/package/push-notify-ccs-0.1.0.0">[2]</a></p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"><br></p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"><b>* push-notify-general-0.1.0.0 : </b>This library offers a general API for sending/receiving notifications, and handling the registration of devices on the server. It provides a general abstraction which can be used to communicate through different services as APNS, GCM, MPNS, hiding as much as possible, the differences between them. <a href="http://hackage.haskell.org/package/push-notify-general">[3]</a></p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"><br></p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">Now, it is easy to send/receive information with mobile devices, so you can develop server applications which interact with them.</p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">So, to clarify this, as part of this project, I developed many test examples, including Android/WPhone and Yesod apps.<br></p><p style="margin:0px">
<span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">I really want to thank FPComplete for giving me the possibility of hosting the Yesod app. </span><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">The code is available on GitHub:</span><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"> </span><a href="https://github.com/MarcosPividori/GSoC-Communicating-with-mobile-devices" style="font-family:&#39;Times New Roman&#39;;font-size:medium">[4]</a><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"> </span><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">and they are running online on:</span><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"> </span><a href="http://gsoc.marcospividori.com.ar/" style="font-family:&#39;Times New Roman&#39;;font-size:medium">[5]</a><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"> , so can be downloaded and tested on mobile devices. (BackAndForth Messaging and Connect4 apps)</span></p>
<p style="margin:0px"><font color="#000000" face="Times New Roman" size="3"><br></font></p><p style="margin:0px"><font color="#000000" face="Times New Roman" size="3"><b>* BackAndForth Messaging:</b></font></p><p style="margin:0px">
<font color="#000000" face="Times New Roman" size="3">In this example, I show how to use the push-general library to handle the registration/reception and sending of messages. From a Yesod app </font><a href="http://gsoc.marcospividori.com.ar/" style="font-family:&#39;Times New Roman&#39;;font-size:medium">[5]</a><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">, you can send notifications to devices registered and receive messages from them. It is avaliable for Android and WPhone on </span><a href="http://gsoc.marcospividori.com.ar/apps" style="font-family:&#39;Times New Roman&#39;;font-size:medium">[6]</a><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">. </span></p>
<p style="margin:0px"><font color="#000000" face="Times New Roman" size="3"><br></font></p><p style="margin:0px"><font color="#000000" face="Times New Roman" size="3"><b>* Connect 4:</b></font></p><p style="margin:0px"><font color="#000000" face="Times New Roman" size="3">I have been thinking of an app which lets me show how useful push notifications are. The advantage of this notifications is that you can receive information from server when it is available without needing to continually poll. So, I started to think about a multiplayers game. Every time a player does something, you let the rest know about the new movement. So, I ran into the board game: &quot;Connect 4&quot;.</font></p>
<p style="margin:0px"><font color="#000000" face="Times New Roman" size="3">Both, authenticated web players and users of the android app, can play one against each other.</font></p><p style="margin:0px"><font color="#000000" face="Times New Roman" size="3">For actualizing the website </font><a href="http://gsoc.marcospividori.com.ar/" style="font-family:&#39;Times New Roman&#39;;font-size:medium">[5]</a> <span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">, I use long polling, while for the Android app, push notifications.</span></p>
<p style="margin:0px"><font color="#000000" face="Times New Roman" size="3">The Android app is available on </font><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium"> </span><a href="http://gsoc.marcospividori.com.ar/apps" style="font-family:&#39;Times New Roman&#39;;font-size:medium">[6]</a><span style="color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">.</span><font color="#000000" face="Times New Roman" size="3"><br>
<br></font></p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">Every feedback is welcome!<br>Thanks,<br>Marcos</p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">
<br></p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">[1] <a href="http://hackage.haskell.org/package/push-notify-0.1.0.0">http://hackage.haskell.org/package/push-notify-0.1.0.0</a></p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">[2] <a href="http://hackage.haskell.org/package/push-notify-ccs-0.1.0.0">http://hackage.haskell.org/package/push-notify-ccs-0.1.0.0</a></p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">[3] <a href="http://hackage.haskell.org/package/push-notify-general">http://hackage.haskell.org/package/push-notify-general</a></p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">[4] <a href="https://github.com/MarcosPividori/GSoC-Communicating-with-mobile-devices">https://github.com/MarcosPividori/GSoC-Communicating-with-mobile-devices</a></p>
<p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">[5] <a href="http://gsoc.marcospividori.com.ar/">http://gsoc.marcospividori.com.ar</a></p><p style="margin:0px;color:rgb(0,0,0);font-family:&#39;Times New Roman&#39;;font-size:medium">
[6] <a href="http://gsoc.marcospividori.com.ar/apps">http://gsoc.marcospividori.com.ar/apps</a></p></div>