jean-michel Douin, douin au cnam point fr

Slides:



Advertisements
Présentations similaires
Réaliser en Java un programme client d’une Base de Données
Advertisements

Les Excel Services de Office 2007
Gestion des événements (suite)
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Android les Services, Receiver et processus
Patrons Observateur/MVC programmation évènementielle
Android View, onClick, Activity, Modèle Vue Contrôleur
Android UIThread, Thread, Handler et AsyncTask
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Dernière scéance: Des question?????? + Deux exercices.
Application Android . pour étudiants de l’Esiee
Introduction aux Session Beans
Développement Mobile : Android
Chapitre III Héritage (début)
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Développement Mobile : Android
Service_Receiver 1 Android les Services, Receiver et processus Notes de cours jean-michel Douin, douin au cnam point fr version : 9 Avril 2013.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
1 Cours JAVA / Y.Laborde Java : Les types génériques ( ) LES TYPES GENERIQUES : Introduction (diapo 2) Déclaration dun type générique (3) 1re déclaration.
XML-Family Web Services Description Language W.S.D.L.
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
1 1 Université Evry Val d'Essonne Y. Laborde Une calculatrice (sans MVC) fonctionnant sur la base d'un modèle en Java.
Android est une plateforme mobile open source et entièrement paramétrable. Elle a été créée afin de mettre à disposition des développeurs toutes les fonctionnalités.
Configuration Android
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
Cours N°6 Application sur les listview et les Broadcast Receivers Rami AMRI FST 2011/2012.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Architecture dun site de vente au détail1 Modèle d'un site simple de vente Lexemple du livre Ruby on Rails Partie II Java Adventure Builder Demo Réalisé.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre 9 Les sous-programmes.
Java, les objets : tout de suite ! Rassembler, grouper les objets
jean-michel Douin, douin au cnam point fr
Proxy et plus Cnam Paris jean-michel Douin, douin au cnam point fr
Android View, onClick, Activity, Modèle Vue Contrôleur
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
APPLETS. Applets : généralités Applet : application s'exécutant dans une page HTML Le ByteCode (fichiers.class) est téléchargé depuis un serveur. L'exécution.
Exploration de la programmation android Formation Assurer par: Club FreeWays Réalisé par: BOUHJJA Lamia.
La notion de type revisitée en POO
Receiver, CGM et + 1 Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction Notes de cours jean-michel Douin, douin au cnam point fr.
Android ListView, ListActivity une introduction
Android Kévin Giroux.
Android UIThread, Thread, Handler et AsyncTask
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Tutorat en bio-informatique
Acquisition d’information sur internet
Service_Receiver 1 Android les Services, Receiver et processus Notes de cours jean-michel Douin, douin au cnam point fr version : 27 Mai 2014.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Une nouvelle manière de visualiser le fichier de contrôle de System Automation LUDIWAC ® Helcia Conseil.
 Formulaires HTML : traiter les entrées utilisateur
Cours MIAGE « Architectures Orientées Services »Henry Boccon-GibodCours MIAGE « Architectures Orientées Services »Henry Boccon-Gibod 1 Architectures Orientées.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Initiation au JavaScript
Android: Introduction, présentation
Les services mobiles Microsoft Azure Mikhail Chatillon Technical Evangelist, Microsoft
Héritage Conception par Objet et programmation Java
Citrix ® Presentation Server 4.0 : Administration Module 9 : Déploiement d'applications.
Semaine 05 - Android - Partie 02 Le TweetListActivity.
9 février 2010 Enrique Ruiz Mateos Architecte avant-vente Microsoft
TWP Toolkit Formation 21/10/2009.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
ListActivity_Wifi 1 Android: ListActivity et connexions en Wifi. Le nécessaire pour la réalisation d’un premier TP Notes de cours jean-michel Douin, douin.
Android_Introduction 1 Android: Introduction, présentation Notes de cours jean-michel Douin, douin au cnam point fr version : 24 septembre 2015.
Installation & Outils O.Legrand G. Seront. Installation code.google.com/android/intro/installing.html Pour développer des applications de type Android,
Transcription de la présentation:

jean-michel Douin, douin au cnam point fr Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction jean-michel Douin, douin au cnam point fr version : 6 Mai 2014 Notes de cours

Sommaire Le socle, les fondements L’entité Android de base : Receiver Le patron publish-subscribe L’entité Android de base : Receiver Publication sendBroadcast(Intent i) , sendOrderedBroadcast Souscription onReceive, (BroadcastReceiver) Exemples: Abonnement à un évènement Batterie, réception de SMS Abonnement à une alarme Service déjà installé sur le mobile GCM, Google Cloud Messaging Google/Cloud s’occupe de tout Compte gmail dédié Abonnement de plusieurs mobiles Librairies, BroadcastReceiver et service, prêts à l’emploi Ce qui reste à faire: Une classe dérivée, 4 redéfinitions de méthodes et c’est tout Une architecture logicielle possible, pour discussions

Principale bibliographie Le tutorial indispensable http://developer.android.com/google/gcm/index.html Avant il y avait c2dm Vogella http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html http://blog.octo.com/notifications-push-android-c2dm/ https://github.com/joemoore/c2demo

Les fondements Le patron publish/subscribe Publication à l’occurrence d’un évènement Un sms entrant, la batterie déchargée, … Un évènement engendré par l’utilisateur Souscription à un évènement Agir en conséquence Un médiateur se charge De la réception des évènements, de leur filtrage De la diffusion auprès des souscripteurs sélectionnés Diffusion aléatoire ou ordonnée

Publish-Subscribe,cf NSY102 source: http://www2.lifl.fr/icar/Chapters/Intro/intro.html

Publish-subscribe/ pull-push Les news d’internet, ou le forum de jfod … Enregistrement d’un « client » à un sujet de discussion, Un des « clients » décide de poster un message, Les utilisateurs à leur initiative vont chercher l’information, Publish-subscribe, mode pull Les listes de diffusion, logiciels de causerie, (« chat ») Abonnement d’un « client » à une liste de diffusion, Tous les abonnés reçoivent ce message, Publish-subscribe, mode push

Un exemple, mode push Source: http://lmi92.cnam.fr/NSY102/annales/2008/

En Java/ notation UML/BlueJ Source: http://lmi92.cnam.fr/NSY102/annales/2008/

Android et le patron Publish/Subscribe Une application Android peut : Souscrire à un thème de publication, réception de SMS, niveau de batterie, … Publier un évènement une alarme à son échéance, un évènement interne à l’application, … Google Cloud Messaging une API prête à l’emploi plusieurs mobiles peuvent souscrire et être notifiés « Over the Air »

Android/Publish-Subscribe : les bases souscription publication Source : http://marakana.com/s/architecting_android_apps,1178/index.html

Publish-Subscribe/Intent & Context BroadcastReceiver X,Y Intent http://www2.lifl.fr/icar/Chapters/Intro/intro.html

Souscription : schéma de programme Basée sur les Intent (Topic), Context (Mediator), BroadcastReceiver (Subscriber). import android.content.Intent; import android.content.Context; import android.content.BroadcastReceiver; import android.util.Log; public class ReceiverTemplate extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.i(TAG, "onReceive action: "+intent.getAction() ); }

Souscription effective Déclarative, AndroidManifest.xml Au sein d’une application <receiver android:name=".ReceiverTemplate"> <intent-filter> <action android:name=" android.intent.action.SMS_RECEIVED_ACTION " /> </intent-filter> </receiver> Par programme getApplicationContext().registerReceiver( new ReceiverTemplate(), new IntentFilter(Intent.SMS_RECEIVED_ACTION));

Par programme Cf. le cycle de vie d’une activité onResume onPause registerReceiver( … onPause unregisterReceiver( …

Les acteurs classe Context, le Mediator http://developer.android.com/reference/android/content/Context.html classe BroadcastReceiver, le Subscriber http://developer.android.com/reference/android/content/BroadcastReceiver.html classe Intent + IntentFilter, X,Y les thèmes http://developer.android.com/reference/android/content/Intent.html À suivre: 3 exemples avec le système Android Le niveau de la batterie vient d’être réactualisé, Un sms vient d’arriver, Un évènement de l’utilisateur.

Exemple 1 : la batterie a changé d’état public class LowBatteryActivity extends Activity { private BroadcastReceiver receiver; public void onCreate(Bundle savedInstanceState) { …} public void onResume() { IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); this.receiver = new BatteryChangedReceiver(); // Souscription registerReceiver(this.receiver, filter); } public void onPause() { // Dé-souscription unregisterReceiver(this.receiver);

// le Souscripteur Le souscripteur } private static class BatteryChangedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Toast.makeText(context, "battery changed", Toast.LENGTH_SHORT).show(); Log.d(TAG, "onReceive action: "+intent.getAction() ); } http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

La publication par Android ressemblerait à android.os.BatteryManager Intent broadcastIntent = new Intent(); broadcastIntent.setAction("ACTION_BATTERY_CHANGED"); broadcastIntent.putExtra("level", 3567); // // http://developer.android.com/reference/android/os/BatteryManager.html context.sendBroadcast(broadcastIntent);

Exemple 2 : réception d’un SMS // le souscripteur public class SMSReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "sms received", Toast.LENGTH_SHORT).show(); }

Configuration du souscripteur, <receiver /> // AndroidManifest.xml // La souscription <receiver android:name=".SMSReceiver"> <intent-filter> <action android:name="android.intent.action.SMS_RECEIVED_ACTION"/> </intent-filter> </receiver> Souscription effectuée (appel implicite de registerReceiver) au chargement de l’application (unregisterReceiver lorsque l’application est détruite)

Exemple 3: « un évènement utilisateur » Ajout, retrait d’un « contrôleur » cf. MVC @Override public void onResume(){ super.onResume(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Controler.ACTION); registerReceiver(this.controler, intentFilter); public void onPause(){ super.onPause(); unregisterReceiver(this.controler); Avec Controler.ACTION public static final String ACTION = "fr.cnam.list.ITEMS";

La classe « Controler », ici gestion d’une liste Le contrôleur agit sur le modèle, ici une liste (classe Items) public class ItemsControler extends BroadcastReceiver { public static final String ACTION = "fr.cnam.list.ITEMS"; public static final String ADD = "add"; // valeurs public static final String REMOVE = "remove"; private Items items; // le modèle private Context context; // Android framework public ItemsControler(Context context, final Items items){ this.context = context; this.items = items; // le modèle } @Override public void onReceive(final Context context, final Intent intent) { String operation = intent.getStringExtra(OPERATION_KEY); if(operation.equals(ADD)) items.ajouter(intent.getStringExtra(DATA_KEY)); else if(operation.equals(REMOVE)) items.retirer(Integer.parseInt(intent.getStringExtra(DATA_KEY)));

Démonstration Un des trois exemples Le contrôleur Optionnels: Intent.ACTION_BATTERY_CHANGED android.intent.action.SMS_RECEIVED_ACTION

Autre façon de souscrire PendingIntent Intent à effet immédiat PendingIntent à effet retardé Destiné à un tiers A destination d’un service existant AlarmManager, NotificationManager … Souscription auprès du service Exécution de l’intent passé en paramètre, à l’aide d’un PendingIntent

Souscription auprès d’un service existant Intent intent = new Intent(this, ReceiverTemplate.class);                 PendingIntent appIntent = PendingIntent.getBroadcast(this, 0, intent, 0); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 3);                 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);               am.set(AlarmManager.RTC, calendar.getTimeInMillis(), appIntent); // sendBroadcast(intent) par le service d’alarme

Variante de l’écriture précédente PendingIntent appIntent = PendingIntent.getBroadcast (this, 0, new Intent(), 0); Calendar calendar = Calendar.getInstance(); // idem diapositive précédente              am.set(AlarmManager.RTC, calendar.getTimeInMillis(), appIntent); // Ce sont les receveurs déclarés dans AndroidManifest.xml // qui seront déclenchés, (méthode onReceive) // puis sendBroadcast(intent) par le service d’alarme

Notification Souvent associée à la réception d’un évènement Déclenchée par le souscripteur Un « Receiver », un service, … Exemple: Une notification à la réception d’un message sms telnet localhost 5554 send 1234 SMS test message

Notification : affichage private static void generateNotification(Context context, String message) { long when = System.currentTimeMillis(); NotificationManager notificationManager = null; notificationManager(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_launcher,message, when); String title = context.getString(R.string.app_name); Intent intent = // page suivante notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(0, notification); }

Autre exemple : une notification Au clic sur la notification une application est déclenchée private static void generateNotification(Context context, String message) { long when = System.currentTimeMillis(); NotificationManager notificationManager = null; notificationManager(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_launcher,message, when); String title = context.getString(R.string.app_name); Intent notificationIntent = new Intent(context,GCMClientActivity.class); // afin que l’intent retardée démarre une nouvelle activité notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(0, notification); } Source: http://android.amolgupta.in/2012/07/google-cloud-messaging-gcm-tutorial.html

Autre usage : une notification, sans effet au clic Au clic sur la notification rien ne se passe private static void generateNotification(Context context, String message) { long when = System.currentTimeMillis(); NotificationManager notificationManager = null; notificationManager(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_launcher,message, when); String title = context.getString(R.string.app_name); PendingIntent intent = PendingIntent.getActivity(context, 0, null, 0); notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(0, notification); } Source: http://android.amolgupta.in/2012/07/google-cloud-messaging-gcm-tutorial.html

Démonstration

GCM Google Cloud Messaging >= Android 2.2 Message <= 4ko Anciennement c2dm, Cloud to Delivering Message >= Android 2.2 Message <= 4ko Trafic illimité Nécessite une inscription auprès de Google Avec de préférence un compte gmail que l’on dédiera à cet usage

Architecture : Objectifs Un client, tout système connecté S’adresse au serveur Google qui se chargera de publier auprès des mobiles Mobiles ayant préalablement souscrits Mise en œuvre : une librairie toute prête, un appel de méthode suffit

Architecture : Mise en œuvre, inscription GCM 2)identifiant 3) dépôt de l’identifiant Chaque participant Doit avoir un compte google gmail S’inscrit auprès de GCM, en retour un identifiant lui est attribué Un serveur mémorise, l’identifiant retourné par GCM Un serveur au protocole HTTP de préférence Ces serveur contient les abonnés

Architecture : Mise en œuvre, inscriptions id1 id2 id3 … Le serveur contient une liste des identifiants Un identifiant par application Application : un service sous Android Exemple : Une liste d’identifiants accessible depuis le web http://jfod.cnam.fr/registration/demo/?cmd=toString

Architecture : Mise en œuvre, publications 1) Demande de la liste 2) [id1, id2, id3, ……] 3) Demande de publication [id1, id2, id3, ……] + message id1 message id2 message id3 message Publication par tout système connecté 1,2) Obtention de la liste des identifiants, des abonnés 3) Envoi de cette liste au serveur Google/GCM accompagnée du message à transmettre GCM se charge de publier le message, de le ré-émettre, de le conserver …

Architecture : publications id1 message id2 message id3 message Chaque mobile de la liste [id1, id2, id3, ……] est notifié C’est un « Receiver » prêt à l’emploi qui est déclenché sur chaque mobile Un service prêt à l’emploi est créé afin de prendre en compte cette notification Une de ses méthodes est appelée (onMessage)

Le tutorial que l’on se doit de lire http://developer.android.com/google/gcm/index.html https://cloud.google.com/console

Comment ? Création d’un projet auprès des serveurs Google https://code.google.com/apis/console En retour : un numéro_de_projet (ProjectId) https://code.google.com/apis/console/#project:numéro_de_projet Une API key est nécessaire Exemple ProjectId:138387916323, API_KEY: AIzaSyC60sIgG-fB3JSW47X2zGrOqJHGzV1jh0g Un mobile s’inscrit auprès du serveur Google (API_KEY, ProjectId) En retour un jeton d’identification lui est attribué Chaque participant doit posséder un compte gmail Cet identifiant est déposé sur un serveur, connu de tous les participants Envoi d’un message aux participants Obtention de la liste des identifiants auprès du serveur Publication du message Librairies toutes prêtes

Création du projet ProjectId API_Key https://code.google.com/apis/console/#project:138387916323

Inscription, mise en oeuvre 2)identifiant 3) dépôt de l’identifiant GCM Depuis une activity 1) Inscription auprès du cloud String regId = GCMRegistrar.getRegistrationId(this); if ("".equals(regId)) { GCMRegistrar.register(this, "138387916323"); Démarrage du service… Attente asynchrone de la réponse de GCM

Le service hérite d’une classe toute prête 1)inscription 2)identifiant 3) dépôt de l’identifiant GCM public class GCMIntentService extends GCMBaseIntentService { Méthode déclenchée à la suite de la demande d’inscription au GCM 2) onRegistered(Context context, String identifiant) 3) Dépôt de l’identifiant sur un serveur onMessage(Context context, Intent intent) onError …. onUnregistered

Liste des indentifiants 1)inscription 2)identifiant 3) dépôt de l’identifiant GCM id1 id2 id3 … id1 id2 id3 … Service web, servlette, php http://jfod.cnam.fr/registration/demo/?cmd=toString

Publication API_KEY + Message id1 id2 id3 … Envoi de la liste des identifiants au GCM + un message + API_KEY Et se charge de tout

Librairie toute prête \android-sdk\extras\google\gcm\gcm-client\dist\ gcm.jar Souscription, abonnement Un service qu’il suffit de dériver public class GCMIntentService extends GCMBaseIntentService { Réception d’un message : un Receiver + un service Un Receiver prêt à l’emploi <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> Une classe IntentBaseService qu’il suffit de dériver

Démonstration, Obtention du jeton GCMRegistrar: Classe interface avec le service GCM ProjectId: 138387916323 GCMRegistrar.getRegistrationId(this, "138387916323"); Une demande est faite auprès de Google onRegistered(Context context, String regId) Au retour de Google, la méthode du service est déclenchée Le l’identifiant reçu par le mobile: APA91bGy-GWQqqrgyFc652jghpTPygBsKyDHNFPWqzJDCMvtcIx7rtVecmxAYkDItfgztJcEJhyARnx0fmmp6FtqrFKNXqftmGXhRIGM5eObyLY67YkT_Aez3RJeOZFVkOpjv-_FRNASI0ZJL6VQk95Y925MQ9Wihw Exemples ici : http://jfod.cnam.fr/registration/demo/?cmd=toString

Souscription suite Souscription du mobile Permissions <uses-permission android:name="com.google.android.c2dm.permission.REGISTRATION" /> <uses-permission android:name="android.permission.INTERNET" /> Le receveur, un extrait de AndroiManifest.xml <receiver android:name=".C2DMRegistrationReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter > <action android:name="com.google.android.c2dm.intent.REGISTRATION" > </action> </intent-filter> </receiver>

Le service public class GCMIntentService extends GCMBaseIntentService onRegistered(Context context, String regId) Déclenchée par le Receiver pré-installé à la suite de l’abonnement Mémorisation de regId onMessage(Context context, Intent intent) Déclenchée par le Receiver pré-installé à la suite de la réception d’un message String msg = intent.get("message");

Publication : le message Par tout système connecté, \android-sdk-new\extras\google\gcm\gcm-server\dist\ gcm-server.jar Sender sender = new Sender(API_KEY); String msg = "un message"; Message message = new Message.Builder() //.collapseKey("1") .timeToLive(60*60*24) // 24 heures //.timeToLive(0) // maintenant ou jamais .delayWhileIdle(true) .addData("message",msg) .build();

Publication : Envoi de message Publication d’un message Send devices : une liste de regId MulticastResult result = sender.send(message, devices, 5); // 5 essais en cas d’indisponibilité des serveurs google Ensuite le cloud s’occupe de tout …

Une architecture possible, publication De type MVC … un essai pour discussions Rappels: Hypothèse Un receveur et un service prêts à l’emploi Ce service est appelé à chaque publication par le cloud onMessage, onRegistered, onUnregistered, onError A chaque réception d’un message, envoi de celui-ci vers le receveur concerné Un champ du message contient l’ACTION à déclencher … Les receveurs peuvent être locaux à une activité, un service … publish onMessage(…) receveurs

Réalisation, onMessage Émis directement au receveur concerné intentToAnControler(intentFromCloud.getStringExtra(OPERATION_KEY));

Réalisation, une variante onMessage Un contrôleur dédié au cloud est installé Il est chargé de générer un journal, d’effectuer des statistiques, de contrôler… Receveur dédié au cloud publish onMessage(…) Receveur associé à l’ACTION

Publication, le contrôleur dédié au cloud pourrait s’en charger… Receveur dédié au cloud PUBLISH ACTION publish Publication vers le GCM via le contrôleur

Démonstration Démonstration Installez cet apk sur votre mobile … http://jfod.cnam.fr/cgm/GCM_Client_Demo.apk le souscripteur/publieur Les sources http://jfod.cnam.fr/cgm/GCM_Client_Demo.zip

Démonstration id1 id2 id3 … Service web Interrogations La liste des abonnés http://jfod.cnam.fr/registration/demo/?cmd=toString http://jfod.cnam.fr/registration/demo/?cmd=list Un journal des notifications http://jfod.cnam.fr/registration/demo.log.html Publication http://jfod.cnam.fr/registration/demo/?cmd=send&message=hello&source=url&valeur=-1 Un formulaire http://jfod.cnam.fr/cgm/demo.html

http://jfod.cnam.fr/cgm/demo.html

Mise en œuvre Répertoire du projet eclipse du client souscripteur Depuis l’explorateur windows, (eclipse n’est pas démarré) créer un répertoire libs dans lequel vous copiez gcm.jar libs>copy D:\android-sdk\extras\google\gcm\gcm-client\dist\gcm.jar . Répertoire du projet eclipse du client « publieur » créer un répertoire libs dans lequel vous copiez gcm-server.jar libs>copy D:\android-sdk\extras\google\gcm\gcm-server\dist\gcm-server.jar . . Si bluej, installez gcm-server.jar dans le répertoire +libs A l’exécution json est requis D:\android-sdk\extras\google\gcm\gcm-server\lib\json_simple-1.1.jar

Conclusion Simple Push/polling (voir en annexe) … Indispensable Note: Sous eclipse dans le projet créez un dossier libs Dans lequel sont copiés : gcm.jar pour souscrire gcm-server.jar et json-simple-1.1.jar pour publier

Annexe consommation en « polling »