Your SlideShare is downloading. ×
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Pushnotification android
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Pushnotification android

5,018

Published on

Un tutorial sur le push notification Android utilisant le procotole MQTT …

Un tutorial sur le push notification Android utilisant le procotole MQTT

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,018
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
119
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Push notification sur Android SIDIBE Ali-Broma jahbromo@gmail.com http://jahbromo.blogspot.com/Tables de MatièresI. Introduction .................................................................................................................. 2II. Problématique............................................................................................................... 2III. Pull : ............................................................................................................................... 3IV. Push : ............................................................................................................................. 4V. Les solutions existantes ................................................................................................ 5 1. Pull pull pull pull......Push ............................................................................................ 5 2. SMS : ............................................................................................................................... 6 3. Persistants TCP / IP: ........................................................................................................ 6 4. Quelques solutions tiers ................................................................................................... 7 5. Persistants TCP / IP ....................................................................................................... 10VI. Mosquitto : .................................................................................................................. 11 6. Le protocole MQTT ...................................................................................................... 11 7. Caractéristiques: ............................................................................................................ 11 8. Le projet Mosquitto ....................................................................................................... 11 9. Installation : ................................................................................................................... 11VII. Modèle de Publish/Subscribe: ................................................................................... 11VIII. MQTT Client et Langage ........................................................................................ 12 10. Caractéristique Technique ............................................................................................. 12 11. Implémentation:............................................................................................................. 12IX. Environnement de travail :........................................................................................ 13X. Les deux methodes de publications........................................................................... 13 12. Depuis un navigateur web : ........................................................................................... 13 13. Depuis une application mobile : .................................................................................... 13 14. Regardons ce que ça ressemble : ................................................................................... 14XI. Code complet du Servlet : .......................................................................................... 15XII. Client Android ............................................................................................................ 17XIII. Démonstration : ........................................................................................................... 19SIDIBE Ali-Broma, Android Developer, 1
  • 2. I. IntroductionDans ce monde où l’information temps-réel est devenue capitale dans l’évolution de chaquebusiness, l’homme agité et préoccupé dans ses affaires, trouve la nécessité d’être informé oud’être notifié par des informations qui le concernent sans être forcément à l’origine. Ce besoind’être informé ou notifié d’une information sans en demander constitue le besoin majeur debeaucoup d’entre nous.Ce système d’information au besoin, sans en demander est réalisé grâce à une technique qu’onappelle le Push. Dans notre vie quotidienne, nous rencontrons toujours le système decommunication push et pull sans nous en rendre compte.Il est 19h, fatigué pour signer un contrat ou discuter avec une “personne chère”, vous vousrendez dans un café pour prendre un verre, alors vous êtes client et le personnel du bar sontdes serveurs (patron, ou tout autre). Lorsque vous vous déplacez pour aller dire à unpersonnel: « Monsieur nous voudrons un café express » alors dans ce cas vous avez fait appelau serveur. Ce système de communication s’appelle « Pull » et lorsqu’un personnel du bar sedéplace gentiment pour vous demander : « Monsieur nous possédons du café chaud, lait, dukamkaliba (un café malien) ou harira (soupe marocaine), etc.… » Alors c’est le serveur quia initié la communication en vous informant des cafés disponibles. Et ce système decommunication qui rend le client fidèle s’appelle le Push. Ceci s’avère important pour votretranquillité.Ainsi il apparait évident que vous adopterez pour des bars qui font du push surtout si vousêtes en discussion avancée sur un projet qui vous tient à cœur, vous n’aurez pas le temps devous déplacer pour aller demander du café.Avant d’aller plus loin, nous allons présenter la problématique c’est-à-dire, ce que nousvoulons faire. II. ProblématiqueDans la réalisation de cette plateforme de communication, nous allons décrire graphiquementle cahier des charges que nous nous sommes donné pour couvrir le push notification.Néanmoins voici, ce que nous sommes posés comme problème à résoudre : ● Développer une solution web capable de pusher l’information. ● Développer une application mobile capable de recevoir l’information pushéeLe schéma de communication 1 : L’idée c’est permettre à un utilisateur par son mobile,d’envoyer l’information à pusher par le serveur aux autres utilisateurs. Ceci pourra parexemple être un commentaire sur un profil, une information lancée par le client mobile.SIDIBE Ali-Broma, Android Developer, 2
  • 3. Le schéma de communication 2: L’objectif c’est permettre à un client web d’envoyerl’information au serveur pour le pusher au client mobile. Un administrateur pourra parexemple envoyer l’information à partir de son navigateur.Le schéma de communication 3: C’est permettre au serveur de renvoyer les informationsprovenant de la liaison 1 ou 2 aux utilisateurs concernés.Le schéma de communication 4 et 5 : Permettre au serveur d’enregistrer les informationspushée par les clients (la relation 1 et 2) dans une base de données et de les retrouvées pourles afficher quand les clients en font la demande. Il faut être certain ici que tous les clientsmobiles ne sont pas forcement connectés à internet au moment du push, dans ce cas il fautenregistrer les informations dans une base de données afin d’envoyer à ceux qui le deman-deront.Dans ce qui suit, nous allons expliquer, frôler la notion de communication entre client etserveur en privilégiant le push. III. Pull :Dans nos précédents tutoriaux, vous avez constaté que pour recevoir la liste des news, leclient était obligé de lancer une requête au serveur. Dans ce cas, c’est le client qui a initié laconversation. Ainsi pour recevoir les informations, le client lance une demande au serveurqui peut lui répondre favorablement ou non (dans le cas où aucune donnée ne correspond à sarequête).SIDIBE Ali-Broma, Android Developer, 3
  • 4. Ce système de communication (client-serveur-client) est appelé le pull. Une telle architecturepeut être interprétée schématiquement par : a. Le client Android lance la requête 1 au serveur qui va interroger la base de données; b. l’information est formatée et la réponse est renvoyée au client dans la requête 3 (après des processus 2 et 4);Ainsi, la communication est initiée par le client et l’information lui est renvoyée par leserveur. IV. Push :Contrairement au pull qui se caractérise par le fait que le client demande au serveur lesinformations, le push est une procédure de communication dans laquelle le serveur initialise lacommunication et envoie l’information disponible vers le client sans une requête de cedernier.Le push est une notion qui est fréquemment utilisé dans les applications de communicationtelle que le “chat” mais n’est pas évidemment perceptible dans le cas des applications web carla majeure partie, c’est le client qui se connecte et demande une information au serveur.Toutefois, on remarque la notification lorsqu’on reçoit un mail sans réactualiser la page.SIDIBE Ali-Broma, Android Developer, 4
  • 5. Cette notion de push devient intéressante pour un client mobile plutôt qu’un client desktop. Nous apercevrons facilement lintérêt de celle-ci si les informations, les dernières valeurs boursières, les derniers têtes, nous sont fournis par notification sans en demander... C’est pour cela que dans la suite de ce document nous nous intéresserons uniquement au push Server-Mobile et nous ignorerons tous les aspects client lourd ou desktop. V. Les solutions existantes1. Pull pull pull pull......Push Cette solution consiste à consulter périodiquement le serveur pour récupérer les informations par exemple chaque 10mn ou 30mn. Certains développeurs risqueront de faire appel au serveur à chaque 60 secondes pour récupérer des informations. Cette solution est à peu près la première idée qui vient à l’esprit quand on veut faire du push et qu’on ne connait pas autre solution. Mais d’après les artistes“Il ne faut jamais tomber amoureux à la première idée ”. Le pull pull pull jusquà push a néanmoins un avantage.  Avantage: N’importe qui peut le faire, très facile à mettre en place, aucune contrainte économique. Dans le cas du polling, lapplication mobile peut fonctionner de manière autonome et récupérer toute seule les informations nécessaires à son fonctionnement, aucune implémentation côté serveur.  Inconvénient On n’appellera jamais cette solution comme un push car, ce n’est pas un push. L’information n’est pas jamais en temps réel. Supposons que votre intervalle d’interrogation du serveur est chaque 25mn, il arrivera que possible que vous recevez des messages datant de 15 secondes ou de 24mn59 secondes. Autre point faible : Si chaque 60 secondes un client interroge le server alors, pour 100.000 utilisateurs, le serveur traite 60x100.000 requêtes en 1 heure. Le serveur sera submergé. SIDIBE Ali-Broma, Android Developer, 5
  • 6. Autre inconvénient: le client mobile consommera trop de charge de batterie ce qui est n’est pas très plaisant pour l’utilisateur. Ce fut ma première solution dans le développement d’applications mobiles. Ceci dit, il y a eu une considérable amélioration depuis lors.2. SMS : Le service de messagerie SMS, permet de transmettre de courts messages textuels ; c’est un service de la norme GSM. Android vous permet dintercepter les messages SMS. Il y a un BroadcastReceiver dédié à cela que nous ne détaillerons pas. Votre serveur envoie spécialement un SMS à chaque fois qu’il y a quelque chose et votre application capture l’information qui lui est destinée. Selon des codes compréhensibles par l’application bien définis, l’application pourra immédiatement lancer au serveur des données disponibles. Par exemple votre serveur envoie un sms pour informer les différentes applications de la disponibilité de l’information et à la réception, l’application lance la requête pour les chercher. En fait ce n’est pas le sms qui est l’information mais plutôt la notification.  Avantage : Facile à mettre en œuvre, entièrement en temps réel les mises à jour comme celui fournie par Ericsson Labs: https://labs.ericsson.com/apis/mobile-java-push/  Inconvénients : Peut être coûteux pour vous et pour lutilisateur. Il y a seulement quelques Services qui permettent denvoyer gratuitement des sms mais votre application ne doit pas dépendre du crédit de l’utilisateur ou de son forfait à moins que vous le payez. Il y a bien des services gratuits sur internet envoyant des sms au prix de $50 par an.3. Persistants TCP / IP: Le téléphone déclenche une longue durée de vie de connection et la maintient en envoyant périodiquement ou occasionnellement au serveur une information comme quoi il est en vie. Chaque fois quil y a quelque chose de nouveau sur le serveur, le serveur envoie un message au téléphone sur la connexion TCP.  Avantage: Les mises à jour sont entièrement en temps réel.  Inconvénients: Difficile de mettre en œuvre un service fiable à la fois du téléphone et du côté serveur. LOS Android est connu pour être capable de tuer des services quand il est à court de mémoire, donc le service de votre notification peut facilement disparaître. Mais ceci est très rare qu’Android tue les services. Quadvient-il lorsque votre téléphone se met en veille? Certaines personnes se plaignent de problèmes de vie de la batterie liés au maintien dune connexion active. SIDIBE Ali-Broma, Android Developer, 6
  • 7. Les deux premières méthodes présentent des inconvénients importants à tel point qu’il nous est impossible d’entreprendre quoi que ce soit. Cependant, les inconvénients de la troisième méthode ne sont pas aussi graves. Il semble que le travail suffisant, une bonne conception et la persistance de TCP / IP méthode peuvent fonctionner. Après tout, cest comme ça que GMail, GTalk et Google Voice fonctionnent. En fait, de nombreux développeurs reconnaissent que cest la meilleure façon de conception jusquà ce que Google prenne effectivement la question en main.4. Quelques solutions tiers Dans cette partie nous parlerons quelque ligne sur les solutions tierce notamment de Google, Sonic Ericsson. Mais l’inconvénient majeur et commun à toutes ces solutions avec leur propres contraintes, est qu’il faut enregistrer l’application chez eux d’abord...  Urban Airship Push for Android Ceci est un service commercial qui fonctionne de façon similaire à Push dApple le service de notification. Vous incluez leur bibliothèque dans votre application et envoyez des messages à leurs services Web, qui gèrent alors la livraison des messages aux dispositifs de lutilisateur. Le gros inconvénient est quil nécessite que lutilisateur installe l’application sur son appareil. Cette application tierce maintient une connexion à leurs serveurs, mais seulement il faut linstaller une fois pour toute leur application qui utilise le service. Par conséquent, seule une connexion à lurbain Serveurs Airship est nécessaire, sauvant ainsi la vie de la batterie. Il revient à vous de décider si vous voulez forcer l’utilisateur à installer une application pour que la votre fonctionne. Pour plus d’informations http://urbanairship.com/docs/android _client.html.  Cloud to Device Messaging (C2DM) Le C2DM est un service Google qui aide les développeurs à envoyer des données depuis les serveurs de leurs applications sur les appareils Android. Le service fournit un mécanisme simple, léger que les serveurs peuvent utiliser pour dire aux applications mobiles de communiquer avec le serveur directement, pour aller chercher des mises à jour applicatives ou des données utilisateur. Le service C2DM gère tous les aspects de la queue de message et de livraison vers lapplication cible. Pour plus d’informations sur C2DM http://code.google.com/android/c2dm/index.html SIDIBE Ali-Broma, Android Developer, 7
  • 8.  Un serveur d’application tiersC’est un serveur à la charge du développeur qui contient la liste de tous les téléphonesmobiles notifiables et leur envoie les messages push via les serveurs C2DM.Afin d’identifier le serveur d’application tiers qui envoie les messages à notre application, uncompte Gmail est utilisé. Ce compte permet au serveur d’application tiers de s’identifierauprès des serveurs C2DM pour envoyer les notifications. Il est également utilisé àl’inscription aux notifications sur l’applicationLes serveurs C2DMCes serveurs sont gérés par Google et transmettent les notifications reçues du serveurd’application tiers aux téléphones. La gestion des conditions d’envoi (le téléphone est bienallumé et capable de recevoir la notification) est effectuée par ces serveurs.  Notre téléphone AndroidCe téléphone héberge notre application qui gère l’abonnement aux notifications ainsi quel’action à effectuer à la réception des messages.Les services C2DM permettent à tout téléphone en version 2.2 ou plus de s’inscrire etrecevoir des notifications push de la part des serveurs Google. Les téléphones en versioninférieure (plus de 40% du parc en février 2011) ne pourront donc pas recevoir denotification. Si cette limitation de version est trop impactant pour votre produit, vous devreztrouver une solution spécifique pour les versions inférieures ou considérer des alternativescommerciales à C2DM.Pour pouvoir s’enregistrer aux flux de notifications, les téléphones devront égalementêtre identifiés par un compte Google et avoir l’application Android Market d’installée.Ces conditions sont immédiatement vérifiées sur un téléphone.Cependant, l’utilisation d’un téléphone à jour reste le moyen le plus simple et rapide de testerl’application…Abonner son téléphone aux notifications en théorie…Notre application doit s’enregistrer auprès des serveurs C2DM pour que ceux-ci puissent luienvoyer les messages reçus de votre serveur d’application tiers. Pour cela, deux informationsdoivent être envoyées aux serveurs C2DM :- le sender id : c’est l’adresse gmail dédiée à notre application qui va être utilisée par votreserveur d’application pour l’authentifier aux services Google.- l’application id : c’est l’identifiant qui permettra aux serveurs C2DM de n’envoyer lesmessages qu’à notre application Android. Cet application id doit contenir le nom de packageAndroid MarketSIDIBE Ali-Broma, Android Developer, 8
  • 9. A partir de ces informations, les serveurs Google vont générer un token, la registration id etle renvoyer à l’application.Ce token nous permettra d’envoyer un message à partir du serveur tiers. Une fois reçu, il doitdonc être transmis à notre serveur d’application pour être stocké.Il faut savoir que les serveurs de Google régénèrent régulièrement les registrations id. Notreapplication devra donc être capable de reconnaitre ultérieurement la réception d’un nouveaujeton et l’envoyer alors au serveur d’application pour remplacer l’ancien.Une fois cette étape d’abonnement terminée, l’application Android est prête à recevoir desmessages en push. Voyons comment implémenter ces envois et réceptions d’informations.Envoyer les notifications pushIl ne reste plus qu’à tester l’envoi d’une notification. Cela consiste côté serveur d’applicationà s’authentifier auprès des services Google https://www.google.com/accounts/ClientLoginavec le compte dédié (« sample_mail@gmail.com »). Une fois identifié, pour chaqueregistration id, nous pouvons envoyer notre message par une requête POST à l’urlhttps://android.apis.google.com/c2dm/send :Remarque : C2DM ne peut pas pusher plus d’information dépassant 1ko.Il existe certainement plusieurs autres solutions sur internet telles que le push Sony Ericssonqui utilise le SMS et le protocole HTTP pour pusher l’information.Pour plus d’information (https://labs.ericsson.com/apis/mobile-push/)SIDIBE Ali-Broma, Android Developer, 9
  • 10. 5. Persistants TCP / IP Après des recherches sur Google, jai suis venu à bout de trois des efforts à mettre en œuvre pour les notifications push utilisant une persistante de connexion TCP / IP. Josh Guilfoyle parle sur la façon de créer un plus-ralenti connexion TCP / IP avec une longue keep-alive minuterie sur la base des AlarmManager. Il fournit quelques exemples de code vraiment magnfique avec un service qui sexécute en arrière-plan et établit des connexions. http://devtcg.blogspot.com/2009/01/push-services-implementing-persistent.html. Dave Rea a récemment lancé le projet Deacon, qui vise à développer une bibliothèque tiers pour les notifications push Android en utilisant la technologie basée sur la comète le serveur Meteor. Le projet en est encore à un stade très précoce, mais semble assez prometteur http://deacon.daverea.com/ Dale Lane avait fait un certain nombre de présentations, où il a parlé de lutilisation du protocole MQTT. IBM a développé les notifications push Android. Il fournit également quelques échantillons de code Android vraiment utiles http://dalelane.co.uk/blog/?p=938. Bien que tous les travaux effectués par ces gars-là est incroyable, aucun de leurs résultats n’est tout à fait prêt pour la halte-utilisation par dautres développeurs. Dans mon effort pour mettre en œuvre les notifications push, jai décidé de mettre les pièces du puzzle ensemble et combiner leurs résultats afin de produire de façon relativement stable la mise en œuvre de poussée. Lexemple que je vous fournis en autres, est une combinaison de projets TestKeepAlive Josh Guilfoyle et le travail MQTT Dale Lane Quoi quil en soit, assez pour lintroduction, passons aux choses sérieuses. SIDIBE Ali-Broma, Android Developer, 10
  • 11. VI. Mosquitto :6. Le protocole MQTT MQ Telemetry Transport (MQTT) est un protocole de publication conçu pour être ouvert, simple, léger et facile à mettre en œuvre. Ces caractéristiques le rendent idéal pour une utilisation dans des environnements à ressources limitées tel qu’un appareil embarqué (donc contrainte de processeur, batteries, contrainte de data ou la mémoire des ressources est aussi limitées). Nous frôlerons quelque caractéristique sur ce protocole. Un utilisateur curieux pourra s’informer ici (http://www.ibm.com/developerworks/webservices/library/ws- mqtt/index.html?ca=drs-).7. Caractéristiques: ● Le modèle publish/subscribe de messagerie basée sur un système nous rappelant one- to many (Un publicateur à plusieurs receveurs). ● Lutilisation du protocole TCP / IP pour fournir une connectivité réseau de base. ● Un mécanisme daviser les parties intéressées à une déconnexion anormale dun client.8. Le projet Mosquitto Mosquitto est un projet open source qui permet d’envoyer de messages en implémentant le protocole MQ Telemetry Transport Protocol version 3.1 définie ci dessus. Probablement le plus célèbre exemple de cela est lensemble des travaux de Andy Stanford- Clark (lun des fondateurs du MQTT). Andy a fait un exposé sur ce sujet à OggCamp (http://oggcamp.org/) qui explique un peu MQTT et comment il lutilise. Il vise à fournir les mêmes fonctionnalités (et peut-être plus)du Broker d’IBM dIBM (RSMB), mais entièrement ouverte.9. Installation : Mosquitto est disponible au téléchargement à l’addresse http://mosquitto.org/download mais peut également être installé sur les versions récentes dUbuntu en utilisant les PPA. Pour ajouter le ppa et installer Mosquitto sur Ubuntu 9.10 +: sudo add-apt-repository ppa: mosquitto-dev/mosquitto-ppa & & sudo apt-get update & & sudo apt-get install mosquitto Sil est installé à partir du PPA ou des paquets Debian Mosquitto démarre automatiquement. Sinon vous pouvez belle et bien le démarrer manuellement avec la commande par sudo mosquitto start. VII. Modèle de Publish/Subscribe: Le modèle publish/subscribe est le fondement du protocole MQTT. Il consiste à un client de recevoir les flux lui concernant ou de publier les flux à des destinateurs ou récepteurs abonnés. SIDIBE Ali-Broma, Android Developer, 11
  • 12. Le principe apparait très simple, un publisers envoie son message au broker qui le publie à l’abonnées. VIII. MQTT Client et Langage Mosquitto et le protocole MQTT sont supporté par l’ensemble des langages majeurs ( Je peux pas parler d’Iphone car j’en connais pas).  Le Vieux langage C : Les clients qui le supportent sont entre autres IBM support pack IA93, RSMB client (IBM AlphaWorks), Mosquitto client Arduino client.  Java IBM supportpac IA92, IBM Lotus Expeditor client (including JMS).  PHP : SAM – Simple Asynchronous Messaging http://project- sam.awardspace.com/.  Autre langage : Perl, PHP, Python Erlang, Delphi10. Caractéristique Technique Mosquitto écoute le port 1883. S’il n’est pas libre ce port il y’a bien des commandes pour l’ouvrir dont je vous laisserai le soin de le découvrir soigneusement. Mosquitto est installable sur Linux et Windows, Mac, mais pour moi je travaille qu’avec Ubuntu...11. Implémentation: Il est tout à fait normal de penser que vais conduire cette implémentation en Java afin de respecter mes deux certifications Java (SCJP et SCJD). Beaucoup de discours inutile, apprêtez vous...... SIDIBE Ali-Broma, Android Developer, 12
  • 13. IX. Environnement de travail : Dans la réalisation de ce tutorial, mon environnement de travail est bien Linux. Voici ce que j’ai besoin pour réaliser ce tutorial à bout : 1. Ubuntu 10. 2. Mosquito installé et configuré pour écouter le port 1883 sur mon Ubuntu. Mosquito est exécuté en background. 3. 3. Tomcat 6 installé pour héberger mon application web. X. Les deux methodes de publications12. Depuis un navigateur web : J’ai développé une page web avec deux champs de textes (Titre et Contenue) sur laquelle l’utilisateur ou un administrateur pourra utiliser pour publier un message. Cest-à-dire envoyé au broker qui se chargera de dispatcher au differents abonnées en temps réel. Et voyons ce que ce que cette interface pourra ressembler :13. Depuis une application mobile : Sur l’application mobile Android j’ai développé aussi une interface similaire qui permet à un utilisateur de pusher le message aux autres. C’est le cas lorsque vous penser à mettre en place une application de chat... SIDIBE Ali-Broma, Android Developer, 13
  • 14. C’est juste que les informations proviennent de differents sources sinon c’est le meme Servlet qui s’occupe de leur réception au traitement, à l’enregistrement dans la base de données, et l’envoie à Mosquitto. Nous ne donnerons tarderons pas sur le code de ceux deux interfaces graphiques. Nous allons nous préoccuper particulièrement au Servlet qui reçoit les informations et qui les envoies au broker.14. Regardons ce que ça ressemble : 1. Récupérer les informations envoyés par les differents sources (mobile, navigateur) et les transformer en un object json. //Get information from request header sent by mobile or browser String title = request.getParameter("title"); String description = request.getParameter("contenu"); //Write these information to json object JSONObject jsonObject = null; try { jsonObject = new JSONObject(); jsonObject.put("titre", title); jsonObject.put("desc", description); } catch (Exception exception) { exception.printStackTrace(); } SIDIBE Ali-Broma, Android Developer, 14
  • 15. 2. Publier au broker : On initialise la connection d’abord par try { //Cette initialization prend en parametre quatre information : idClient, le hostname, le port, le topic. // idClient : L’id de client en chaine de caractere(en chaine String) //Hostname : l’addresse ip de server ou s’execute le broker. //Le port : Par defaut c’est 1883 //Le topic initial PushServerManager.initConnection("clientid", "127.0.0.1", 1883,"topic"); //Apres je publie l’information qui a ete encapscule en un object json au broker //qui va le renvoyer immediatement aux autre client qui sont abonnée au topic "topic" PushServerManager.publishMessage(jsonObject); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }A cet stade tout est ok coté push de message au broker mais conformément au cahier de chargeque nous nous sommes données, nous allons enregistrer dans une table définie par(title,description) en mysql les informations récus. Il faut noter que le broker n’enregistrer pas.3. Enregister l’information dans la base de données ; Enregistrer dans la base de données (DBManager c’est une classe classique qui permet d’enregistrer dans la base de données). Remarque : Cette étape n’a rien avec le push. C’est simplement enregistrer les informations dans la base de données pour stocker la trace. Je vous rappelle que le broker ne stocke pas les informations, il les recois et les envoies XI. Code complet du Servlet : Voici ce que ça ressemble la methode dans doGet dans une servlet. Ceci dit, ce code peut fonctionner sur n’importe quel librarie. SIDIBE Ali-Broma, Android Developer, 15
  • 16. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { JSONWriter writer = new JSONWriter(response.getWriter()); //Get information from request header sent by mobile or browser String title = request.getParameter("title"); String description = request.getParameter("contenu"); //Write these information to json object JSONObject jsonObject = null; try { jsonObject = new JSONObject(); jsonObject.put("titre", title); jsonObject.put("desc", description); } catch (Exception exception) { exception.printStackTrace(); } try { DBManager db = new DBManager(this.getServletContext() .getInitParameter("dbHost"),this.getServletContext() .getInitParameter("dbName"),this.getServletContext() .getInitParameter("dbUser"),this.getServletContext() .getInitParameter("dbPwd")); boolean state = db.registerSampleNews(title, description); writer.object(); writer.key("state").value(true); writer.endObject(); } catch (Exception exception) { exception.printStackTrace(); try { writer.object(); writer.key("state").value(false); writer.endObject(); } catch (JSONException ex) { // TODO Auto-generated catch block ex.printStackTrace(); } } try { Cette initialization prend en parametre quatre information : idClient, lehostname, le port, le topic.// idClient : L’id de client en chaine de caractere(en chaine de caractere,quelconque)Hostname : l’addresse ip de server ou s’execute le broker.//Le port ://Le topic initialPushServerManager.initConnection("clienid", "127.0.0.1", 1883, "topic");//Apres je publie l’information qui a ete encapscule en un object json. // au broker qui va le renvoyer immediatement aux autreclient qui sont abonnée au topic "topic" PushServerManager.publishMessage(jsonObject); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } SIDIBE Ali-Broma, Android Developer, 16
  • 17. En quelque mot la partie serveur est terminé. Et vous n’avez plus rien à faire au coté Server.Dans la section suivante, nous nous intéresserons spécialement au client Android. XII. Client Android L’objectif de cette partie c’est developper un client Mobile Android qui sera capable de : 1. Se connecter au broker (1 seule fois) et maintenir cette connection en background. 2. Se connecter au server Tomcat (s’il veut publier les messages). 3. Recevoir les messages provenant de broker et les traiter comme notification.Android est composé de quatre composants principaux dont nous utiliserons deux : 1. Activity : Une présentation à l’utilisateur pour recevoir sa réaction. C’est dans notre Activity que nous pouvons afficher les données en liste, créer une boite de dialogue pour envoyer des données. 2. Service : Une tache en background (c’est pas un thread) sans interaction avec l’utilisateur. Ne vous inquiétez pas, nous n’allons pas faire un pull pull pull…jusquà push. Nous allons nous connecter une seule fois et maintenir cette connection indéfiniment. Par là nous allons jamais envoyer des requêtes pour recevoir les données, c’est le broker qui enverrai des données aux clients donc seule les clients connectées sont capable de recevoir. C’est pour cela nous allons nous connecter au broker une seule fois et maintenir cette connection.Pour toute autre information sur les composants Android : http://developer.android.com/guide/topics/fundamentals.htmlNous ne nous intéresseront qu’au contenue push. Toutes détails relatives à l’interface user etautres sont supposé connues.Notre projet contient une Activity et Une service.Dans l’Activity nous startons le service par le bout de code suivant dans la methodeonCreate, vous pouvez mettre là ou vous voulez…dans onStart,onResume ouautre./** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PushConnectionManager.actionStart(this, PushManagerService.class); // Faire les autres traitement ici...concernant les view.....}SIDIBE Ali-Broma, Android Developer, 17
  • 18. La methode statique actionStart de prend un Context et une classe qui herite de ServiceAndroid (rappelez vous de la généricité et de wildcard…en Java). Ici notre classe qui s’etendsde Service est PushManagerService.Dans la classe PushManagerService il suffit d’appeler des methodes statiquessuivantes : public class PushManagerService extends Service implements PublishArriveMessageListener { private String hostname = "ip_machine"; private int port = 1883; private String initTopic = "topic"; NotificationManager mNotifMan; @Override public void onCreate() { super.onCreate(); try { PushConnectionManager.initConnection(this, hostname, port,initTopic, this); } catch (Exception e) { e.printStackTrace(); } } @Override public void onDestroy() { PushConnectionManager.stopConnection(); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); PushConnectionManager.manageConnection(intent); } //Cette methode provident de l’interface PublishArriveMessageListener… @Override public void managerArriveMessage(String topicName, JSONObject object, int qos, boolean retained) { title=object.getString("titre"); String description=object.getString("desc"); //Faire quelque chose avec l’object json qui a ete récu ici //Par exemple j’affiche la notification showNotification(title, description} @Override public IBinder onBind(Intent intent) { return null; } }SIDIBE Ali-Broma, Android Developer, 18
  • 19. private void showNotification(String title,String text) { NotificationManager mNotifMan=mNotifMan = (NotificationManager) this .getSystemService(Context.NOTIFICATION_SERVICE); Notification n = new Notification(); n.flags |= Notification.FLAG_SHOW_LIGHTS; n.flags |= Notification.FLAG_AUTO_CANCEL; n.defaults = Notification.DEFAULT_ALL; n.icon = R.drawable.icon; n.when = System.currentTimeMillis(); PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, TestDynamicListView.class), 0); n.setLatestEventInfo(this, title, text, pi); mNotifMan.notify(0, n); }XIII. Démonstration : 1. Client Android Télécharger et installer le client Android sur le lien suivant (Android 2.1): https://sites.google.com/site/jahbromo/Home/DemoPushAndroid.apk?attredirects=0&d=1 2. Envoyer le push depuis le navigateur http://88.191.130.14:8080/ListViewDynamicServer/index.jsp 3. Assurer vous que votre telephone est bien connecté à l’internet.SIDIBE Ali-Broma, Android Developer, 19

×