conception et developpement d'une application mobile android e-location

52
République du Sénégal Un Peuple - Un But - Une foi ******************** MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE UNIVERSITÉ GASTON BERGER DE SAINT-LOUIS __________________ U.F.R DE SCIENCES APPLIQUÉES ET DE TECHNOLOGIE ___________________ Mémoire de Maitrise Informatique Sujet : ‹‹ Conception et développement d’une application Android e-location›› Réalisé par : Aly SECK Sous l’encadrement de : Pr Moussa LO (UGB) Année académique : 2014/2015 N° d’ordre :

Upload: alalsyse

Post on 17-Feb-2017

268 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Conception et developpement d'une application mobile Android e-location

République du Sénégal

Un Peuple - Un But - Une foi

********************

MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE

UNIVERSITÉ GASTON BERGER DE SAINT-LOUIS

__________________

U.F.R DE SCIENCES APPLIQUÉES ET DE TECHNOLOGIE ___________________

Mémoire de Maitrise Informatique

Sujet : ‹‹ Conception et développement d’une application Android e-location››

Réalisé par :

Aly SECK

Sous l’encadrement de :

Pr Moussa LO (UGB)

Année académique : 2014/2015 N° d’ordre :

Page 2: Conception et developpement d'une application mobile Android e-location

1

Nous vivons encore aujourd’hui au Sénégal avec cette idée, de moins en moins

justifiée et de plus en plus arrogante, que notre capacité d’innovation, en raison de

l’excellence de nos enseignants, de nos chercheurs et de nos ingénieurs, et de la qualité de

nos infrastructures, serait bien supérieure à celle des pays du Nord et de l’Est. Souvenez-vous

de la suffisance avec laquelle, au moment de la crise pétrolière, nous déclarions : “Nous

n’avons pas de pétrole mais nous avons des idées.” Il faut se rendre à l’évidence : nous

n’avons toujours pas de pétrole, mais nous ne sommes plus seuls à avoir des idées et des

capacités à les exploiter sous la forme d’applications concrètes au bénéfice du développement

économique et social. Voilà la nouveauté. Il s’agit d’un changement radical et irréversible

auquel nous devrons nous adapter.

Page 3: Conception et developpement d'une application mobile Android e-location

2

Table des matières AVANT-PROPOS .......................................................................................................................................... 6

INTRODUCTION GENERALE .......................................................................................................................... 7

CHAPITRE 1 : ETAT DE L’ART DES SOLUTIONS E-LOCATION ............................................................................. 8

INTRODUCTION .......................................................................................................................................... 8

I. DESCRIPTION DE L’EXISTANT ............................................................................................................... 9

I.1 KAYMU ............................................................................................................................................ 9

I.2 LAMUDI............................................................................................................................................ 9

I.3 EXPAT-DAKAR .................................................................................................................................. 9

II. LES LIMITES DE L’EXISTANT.................................................................................................................. 9

II.1 RESPONSIVE WEB DESIGN ................................................................................................................. 9

II.2 MENU COMPLEXE .......................................................................................................................... 10

III. NOTRE SOLUTION ........................................................................................................................ 10

CONCLUSION............................................................................................................................................ 10

CHAPITRE 2 : CAPTURE DES BESOINS .......................................................................................................... 10

INTRODUCTION .................................................................................................................................... 10

I. LES ACTEURS ................................................................................................................................ 11

I.1 L’ADMINISTRATEUR ......................................................................................................................... 11

I.2 LE CLIENT ....................................................................................................................................... 11

I.3 LE FOURNISSEUR DE SERVICES .......................................................................................................... 11

II. LES DIAGRAMMES ........................................................................................................................ 11

II.1 DIAGRAMMES DE CONTEXTE ........................................................................................................... 12

II.2 DIAGRAMME DE USE CASE .............................................................................................................. 12

CONCLUSION........................................................................................................................................ 13

CHAPITRE 3 : ANALYSES DES BESOINS ........................................................................................................ 14

INTRODUCTION .................................................................................................................................... 14

I. ANALYSE DU CAS D’UTILISATION « CREER COMPTE» ............................................................... 14

I.1 DESCRIPTION .................................................................................................................................. 14

II. ANALYSE DU CAS D’UTILISATION « CONTACTER FOURNISSEUR» .................................................. 15

II.1 DESCRIPTION ................................................................................................................................. 15

II.2 DIAGRAMME DE SEQUENCES DU CAS D’UTILISATION « CONTACTER UN FOURNISSEUR D’OFFRES » ....... 16

III. ANALYSE DU CAS D’UTILISATION « RETIRER UNE OFFRE» ............................................................... 17

III.1 DESCRIPTION ................................................................................................................................ 17

III.2 DIAGRAMME DE SEQUENCES DU CAS D’UTILISATION « RETIRER UNE OFFRE » .............................. 18

Page 4: Conception et developpement d'une application mobile Android e-location

3

IV. ANALYSE DU CAS D’UTILISATION « PROPOSER UNE OFFRE» ........................................................... 19

IV.1 DESCRIPTION................................................................................................................................ 19

IV.2 DIAGRAMME DE SEQUENCES DU CAS D’UTILISATION « PROPOSER UNE OFFRE» ................................. 19

CONCLUSION ............................................................................................................................................ 20

CHAPITRE 4 : IMPLEMENTATION ................................................................................................................ 21

INTRODUCTION ........................................................................................................................................ 21

I. ENVIRONNEMENT MATERIEL ....................................................................................................... 21

II. TECHNOLOGIES .................................................................................................................................. 21

II.1 NIVEAU 1 : LE CLIENT ANDROID ............................................................................................................. 21

II.2 NIVEAU 2 : LE SERVEUR WEB ................................................................................................................. 22

1. POINT SUR LES SERVICES WEB .......................................................................................................... 22

POURQUOI CHOISIR SOAP ..................................................................................................................... 23

POURQUOI CHOISIR REST ? .................................................................................................................... 23

2. BACKEND AVEC GOOGLE APP ENGINE( GAE) .................................................................................... 24

PRESENTATION .......................................................................................................................... 24

L’ENVIRONNEMENT D’EXECUTION JAVA ........................................................................................ 24

LA BASE DE DONNEES (DATASTORE) ............................................................................................. 24

GOOGLE CLOUD ENDPOINTS ....................................................................................................... 25

DESCRIPTION ET ARCHITECTURE DE LA SOLUTION A DEVELOPPER ....................................................... 26

LA SOLUTION A DEVELOPPER ....................................................................................................... 26

3. LA CREATION DU SERVEUR ET SA MISE EN PLACE : COTE SERVEUR ........................................................ 27

CREER LE SERVEUR APP ENGINE ................................................................................................... 27

CREER L’APPLICATION ET LES WEB SERVICES ................................................................................... 27

LES DIFFERENTES COUCHES DE L’APPLICATION ................................................................................ 30

L’ARCHITECTURE EN COUCHES DE L’APPLICATION APP ENGINE .......................................................... 31

II.3 NIVEAU 3: LE SERVEUR DE BASE DE DONNEES ........................................................................................... 32

II.3.1 LE DATASTORE: NOTRE SERVEUR DE BASE DE DONNEES NOSQL .......................................................... 34

A. DESCRIPTION ............................................................................................................................. 34

B. LE DATASTORE N’EST PAS UNE BASE DE DONNEES RELATIONNELLE .................................................... 34

C. FONCTIONNEMENT .................................................................................................................... 34

D. MANIPULER LES DATASTORE AVEC OBJECTIFY ................................................................................... 39

E. MISE EN CACHE AVEC MEMCACHE ................................................................................................. 43

F. LES TRANSACTIONS ...................................................................................................................... 44

III. CONCEPTION DE L’APPLICATION ....................................................................................................... 45

IV. QUELQUES COMPOSANTES APPLICATIVES REALISEES ............................................................... 45

Page 5: Conception et developpement d'une application mobile Android e-location

4

CONCLUSION ............................................................................................................................................ 48

CONCLUSION ET PERSPECTIVES .................................................................................................................. 49

Références bibliographiques............................................................................................................... 51

Page 6: Conception et developpement d'une application mobile Android e-location

5

Liste des figures Figure 1: Diagramme de contexte e-location ........................................................................................ 12

Figure 2: Diagramme de case d’utilisations général ............................................................................. 13

Figure 3: Diagramme de séquence du cas d’utilisation « créer compte » ............................................ 15

Figure 4: Diagramme de séquence du cas d’utilisation « contacter un fournisseur » .......................... 17

Figure 5: Diagramme de séquence du cas d’utilisation « retirer une offre » ....................................... 18

Figure 6: Diagramme de séquence du cas d’utilisation « retirer une offre » ....................................... 19

Figure 7: Un seul backend Endpoints avec plusieurs clients (Android, IOS, Firefox) .......................... 25

Figure 8: Architecture de la solution à développer ............................................................................... 26

Figure 9: Model en couches de l'application à développer................................................................... 31

Figure 10: L'architecture de l'application App Engine (le backend) ..................................................... 31

Figure 11: LE SERVEUR DE BASE DE DONNEES: les possibilités offertes par GAE ................................. 32

Figure 12: Tableau comparatif SQL vs NoSQL ....................................................................................... 33

Figure 13: Fonctionnement du Datastore avec Objectify ..................................................................... 40

Figure 14: Exécution d'une requête dans le Datastore ......................................................................... 44

Page 7: Conception et developpement d'une application mobile Android e-location

6

AVANT-PROPOS La quatrième année d'études en Informatique (Maitrise Informatique) à l'UFR des

Sciences Appliquées et Technologie de l'Université Gaston Berger de Saint Louis du Sénégal

se termine par un mémoire. Il sera l'occasion pour l'étudiant de montrer qu'il a acquis une

connaissance non seulement théorique mais aussi pratique de ces conventions. Ainsi dans ce

travail de fin de la maitrise en informatique, on a voulu associer trois grandes activités qui sont,

à la base, très éloignées l'une de l'autre mais qui, avec l'amélioration croissante des nouvelles

technologies, sont vouées à être fusionnées. Il s'agit de la programmation mobile Android, le

NOSQL et les services web.

Notre défi est donc de réaliser un projet innovant, utile et lié à l’actualité. Nous devons

développer une application mobile Android e-location. D'où l'objet de la rédaction du présent

rapport

Page 8: Conception et developpement d'une application mobile Android e-location

7

INTRODUCTION GENERALE Le Sénégal est un pays qui compte 14 993 125 [1] habitants et 43,68% [2] de la

population vivent dans les villes, principalement dans la capitale. Cette concentration de la

population dans les villes comme Dakar est due essentiellement au facteur économique. Parce

que, là se trouve la majeure partie des activités industrielles et commerciales mais aussi les plus

grandes infrastructures administratives et sanitaires. Ceci engendre un sérieux problème de

logements des populations qui y vivent. Face à cette situation, les bailleurs investissent dans le

domaine de la location, une activité lucrative. Ils proposent des offres de locations et alors un

autre problème se pose: la communication et/ou la publicité. Dans ce secteur, d’une part, le

citadin se demande comment trouver un bon logement satisfaisant à ses besoins, un logement

qui le convient à merveille. Et d’autre part, le propriétaire de logements se demande comment

trouver un preneur rapidement pour sa location. Face à cette situation, il est nécessaire de

trouver quelque chose qui peut mettre en rapport le citadin avec le bailleur que nous appelons

le fournisseur d’offres de locations, à faire passer son information à ceux qui sont à la recherche

d’une location, les clients. Donc une plateforme qui va permettre à ces clients de trouver le

logement de ses rêves en mettant à leur disposition non seulement des informations sur le

marché immobilier, mais aussi en les mettant en contact avec les fournisseurs d’offres de

locations.

L’application Android e-location doit être la solution escomptée. E-location sera

destinée à deux utilisateurs: d’une part un fournisseur qui propose des offres de location via son

compte dans l'application, il donne toutes les informations concernant l'offre : photo, adresse,

position géographique, prix. D’autre part un client qui, grâce à l'application, pourra voir les

offres proposées, avec options de recherche par ville, par quartier, par type d’appartement

(simple, R+1 ou R+2 …), et d’autres options pertinentes.

Traditionnellement, la première phase dans la réalisation d’un projet est de percevoir les

fonctionnalités qu’offrira notre application afin de définir un plan de conception évident pour

chacune, et discerner quels types d’utilisateurs pourront utiliser notre produit.

E-location n’échappera pas cette règle et de plus nous débuterons ce travail par une étude

préalable des solutions existantes pour ensuite passer à la conception et à la réalisation de notre

application. Ainsi ce présent rapport sera structuré en quatre (4) chapitres :

Dans le premier chapitre « Etat de l’art des solutions e-location », nous décrivons des solutions

existantes à savoir leurs philosophies ainsi que les limites de ces solutions. Et enfin, nous

critiquons l’existant et proposons une solution.

Dans le second chapitre intitulé «Capture des besoins », nous identifions les acteurs du futur

système, les besoins fonctionnels et non fonctionnels ainsi que les diagrammes de cas

d’utilisation et de contexte.

Dans le troisième chapitre « Analyse des besoins», nous faisons une analyse détaillée et

complète des cas d’utilisation repérés à travers le chapitre «Capture des besoins». Nous

élaborons ensuite une conception détaillée des cas d’utilisation et les diagrammes de séquence.

Dans le dernier chapitre intitulé « Implémentation », nous présentons l’environnement matériel

et logiciel, les technologies utilisées le passage vers le NOSQL, les services web, le cloud

Page 9: Conception et developpement d'une application mobile Android e-location

8

Google App Engine et quelques-uns de ses APIs. Nous terminons ce chapitre par donner

quelques composantes applicatives réalisées

Enfin, nous clôturons ce mémoire par une conclusion dans laquelle nous résumons notre

solution et ensuite nous exposons quelques perspectives.

CHAPITRE 1 : ETAT DE L’ART DES SOLUTIONS E-LOCATION

INTRODUCTION Avec l’avancée des technologies et la concurrence entre les entreprises, des applications sont

développées pour solutionner le problème décrit plus haut. Quelques-unes d’entre elles sont les

plus utilisées dans notre pays. Il s’agit de Kaymu, Lamudi Sénégal, Expat-Dakar. Dans cette

Page 10: Conception et developpement d'une application mobile Android e-location

9

partie nous allons d’abord essayer de décrire ces solutions. Ensuite nous identifions les limites

de ces solutions. Nous concluons enfin cette partie par une description de notre solution.

I. DESCRIPTION DE L’EXISTANT

I.1 KAYMU Kaymu est considéré comme la communauté de shopping en ligne n° 1 au Sénégal [3]. Il Nous

offrons une plateforme de rencontre entre acheteurs et vendeurs mais ne possédant pas de stock

de marchandises. Les fondateurs sont portés par l’idée que l’Internet est en mesure d’effacer

les barrières économiques et de faire progresser les pratiques du commerce tel que nous le

connaissons. Ils ont pour objectif d’inviter le e-commerce dans la vie des africains, de valoriser

l’activité des entrepreneurs locaux en les aidant à développer leurs magasins en ligne, et de

rendre le shopping facile et accessible à tous.

I.2 LAMUDI Lamudi [4] permet de trouver le logement, le terrain ou le local commercial de ses rêves. Leur

rôle est de vous aider à trouver la résidence idéale et de faire le lien avec l’agent immobilier

mandaté par le propriétaire du bien immobilier.

I.3 EXPAT-DAKAR Expat-Dakar est un grand espace de vente, d’achat et d’échanges d’objets neufs ou d’occasions

pour particuliers et professionnels [5]. Expat-dakar.com est un lieu dans lequel les utilisateurs

peuvent échanger de l’information. Il ne fournit ni ne vend l’information et les produits ou

services décrits dans les annonces du site. Chaque jour, plusieurs centaines d’annonces sont

publiées sur le site, dans 47 catégories différentes. Celles-ci vont des objets plus courants

(véhicules, vêtements, mobiliers, appareils électroniques...) aux objets de collection (antiquités,

masques, œuvres d’art, tableaux...).

II. LES LIMITES DE L’EXISTANT

Les solutions décrites plus haut sont soit des sites mobiles ou des applications. Par site mobile

on entend un site internet classique mais optimisé pour s’afficher aussi sur votre téléphone. Et

par application, nous retenons que c’est un logiciel entièrement créé pour être visible

uniquement sur un smartphone. Voyons à présent quelques limites des solutions existantes :

II.1 RESPONSIVE WEB DESIGN Depuis quelques années c’est une tendance que nous constatons: les applications web mobiles

sont de plus en plus prisées aux dépens des applications natives. L’avènement relativement

récent du responsive web design a beaucoup joué, car il permet de transformer l’apparence du

site en fonction des capacités d’affichage du terminal, via les media queries de CSS 3. Cela

signifie que c’est la même application web qui s’affiche que ça soit sur ordinateur ou sur

smartphone. Il n’y a donc pas à redévelopper. Ce pendant au lieu de développer une application

conçue entièrement pour une plateforme spécifique (Android, iPhone, Windows Phone, Klif),

les développeurs ont tendance à faire ce qu’on appelle « adaptation du site original » ceci laisse

des inconvénients à l’utilisation : la plupart du temps, les utilisateurs se trouvent dans

l'obligation de télécharger de manière inutile un code HTML/CSS [10]. De même, les images

sont souvent simplement allongées et non redimensionnées entrainant un impact négatif sur le

Page 11: Conception et developpement d'une application mobile Android e-location

10

temps de chargement. D'autre part, le Responsive Design ne permet pas d'ajuster facilement les

titres, descriptions et autres contenus sur les téléphones mobiles. De plus, Il oblige à un

chargement de tous les éléments constituant la page pouvant trahir une performance moindre.

II.2 MENU COMPLEXE Ces solutions que nous venons de décrire ne sont pas juste des applications ou sites mobiles

pour location de logements mais elles sont des communautés de shopping en ligne qui, de plus,

proposent des offres de logements dans le marché. On peut trouver des produits dans toute sorte

de catégories (beauté, santé, hygiène, mode, accessoires,…). Ainsi plusieurs fonctionnalités

sont offertes à l’utilisateur, avec des options parfois intitules pour ce dernier. De plus le client

aura du mal à faire la recherche et donc n’obtient guère le logement escompté. Ce qu’il lui

fallait c’était quelque chose plus simple à utiliser, très innovante, utile, liée à l’actualité et qui

satisfasse les utilisateurs.

III. NOTRE SOLUTION

Ce que nous proposons c’est quelque chose plus simple à utiliser, une application e-location,

destinée à deux utilisateurs un fournisseur d’offres et un client, qui non seulement offre les

fonctionnalités classiques (recherche de logement (en vente ou en location), contacter un

fournisseur d’offres, proposer des offres) mais de plus qui vous recommande des offres de

locations selon votre position (GPS). Et mieux encore plus léger si on utilise les mobiles et plus

facile de transmettre des données entre différentes plates-formes. La suite vous aidera à mieux

comprendre.

CONCLUSION Dans cette partie nous avons pu faire une étude sur les solutions qui existent au Sénégal à savoir

leurs statuts et leurs limites. Nous avons ensuite proposé notre solution. Ce qui prépare le terrain

à une capture des futurs besoins qui seront étudiés et modélisés dans le chapitre suivant.

CHAPITRE 2 : CAPTURE DES BESOINS

INTRODUCTION La capture des besoins consiste à recueillir (on dit aussi capturer) les besoins des utilisateurs

des actuelles ou futur. Pour cela, des modèles, à base de graphiques ou de scénarios, et des

logiciels ont été élaborés. Nous allons maintenant vous présenter les acteurs qui utiliseront

notre application, les fonctionnalités qu’ils pourront entreprendre, et notre système

Page 12: Conception et developpement d'une application mobile Android e-location

11

d’information en général. Tout cela, de façon à comprendre clairement comment nous avons

perçu ce projet.

I. LES ACTEURS

Vue la description du projet nous pouvons distinguer trois acteurs externes : un administrateur,

un client et un fournisseur de service.

I.1 L’ADMINISTRATEUR Ce type d’utilisateur sera mis en place afin de gérer les offres, les inscriptions et les demandes.

Il pourra gérer l’ensemble des comptes fournisseurs, contacter un fournisseur. Il pourra

modifier une offre en la mettant à jour ou en la supprimant.

I.2 LE CLIENT En effet, l’application e-location est destinée à être accessible pour tout visiteur souhaitant

connaître les biens à louer ou acheter dans une région désirée. e-location est censée faire la

promotion des offres de locations, et inciter l’utilisateur à s’intéresser à un ou plusieurs offres.

Ce même client pourra contacter un fournisseur de services, faire des recherches et même

s’inscrire afin d’avoir accès à des fonctionnalités plus avancées comme la proposition d’une

offre (en vente ou en location).

I.3 LE FOURNISSEUR DE SERVICES

Le fournisseur de service possède les mêmes droits qu’un client. En plus il peut proposer une

offre et même retirer sa proposition.

Le diagramme ci-dessous fait apparaitre les différents acteurs du système et leurs principales

interactions avec celui-ci.

II. LES DIAGRAMMES

Page 13: Conception et developpement d'une application mobile Android e-location

12

II.1 DIAGRAMMES DE CONTEXTE

Figure 1: Diagramme de contexte e-location

II.2 DIAGRAMME DE USE CASE Chaque usage que les acteurs font du système est représenté par un cas d’utilisation. Chaque

cas d’utilisation représente une fonctionnalité qui leur est offerte afin de produire le résultat

attendu.

Ainsi, « le diagramme de cas d’utilisation décrit l’interaction entre le système et l’acteur en

déterminant les besoins de l’utilisateur et tout ce que doit faire le système pour l’acteur ».

Ci-dessous le diagramme de cas d’utilisation général de notre système: l’objectif visé est le suivi

d’un bien (offres de location) de sa proposition à sa validation ou l’annulation.

Page 14: Conception et developpement d'une application mobile Android e-location

13

Figure 2: Diagramme de case d’utilisations général

Résumé: Notre application doit permettre :

A. Au client de rechercher ou consulter un bien, de s’inscrire dans le système et même de

contacter un fournisseur.

B. Au Fournisseur de service, de proposer un bien (vente ou location), consulter un bien, de

s’inscrire dans le système et même de contacter un autre fournisseur.

C. A l’administrateur de valider un compte client, de retirer une offre et de contacter un

fournisseur.

CONCLUSION Ce chapitre nous a permis de faire un découpage fonctionnel de notre futur système par le biais

du diagramme de cas d’utilisation et d’anticiper sur les interfaces qui seront développées

ultérieurement. Dans le chapitre suivant, nous présentons une analyse détaillée pour les cas

d’utilisation de notre système.

Page 15: Conception et developpement d'une application mobile Android e-location

14

CHAPITRE 3 : ANALYSES DES BESOINS

INTRODUCTION

Dans ce présent chapitre, nous nous proposons d’analyser les différents cas d’utilisation que

nous venons de repérer à travers l’activité de capture des besoins afin de déterminer les

différentes classes intervenant dans chacun des cas et de repérer le séquencement des flux pour

chaque scénario de réalisation.

I. ANALYSE DU CAS D’UTILISATION « CREER COMPTE» I.1 DESCRIPTION

Page 16: Conception et developpement d'une application mobile Android e-location

15

I.2 DIAGRAMME DE SEQUENCES DU CAS D’UTILISATION « CREER COMPTE »

Figure 3: Diagramme de séquence du cas d’utilisation « créer compte »

II. ANALYSE DU CAS D’UTILISATION « CONTACTER FOURNISSEUR» II.1 DESCRIPTION

Page 17: Conception et developpement d'une application mobile Android e-location

16

II.2 DIAGRAMME DE SEQUENCES DU CAS D’UTILISATION « CONTACTER UN

FOURNISSEUR D’OFFRES »

Page 18: Conception et developpement d'une application mobile Android e-location

17

Figure 4: Diagramme de séquence du cas d’utilisation « contacter un fournisseur »

III. ANALYSE DU CAS D’UTILISATION « RETIRER UNE OFFRE»

III.1 DESCRIPTION

Page 19: Conception et developpement d'une application mobile Android e-location

18

III.2 DIAGRAMME DE SEQUENCES DU CAS D’UTILISATION « RETIRER UNE

OFFRE »

Figure 5: Diagramme de séquence du cas d’utilisation « retirer une offre »

Page 20: Conception et developpement d'une application mobile Android e-location

19

IV. ANALYSE DU CAS D’UTILISATION « PROPOSER UNE OFFRE»

IV.1 DESCRIPTION

IV.2 DIAGRAMME DE SEQUENCES DU CAS D’UTILISATION « PROPOSER UNE

OFFRE»

Figure 6: Diagramme de séquence du cas d’utilisation « retirer une offre »

Page 21: Conception et developpement d'une application mobile Android e-location

20

CONCLUSION Comme nous pouvons le constater, l’activité d’analyse a permis de livrer une spécification

complète des besoins issus du diagramme de cas d’utilisation, de les structurer sous une forme

qui facilite la compréhension et qui ébauche vers l’activité de conception. Cette dernière, par

les diagrammes de séquences, va beaucoup être utile dans la partie d’implémentation de notre

application. Ce qui va être le prochain chapitre.

Page 22: Conception et developpement d'une application mobile Android e-location

21

CHAPITRE 4 : IMPLEMENTATION

INTRODUCTION

Dans ce chapitre, nous présentons l'architecture sur laquelle nous avons développé notre

application, les différents outils utilisés ainsi que les composantes applicatives réalisées.

I. ENVIRONNEMENT MATERIEL E-location est une application embarquée qui se connecte à un serveur distant de bases de

données, via internet, afin de récupérer les données. Ce qui nécessite aussi l’intégration d’un

serveur web entre l’application client et le serveur de base de données. D’où l’architecture de

notre application est à 3 niveaux (Architecture 3-tiers), elle est partagée entre :

Le client Android : Conteneur d’application et demandeur de ressources,

Le serveur Web : Vue que les données serons communiquées entre deux environnements

hétérogènes, le rôle principale du serveur web est de gérer la communication entre le client

Android et le serveur de base de données,

Le serveur de base de données fournis les données au serveur web.

II. TECHNOLOGIES E-location est une application est destinée à deux utilisateurs un fournisseur d’offres et un

client. Donc e-location est une application communicante, l’envoi et la récupération de donné

sont les fonctions indispensables. Comme nous l’avons dit e-location est une application à trois

niveaux qui nécessite chacun des technologies bien particuliers.

II.1 NIVEAU 1 : LE CLIENT ANDROID Ce niveau est moins complexe que les autres. Pour réaliser notre Android nous avons utilisé les

technologies suivantes :

ANDROID STUDIO

Android Studio est un nouvel environnement pour développement et programmation

entièrement intégré qui a été récemment lancé par Google pour les systèmes Android. Il a été

conçu pour fournir un environnement de développement et une alternative à Eclipse qui est

l'IDE le plus utilisé.

ANDROID SDK

Android SDK, c'est le nom de code pour le kit de développement (SDK = Software

Development Kit) de Google pour développer les applications qui tourneront sur le nouveau-

futur OS de la prochaine génération de téléphones mobiles... conçu par Google (et l'Open

Handset Alliance). Le pack proposé inclut l'ensemble des APIs et outils nécessaires pour un

développement complet d'applications. Le kit permet de tester le tout.

Page 23: Conception et developpement d'une application mobile Android e-location

22

ANDROID

Quand on pense à Android, on pense immédiatement à Google, et pourtant il faut savoir que

cette multinationale n'est pas à l'initiative du projet. D'ailleurs, elle n'est même pas la seule à

contribuer à plein temps à son évolution. À l'origine, « Android » était le nom d'une PME

américaine, créée en 2003 puis rachetée par Google en 2005, qui avait la ferme intention de

s'introduire sur le marché des produits mobiles. La gageure, derrière Android, était de

développer un système d'exploitation mobile plus intelligent, qui ne se contenterait pas

uniquement de permettre d’envoyer des SMS et transmettre des appels, mais qui devait

permettre à l'utilisateur d'interagir avec son environnement (notamment avec son emplacement

géographique). C'est pourquoi, contrairement à une croyance populaire, il n'est pas possible de

dire qu'Android est une réponse de Google à l'iPhone d'Apple, puisque l'existence de ce dernier

n'a été révélée que deux années plus tard.

C'est en 2007 que la situation prit une autre tournure. À cette époque, chaque constructeur

équipait son téléphone d'un système d'exploitation propriétaire. Chaque téléphone avait ainsi

un système plus ou moins différent. Ce système entravait la possibilité de développer facilement

des applications qui s'adapteraient à tous les téléphones, puisque la base était complètement

différente. Un développeur était plutôt spécialisé dans un système particulier et il devait se

contenter de langages de bas niveaux comme le C ou le C++. De plus, les constructeurs faisaient

en sorte de livrer des bibliothèques de développement très réduites de manière à dissimuler

leurs secrets de fabrication. En janvier 2007, Apple dévoilait l'iPhone, un téléphone tout

simplement révolutionnaire pour l'époque. L'annonce est un désastre pour les autres

constructeurs, qui doivent s'aligner sur cette nouvelle concurrence. Le problème étant que pour

atteindre le niveau d'iOS (iPhone OS), il aurait fallu des années de recherche et développement

à chaque constructeur...

C'est pourquoi est créée en novembre de l'année 2007 l'Open Handset Alliance (OHA), et qui

comptait à sa création 35 entreprises évoluant dans l'univers du mobile, dont Google. Cette

alliance a pour but de développer un système open source (c'est-à-dire dont les sources sont

disponibles librement sur internet) pour l'exploitation sur mobile et ainsi concurrencer les

systèmes propriétaires, par exemple Windows Mobile et iOS. Cette alliance a pour logiciel

vedette Android, mais il ne s'agit pas de sa seule activité. L'OHA compte à l'heure actuelle 80

membres.

II.2 NIVEAU 2 : LE SERVEUR WEB

1. POINT SUR LES SERVICES WEB

La méthode la plus répandue de se connecter à une base de données MySQL à distance à partir

d'un appareil Android, est de mettre une sorte de service dans le milieu. MySQL est

habituellement utilisé avec PHP, donc la façon la plus simple et le plus évident d'écrire des

scripts PHP pour gérer la base de données et exécuter ces scripts en utilisant le protocole HTTP

du système Android. Mais cela suppose que notre application est destinée seulement à un client

spécifique. Pourquoi cette limite ? Pourquoi pas un client IOS ou encore un client web ?

Les services Web sont devenus, depuis quelque temps, la norme de facto pour intégrer des

applications internes ou offrir une interface externe aux clients. Un service web est un élément

de logique applicative informatique distribué permettant l’échange de données entre

applications et systèmes hétérogènes. C’est un objet avec un langage, c’est une classe avec des

Page 24: Conception et developpement d'une application mobile Android e-location

23

méthodes qui peuvent être appelés à distance. Il est plus facile de transmettre des données entre

différentes plates-formes en utilisant ce moyen; plus facile de composer le message, plus facile

à déboguer, plus facile à comprendre. Alors un client développé avec n’importe quel langage

peut faire des appels aux méthodes du service web via des requêtes SOAP, REST, ou bien

même XML-RPC. Ainsi nous pouvons intégrer des parties du système écrites en Java, .NET,

PHP, ANDROID, IOS, etc. en utilisant un protocole bien connu et des messages textes

(généralement en XML).

Dès lors plusieurs technologies sont à notre disposition, il nous faut donc faire un tri. Nous

mettons d’un côté SOAP et XML-RPC qui permettent de transporter l’information XML à

travers d’une encapsulation XML. D’un autre côté, plaçons REST qui est plus une philosophie

du web et qui, pour résumer, propose de faire beaucoup plus simple que les services

traditionnels.

POURQUOI CHOISIR SOAP

En effet SOAP présente beaucoup d’avantages :

-Simple et extensible ;

-Adaptable à différents protocoles de transport ;

-Basé sur XML, il est indépendant des plates-formes cliente et serveur ;

Mais si on ne s’en tient qu’à cette liste, SOAP est fortement concurrencé par les autres formes

de services plus souples comme REST ou tout simplement par tous les mécanismes

requête/réponse sur http.

En ajoutant le point noir de SOAP, à savoir qu’il s’agit d’un protocole très verbeux et parfois

assez gourmand en ressources, beaucoup le déconseillent sur une plate-forme telle qu’Android,

qui proposera un environnement contraint sur des appareils mobiles. Enfin, même si sortis de

la boite Android ils ne proposent pas de fonctionnalités pour manipuler SOAP.

POURQUOI CHOISIR REST ?

REST est léger et simple : les messages sont courts, faciles à décoder par le navigateur et par le

serveur d’application.

REST est auto-descriptif : vous pouvez naviguer à travers ses ressources comme vous le feriez

avec une page Web. Il y a une URL intuitive unique pour chaque ressource. On peut facilement

en déduire la structure des ressources sans avoir besoin de beaucoup de documentation.

REST est « stateless » (il n’est pas adapté aux transactions longues et complexes) : il est parfait

pour les opérations simples (créer, lire, mettre à jour, effacer).

REST peut être géré en cache (antémémoire) : les ressources simples, identifiables sont aussi

faciles à mettre en cache qu’un article sur un site Internet. L’adaptation aux variations de charge

et la performance que cela apporte ne doivent pas être négligées.

REST n’est pas limité à XML: beaucoup d’implémentations utilisent JSON, un format encore

plus léger, moins verbeux.

Page 25: Conception et developpement d'une application mobile Android e-location

24

2. BACKEND AVEC GOOGLE APP ENGINE( GAE)

PRESENTATION

App Engine est une plateforme PaaS, qui permet de créer des applications Web à l'aide des

technologies Java, Python ou encore JavaScript et de les exécuter sur l'architecture évolutive

de Google.

App Engine permet de développer en toute simplicité des applications qui s'exécutent de

manière fiable, même lorsqu'elles sont surchargées et doivent faire face à des volumes de

données importants. App Engine comprend les fonctionnalités suivantes :

diffusion Web dynamique, avec prise en charge intégrale des technologies Web

courantes ;

stockage permanent avec requêtes, tri et transactions ;

équilibrage des charges et évolutivité automatique ;

API qui permet d'authentifier les utilisateurs et d'envoyer des e-mails via Google

Accounts ;

un environnement de développement local complet qui simule Google App Engine sur

votre ordinateur ;

des files d'attente de tâches qui permettent d'effectuer du travail en dehors du champ

d'une requête Web ;

des tâches planifiées qui déclenchent les événements aux moments spécifiés ou à

intervalles réguliers.

App Engine dispose d'un ensemble riche de services pour faciliter le développement

d'applications qui seront hébergées dans le Cloud de Google. Pour notre travail, nous allons

utiliser l'environnement d'exécution Java (JRE), la base de données (Datastore), et les outils

Google Cloud EndPoints.

L’ENVIRONNEMENT D’EXECUTION JAVA

L'environnement d'exécution Java d'App Engine fournit une machine virtuelle qui supporte

Java 8 et permet l'exécution des applications dans un environnement Cloud sécurisé (sandbox).

Le Runtine Java de la plateforme offre également une interface Servlet Java et la prise en charge

de l’interface standard avec le magasin de données et les services évolutifs App Engine tels que

JDO (Java Data Objects), JPA (Java Persistence API), JavaMail et JCache. La prise en charge

des normes facilite le développement des applications et permet de porter celles-ci vers et

depuis votre propre environnement de servlets.

LA BASE DE DONNEES (DATASTORE)

App Engine fournit un service performant de stockage distribué de données qui comprend un

moteur de recherche et la gestion des transactions. En même temps que les serveurs Web

distribués augmentent avec votre trafic, la base de données grossit avec vos données.

Le Datastore App Engine n'est pas comme une base de données relationnelle traditionnelle. Les

objets de données ou « entités » ont des propriétés. Les recherches peuvent retourner des entités

selon un filtre donné et les trier selon les propriétés de leurs valeurs.

Page 26: Conception et developpement d'une application mobile Android e-location

25

Les entités Datastore n'ont pas de schéma. La structure de données des entités est fournie et

mise en place par le code de l'application. Les interfaces JDO/JPA incluent les dispositifs pour

mettre en place la structure à l'intérieur de l'application. L'application peut aussi accéder au

Datastore directement pour mettre en place une structure répondant plus précisément aux

besoins du développeur.

Le Datastore implémente les transactions à travers son réseau distribué en utilisant des

« groupes d'entités ». Une transaction manipule des entités à l'intérieur d'un simple groupe. Les

entités du même groupe sont enregistrées ensemble par souci d'efficacité d'exécution des

transactions.

GOOGLE CLOUD ENDPOINTS

Pour faciliter le développement d'applications mobiles utilisant App Egine, Google a développé

un ensemble d'API connu sous le nom de « Cloud Endpoints ».

Cloud Endpoints permet de définir la logique métier sur App Engine et d'y accéder via des API

RESTful ou RPC (Remote Procedure Call) sur de multiples plateformes, y compris Android,

iOS et sur le Web (JavaScript). Cloud Endpoints est construit en utilisant l'infrastructure de

Google API, ce qui facilite l'interopérabilité avec des services Google.

Cloud Endpoints a été construit pour simplifier la tâche aux développeurs [8], en permettant un

développement flexible et agile. Il permet de :

libérer le développeur des travaux complexes de rédaction et de maintenance de code

pour les interactions et les protocoles client-serveur ;

générer du code optimisé pour les opérations CRUD ;

faciliter la création des API personnalisées (REST ou RPC).

Figure 7: Un seul backend Endpoints avec plusieurs clients (Android, IOS, Firefox)

Cloud EndPoints est un outil qui offre souplesse et simplicité au développeur qui souhaite créer

une application sur App Engine, dont les fonctionnalités seront exploitées par divers clients,

quelle que soit leur plateforme exécution.

Page 27: Conception et developpement d'une application mobile Android e-location

26

DESCRIPTION ET ARCHITECTURE DE LA SOLUTION A DEVELOPPER

La solution que nous allons mettre sur pied sera constituée de deux applications. Une

application App Engine qui fera office de Backend et une application Android qui sera le client

(frontend). Les données seront stockées sur le Datastore d'App Engine. Le diagramme de

composants ci-dessous permet d'avoir une idée plus précise sur les composants de notre solution

et son architecture physique et statistique.

Figure 8: Architecture de la solution à développer

LA SOLUTION A DEVELOPPER Deux étapes pour obtenir le résultat escompté :

la création du serveur et sa mise en place

Page 28: Conception et developpement d'une application mobile Android e-location

27

la création de l'application Android pour le côté client et des Web services côté

serveur à l'aide de Restlet.

3. LA CREATION DU SERVEUR ET SA MISE EN PLACE : COTE SERVEUR

Tout d'abord nous allons créer notre serveur App Engine. Nous nous occuperons ensuite de

l'application web que nous déploierons sur le serveur App Engine. Enfin, nous mettrons en

place les Webservices Restlet.

CREER LE SERVEUR APP ENGINE Pour créer le serveur App Engine, il suffit de vous connecter

sur https://appengine.google.com/ à l'aide de votre compte Google et suivre les options.

Vous disposez de 10 applications gratuites.

CREER L’APPLICATION ET LES WEB SERVICES On crée l’application sous Android studio en créant un nouveau projet. Ensuite il nous faut

ajouter un nouveau module (Google Cloud Module) dans l’application.

Android Studio nous donne une intégration directe avec App Engine. Grâce à Android Studio,

nous pouvons générer automatiquement les bibliothèques Cloud Endpoints client nécessaires

pour accéder au backend ainsi que des classes pour notre serveur. Il faut alors commencer à

définir nos nouvelles classes. Et pour chaque classe d'entité, vous devez générer une classe de

Cloud Endpoints pour donner à notre client l'accès aux données de l'application backend.

Page 29: Conception et developpement d'une application mobile Android e-location

28

Dès que le module backend est ajouté à notre projet et à synchroniser Gradle finitions, une

nouvelle configuration d'exécution avec le nom du module de votre backend doit être créé:

Pour nous assurer que notre backend démarré avec succès, accédons à http: // localhost: 8080.

Si tout va bien, nous devrions voir la page suivante:

Page 30: Conception et developpement d'une application mobile Android e-location

29

Il reste à connecter notre application Android client avec le backend. Il vous suffit de faire une

requête HTTP. L'extrait de code suivant illustre comment créer un AsyncTask qui rend la

requête HTTP pour le backend et imprime le résultat chaîne entrant vers un toast dans un

contexte donné:

class ServletPostAsyncTask extends AsyncTask<Pair<Context, String>, Void,

String> {

private Context context;

@Override

protected String doInBackground(Pair<Context, String>... params) {

context = params[0].first;

String name = params[0].second;

HttpClient httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost("http://10.0.2.2:8080/hello"); // 10.0.2.2

//l’adresse ip de l’emulateur Android

try {

// Add name data to request

List<NameValuePair> nameValuePairs = new

ArrayList<NameValuePair>(1);

nameValuePairs.add(new BasicNameValuePair("name", name));

httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

Page 31: Conception et developpement d'une application mobile Android e-location

30

Enfin, nous avons besoin d'invoquer cette AsyncTask d'un de nos activités Android. Par

exemple, pour exécuter de la classe MainActivity, ajoutons le code suivant à la méthode

LES DIFFERENTES COUCHES DE L’APPLICATION

L'application Android sera constituée des couches suivantes :

la couche présentation (IHM - Interface Homme Machine) : elle correspond à la

partie visible de l'application. La couche présentation relaie les requêtes de l'utilisateur

à destination de la couche métier, et en retour lui présente les informations renvoyées

par les traitements de cette couche ;

la couche métier (BLL - Business Logic Layer) : la couche métier sera utilisée pour

développer toute la logique métier de l'application Android. Elle est intercalée entre

l'IHM et la bibliothèque App Engine Client Lib, et permettra d'effectuer toutes les

manipulations de données nécessaires en fonction des requêtes effectuées par les

utilisateurs au travers de la couche présentation ;

App Engine Backend Client Lib : cette couche fournit un accès simplifié à

l'application serveur hébergée sur App Engine via Google Cloud Endpoints ;

le modèle objets : le modèle ici représente les ressources qui seront manipulées par

notre application et notre API.

// Execute HTTP Post Request

HttpResponse response = httpClient.execute(httpPost);

if (response.getStatusLine().getStatusCode() == 200) {

return EntityUtils.toString(response.getEntity());

}

return "Error: " + response.getStatusLine().getStatusCode() + " " +

response.getStatusLine().getReasonPhrase();

} catch (ClientProtocolException e) {

return e.getMessage();

} catch (IOException e) {

return e.getMessage();

}

}

@Override

protected void onPostExecute(String result) {

Toast.makeText(context, result, Toast.LENGTH_LONG).show();

}

}

MainActivity.onCreate=new ServletPostAsyncTask().execute(new Pair<Context, String>(this,

"elocation"));

Page 32: Conception et developpement d'une application mobile Android e-location

31

Figure 9: Model en couches de l'application à développer

L’ARCHITECTURE EN COUCHES DE L’APPLICATION APP ENGINE

Les différentes couches que nous allons utiliser pour cette application sont les suivantes :

les classes Endpoints : les classes Endpoints représentent en quelque sorte la couche

d'accès aux données. Les méthodes que chaque classe Endpoint possède permettent

d'insérer, mettre à jour et supprimer les objets dans le Datastore ;

le modèle objets : le modèle ici représente les ressources qui seront manipulées par les

classes Endpoint

Figure 10: L'architecture de l'application App Engine (le backend)

Page 33: Conception et developpement d'une application mobile Android e-location

32

II.3 NIVEAU 3: LE SERVEUR DE BASE DE DONNEES

II.3.1 DESCRIPTION

Nous avons l'habitude de stocker deux types de fichiers :

Stocker des informations : on a très régulièrement besoin d'enregistrer des

informations. Ça peut être le nom d'un nouveau membre, un message qu'il laisse, une

commande qu'il effectue sur l’application...

Stocker des fichiers : on a parfois besoin de stocker de nouveaux fichiers, que ce soient

des images, des .zip, etc. Ces fichiers sont le plus souvent uploadés par les utilisateurs

du site web.

Pour répondre à ces besoins, Google App Engine fournit différents services :

Pour le stockage d'informations, on a en général besoin d'une base de données. C'est

en effet le moyen le plus sûr et le plus structuré pour "ranger" les informations. Google

App Engine propose 2 types de bases de données :

o Une base de données relationnelle SQL : c'est le service Google Cloud SQL. Il

s'agit en fait d'une base de données MySQL gérée en Cloud.

o Une base de données non relationnelle NoSQL : c'est le service Datastore. Il est

basé sur Big Table, le système de stockage créé par Google pour ses propres

services pour des besoins de performance (qui a d'ailleurs lui-même inspiré en

bonne partie le mouvement NoSQL).

Figure 11: LE SERVEUR DE BASE DE DONNEES: les possibilités offertes par GAE

Si on adapte une application qui existe déjà et dans laquelle on a utilisé une base de données

relationnelle comme MySQL, il est inutile de tout changer. Il faut utiliser la base de données

relationnelle Google Cloud SQL.

Page 34: Conception et developpement d'une application mobile Android e-location

33

Si on est curieux de découvrir une nouvelle façon de stocker les données, qu’on a toujours

entendu parler de NoSQL mais qu’on n’a jamais eu l'occasion de s’y mettre, essayez-vous

au Datastore.

Voici un petit tableau comparatif SQL vs NoSQL :

Fonctionnalité SQL

(ex : MySQL)

NoSQL

(ex : Datastore) Avantage

Scalabilité

multi-serveurs

Limité à un serveur

principal pour les écritures.

Pour avoir plus de

puissance en écriture il faut

un plus gros serveur.

Multi-serveurs par défaut,

pas de limitations. La

charge est aisément

répartie sur plusieurs

serveurs.

NoSQL

Structuration

des données

Les données sont toujours

très structurées dans des

tables. Pratique quand on a

besoin d'une structure

précise.

Adapté pour les données en

structure arborescente (ex :

XML, JSON...) dont la

forme peut varier.

Dépend

des

besoins

Puissance du

langage SQL

Permet d'effectuer des

requêtes complexes et

précises (parfois assez

lentes).

Permet d'effectuer

seulement des requêtes

simples, mais rapides.

SQL

Schéma des

données

Le schéma est contraignant

: vous devez absolument

faire "rentrer" les données

dans les cases prévues.

Avantage : tout est toujours

proprement rangé.

Le schéma n'est pas

contraignant : vous pouvez

faire ce que vous voulez,

stocker comme vous le

voulez. Défaut : il faut

vérifier manuellement si

tout est bien rangé.

Dépend

des

besoins

Transactions Les transactions sont

strictes : les données sont

immédiatement

enregistrées et à jour.

Les transactions sont

possibles mais cela

demande plus de travail.

Les données peuvent être

enregistrées avec un léger

retard.

SQL

Figure 12: Tableau comparatif SQL vs NoSQL

Page 35: Conception et developpement d'une application mobile Android e-location

34

II.3.1 LE DATASTORE: NOTRE SERVEUR DE BASE DE DONNEES NOSQL

A. DESCRIPTION

Le Datastore est la voie royale pour stocker des données sur Google App Engine [1]. C'est

clairement l'outil que Google nous conseille d'utiliser. Vous pouvez vous en servir gratuitement

(jusqu'à une certaine limite de trafic) et on ne vous en dit que du bien : il serait rapide, capable

de gérer de fortes charges, réparti sur de multiples Datacenter... On dit même qu'il serait basé

sur Big Table, la technologie qu'utilise Google pour stocker toutes ses données, notamment les

résultats d'indexation des milliards de pages web par le Google Bot. Le Datastore fonctionne

en mode High Replication Datastore (HRD). Ce système est très résilient aux erreurs : il fait en

sorte que vos données soient copiées sur de multiples Datacenter ! L'objectif est que votre

application puisse continuer à fonctionner même en cas d'évènement catastrophique.

Si le Datastore est alléchant, il est néanmoins très différent d'une base de données SQL comme

MySQL... Pour vous et moi qui sommes habitués aux bases SQL, c'est un changement très

important : le Datastore est ce qu'on appelle une base de données NoSQL.

En fait beaucoup de gens croient que "NoSQL" est une opposition au SQL, alors que c'est en

fait l'acronyme de "Not Only SQL" (pas seulement du SQL). On y reprend des principes de

SQL mais pas tous. L'objectif est de se débarrasser de tout ce qui empêche habituellement les

sites basés sur SQL de croître avec un fort trafic.

B. LE DATASTORE N’EST PAS UNE BASE DE DONNEES RELATIONNELLE

Le Datastore est à plusieurs égards beaucoup plus basiques et bas niveau qu'une base de données

classique. Il n'utilise pas de tables. Il n'y a pas de schéma SQL : on dit que le Datastore est

schemaless (sans schéma). Il faut l’imaginez comme un espace géant prêt à accepter des

données, n'importe quelles données. On lui envoie du contenu et il nous le stocke. Quand nous

en avons à nouveau besoin, il nous suffit de le lui demander.

C. FONCTIONNEMENT

Le Datastore peut être utilisé de façon massive, avec beaucoup de données et de requêtes

simultanées. Pourtant, à son plus bas niveau, il fonctionne de façon très simple : il accepte des

clés et des valeurs. Exactement comme une HashMap [8].

A son niveau le plus basique, le Datastore ressemble donc à ça :

Clé : valeur

Ex : pseudo Ex : Aly

Page 36: Conception et developpement d'une application mobile Android e-location

35

Le Datastore stocke des paires clé-valeur et est capable d’en stocker beaucoup, beaucoup,

beaucoup de paires clé-valeur :

Si on en tien juste là vous pouvez penser que ce n'est pas structuré ! Ca fait juste un grand bazar

! On ne va quand même pas mélanger des noms de membres, des messages, des

commandes...En fait, le Datastore est un peu plus malin que ça. Il vous permet de regrouper les

données dans des entités.

Les entités organisent (un peu) les données.

Le Datastore a un concept d'entités. C'est ce qui nous aide à structurer les informations. Les

entités sont des regroupements d'une ou plusieurs paires clé-valeur. Elles ressemblent à ceci :

Le Datastore est aussi capable d'associer les entités entre elles. Une entité peut avoir une entité

parente, qui peut elle-même avoir une entité parente, etc.

On peut aussi stocker des entités sans parent.

Page 37: Conception et developpement d'une application mobile Android e-location

36

Les entités comme des objets:

Un élément m'a aidé à bien comprendre le Datastore. Je me suis mis à imaginer que les

entités sont comme des objets en Java. Un objet possède plusieurs attributs : ce sont les

paires clé-valeur. La clé correspond au nom de l'attribut, et la valeur... à sa valeur.

Pour prendre un exemple, imaginons un Fournisseur d'offres. Il possède des attributs : un

nom, un numéro de téléphone,…Il possède aussi une offre de location qui a ses propres

caractéristiques (id_location, adresse,…) Les entités dans le Datastore pourraient être

représentées comme ceci :

Page 38: Conception et developpement d'une application mobile Android e-location

37

Fournisseur

Location

Comment identifier une entité :

Les entités sont des groupes de données qui vivent dans l'espace intersidéral du Datastore. Il

peut y en avoir une très grande quantité. Parfois, certaines entités sont reliées entre elles : elles

ont une relation de parenté. Les données (paires clé-valeur) au sein des entités sont appelées des propriétés. Celles-ci stockent obligatoirement des données basiques, comme du texte ou des nombres. La doc de Google nous donne tous les types autorisés [11]. Vu qu'il y en a des milliers, des millions voire même des milliards qui vivent au sein du Datastore, il va falloir leur donner un nom unique pour les repérer ! Une fois qu'on aura l'entité, on saura alors facilement lire et modifier toutes ses propriétés.

Pour identifier une entité, Google utilise la combinaison de 3 informations :

Un type (kind) : c'est le type de données de votre entité. Par exemple, on peut dire que

le type de données de mon fournisseur d’offre est... "Fournisseur". C'est ma classe

"Fournisseur".

Un identifiant (identifier) : il peut s'agir soit d'une chaîne de caractères soit d'un nombre.

Vous pouvez le définir vous-mêmes ou bien laisser Google générer un nombre pour

vous.

Un parent (ancestor path) : si l'entité possède un parent, celui-ci aidera à identifier

l'entité de façon unique. Si l'entité ne possède pas de parent, on dit que c'est une entité

racine (root). Dans ce cas l'ancestor path vaut null.

En résumé :

Nom : Aly

Téléphone : 77 123 45 67

Id_location : 0078

Adresse : Saint Louis

Page 39: Conception et developpement d'une application mobile Android e-location

38

Ex : Fournisseur Ex : Aly Ex : null (pas de parents)

Si on le rapportait à notre exemple précédent avec des fournisseurs et des offres, ça donnerait

quelque chose de ce genre :

Fournisseur : aly : null

Location : id_location :(Fournisseur :aly)

Les opérations:

Maintenant que nous savons comment le Datastore de Google stocke les entités, il ne nous

reste plus qu'une chose à voir avant de commencer à coder : quelles actions peut-on faire sur

une telle base ?

Il y a 4 opérations de base disponibles dans une base de données NoSQL comme le

Datastore [9]

get() : récupère une entité en fonction de son identifiant

put() : écrit une entité (ou en écrase une)

delete() : supprime une entité via son identifiant

query() : retrouve des entités en fonction de certains critères de recherche

Nom : Aly

Téléphone : 77 123 45 67

Id_location : 0078

Adresse : Saint Louis

Page 40: Conception et developpement d'une application mobile Android e-location

39

Avant toute chose, vous devez importer les APIs du Datastore dans votre application :

import com.google.appengine.api.datastore.*;

Ensuite, vous devez récupérer un objet représentant le service du Datastore. On fait appel à une

factory qui nous renvoie l'objet dont nous allons avoir besoin. Cela se fait en une ligne :

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

Arrivé juste ici alors nous somme prêt à utiliser Datastore. Passons maintenant à la création

d’une entité.

Pour créer une entité trois opérations sont nécessaires :

1. Créez l'objet représentant l'entité, de type Entity

2. Assignez-lui une ou plusieurs propriétés (ce sont les paires clé-valeur)

3. Demandez l'écriture de l'entité au Datastore avec la méthode put()

Essayons de recréer l'entité Fournisseur que j'avais inventée pour vous expliquer le

fonctionnement du Datastore :

D. MANIPULER LES DATASTORE AVEC OBJECTIFY

On vient de le voir : le Datastore est un système puissant mais son API bas niveau est assez

délicate à utiliser, notamment son système de requêtes. De l'avis de plusieurs développeurs (y

compris des gens de chez Google !), il est recommandé d'utiliser la bibliothèque Objectify pour

travailler avec le Datastore aujourd'hui.

Contrairement au Datastore lui-même, la lib Objectify n'est pas maintenue par Google lui-même

mais par un développeur externe. Objectify est particulièrement suivi et maintenu, c'est donc

un excellent choix pour développer avec le Datastore. Objectify se veut être une API "ni trop

bas niveau, ni trop haut niveau". Elle (heureusement) plus haut niveau que l'API de base que

nous venons de découvrir, mais elle ne nous empêche pas d'effectuer des actions basiques si

nécessaire. Objectify est un peu comme un ORM pour le Datastore : son rôle est de persister

(stocker) vos objets dans le Datastore.

// Crée l'entité de type (kind) "Fournisseur"

Entity fournisseur = new Entity("Fournisseur");

// Assigne des propriétés à l'entité

fournisseur.setProperty("nom", "Aly");

fournisseur.setProperty("telephone", "777777777" );

// Enregistre l'entité dans le Datastore

datastore.put(fournisseur);

Page 41: Conception et developpement d'une application mobile Android e-location

40

Figure 13: Fonctionnement du Datastore avec Objectify

Objectify s'occupe de la création d'entités et de clés et de la relation entre ces éléments. Mieux:

il utilise automatiquement le service Memcache de Google qui permet de mettre en cache des

données pour aller encore plus vite et vous éviter d'appeler systématiquement le Datastore.

Objectify est suffisamment simple à comprendre et pourtant très puissant. La plupart des vraies

applications sur App Engine l'utilisent aujourd'hui. Objectify est une bibliothèque créée par un développeur tiers. Elle n'est pas installée automatiquement avec le plugin App Engine pour Eclipse. Heureusement, son installation et sa configuration sont simples. Le projet Objectify est hébergé sur Google Code à l'adresse suivante : https://github.com/objectify/objectify.

i. CREER DES OBJETS PERSISTANTS

Comme l'API bas niveau du Datastore, Objectify nous permet d'effectuer des opérations

basiques sur les entités via leurs clés :

Ecrire une entité

Récupérer une entité grâce à sa clé

Supprimer une entité grâce à sa clé

Nous nous intéressons ici à ces opérations simples. Nous verrons juste après comment effectuer des requêtes, ce qui est un poil plus complexe mais quand même bien plus lisible que l'API bas niveau.

Pour travailler avec Objectify, on doit d'abord récupérer son instance. Cela se fait comme ceci:

ObjectifyService.ofy()

Le principe d'Objectify est que vous pouvez enchaîner plusieurs appels sur cette instance. Par

exemple, pour charger un objet en fonction de sa clé on ferait :

Objet monObjet = ObjectifyService.ofy().load().key(cle).now();

Comme vous allez devoir écrire ObjectifyService.ofy() de nombreuses fois, il est

recommandé d'effectuer une définition statique au début du fichier :

import static com.googlecode.objectify.ObjectifyService.ofy;

Vous pouvez alors écrire simplement ofy() au lieu de ObjectifyService.ofy():

Objet monObjet = ofy().load().key(cle).now();

Page 42: Conception et developpement d'une application mobile Android e-location

41

- ECRIRE UNE ENTITE

Objectify travaille sur des objets. La première chose à faire est donc, dans votre servlet, de créer

des objets comme vous avez l'habitude de le faire en Java :

Fournisseur f = new Fournisseur ("aly", ("77 777 77 77");

Notre Personnage p peut ensuite être persisté dans le Datastore avec cette simple commande :

ofy().save().entity(f); // Asynchrone (pas enregistré immédiatement)

Par défaut, les sauvegardes sont asynchrones. Cela signifie que le Datastore rend la main à votre

programme avant d'avoir enregistré les données. C'est la méthode la plus rapide mais, si vous

avez besoin des données que vous venez d'enregistrer immédiatement après, vous voudrez peut-

être forcer l'enregistrement de façon synchrone comme c'est le cas en SQL. Pour ça, rajoutez

juste un appel à now () à la chaîne :

ofy().save().entity(f).now(); // Synchrone (enregistré immédiatement)

- RECUPERER UNE ENTITE

Pour récupérer une entité, vous devez connaître sa clé. Je vous rappelle qu'une clé est

simplement un identifiant constitué du type + de l'ID + du parent.

- LES CLES

Le Datastore nous fournissait déjà la classe Key qui représente une clé. Cette classe s'utilise

comme ceci pour rappel :

Key clePersonnage = KeyFactory.createKey("Fournisseur", "aly"); // API bas niveau

Mais Objectify fournit une légère variante : la classe Key<?> (qui indique en plus le type d'objet

stocké). On peut l'utiliser comme ceci :

Key<Fournisseur> cleFournisseur = Key.create(Fournisseur.class, "aly");

Les deux types de clés sont utilisables dans Objectify. A noter qu'il existe aussi le type Ref<?>

qui fonctionne comme Key<?> mais qui permet de manipuler les sous-objets plus facilement.

ii. CHARGER L'INSTANCE OBJECTIFY

- CHARGER UN OBJET GRACE A SA CLE

Page 43: Conception et developpement d'une application mobile Android e-location

42

Pour charger un objet, on crée d'abord sa clé (soit avec la classe Key bas niveau du Datastore,

soit avec la classe Key<?> d'Objectify) puis on demande son chargement :

Key<Personnage> cleFournissseur = Key.create(Fournisseur.class, "aly");

Fournisseur r = ofy().load().key(cleFournisseur).now();

Plus fort que le Roquefort, Objectify nous permet aussi de charger un objet sans passer par

l'étape préalable de création d'une clé :

Fournisseur r = ofy().load().type(Fournisseur.class).id("aly").now();

Il s'agit juste d'une syntaxe plus pratique créée par Objectify. Elle a le même effet que si vous

étiez passés par la création d'une clé.

Si on veut récupérer une entité qui a un parent, il faudra ajouter un appel à parent() dans la

chaîne comme ceci :

Location a =

ofy().load().type(Location.class).parent(fournisseur).id("maison").now();

- SUPPRIMER UNE ENTITE

En tant que roi du Datastore, vous avez droit de vie et de mort sur vos entités. Il n'y a rien de

plus simple : indiquez en paramètre l'objet que vous voulez supprimer du Datastore.

ofy().delete().entity(objetASupprimer).now();

Si vous voulez varier les plaisirs, vous pouvez aussi supprimer l'entité via sa clé :

ofy().delete().key(cleObjetASupprimer).now();

Ou utiliser la syntaxe offerte par Objectify qui vous évite d'avoir à créer une clé :

ofy().delete().type(Fournissuer.class).id("aly").now();

iii. LES REQUETES

Exécuter des requêtes avec Objectify est beaucoup plus pratique que l'API bas niveau du

Datastore. En fait, la syntaxe de base est la même que le chargement via une clé. Il vous suffit

de rajouter des filtres via filter() et d'indiquer que vous voulez qu'on vous retourne une liste

avec list():

Retourne tous les fournisseurs dont le nom est aly

List<Fourniseur> fournisseur = ofy().load().type(Fournisseur.class).filter("

nom","aly").list();

On peut aussi rechercher parmi les ancêtres via leur clé avec la même méthode :

Page 44: Conception et developpement d'une application mobile Android e-location

43

List<Arme> armes =

ofy().load().type(Location.class).ancestor(KeyFactory.createKey(

"Fournisseur.class", "aly")).list();

Il faut noter que Vous ne pouvez effectuer des requêtes que sur des propriétés indexées par le

Datastore. Par défaut Objectify n'indexe pas les attributs des classes, sauf si vous utilisez

l'annotation @Index. Vérifiez donc que vous avez correctement défini vos index avant

d'effectuer des requêtes !

E. MISE EN CACHE AVEC MEMCACHE

App Engine offre un service de Memcache. Pour ceux qui ne connaissent pas Memcache, il

s'agit d'un logiciel qui tourne uniquement en mémoire vive (RAM) sur des serveurs et qui stocke

des paires clé-valeur. Memcache se révèle en fait un excellent complément au Datastore.

Puisqu'il ne nécessite pas d'accéder à des disques, il est beaucoup plus performant que le

Datastore (en gros, une requête Memcache va 10 fois plus vite qu'une requête dans le

Datastore). On serait tenté de tout mettre dans Memcache mais il ne faut pas oublier que les

données peuvent vraiment être perdues à tout moment : si le serveur redémarre tout est perdu

et s'il n'y a plus de place en mémoire Memcache supprime arbitrairement de vieilles données

en cache.

Il faut savoir que le service Memcache chez Google est gratuit. Google veut nous encourager

à utiliser intensivement Memcache pour alléger la charge des serveurs du Datastore. Nous

n'allons donc pas nous en priver.

En pratique, l'utilisation combinée de Memcache et du Datastore se fait comme ceci :

1. On s'apprête à faire une requête dans le Datastore pour récupérer des données

2. On demande d'abord à Memcache s'il possède déjà ces données

3. Si Memcache les possède, on aura récupéré les données 10x plus rapidement et sans

passer par le Datastore

4. Si Memcache ne les possède pas, on fait une requête classique au Datastore et on stocke

le résultat dans Memcache pour que la prochaine requête aille plus vite.

Page 45: Conception et developpement d'une application mobile Android e-location

44

Figure 14: Exécution d'une requête dans le Datastore

F. LES TRANSACTIONS

Les transactions sont indispensables dans un grand nombre d'applications. Elles vous

permettent d'exécuter plusieurs requêtes d'affilée et de vous assurer qu'elles ont bien fonctionné

avant de réellement enregistrer les données.

Objectify fournit un système très pratique pour effectuer des transactions. On pourrait aussi le

faire avec l'API bas niveau.

Il y a 2 cas :

Soit votre transaction doit retourner des données (sous forme d'un objet)

Soit votre transaction ne doit pas retourner de données

Si la transaction ne doit pas retourner de données, voici comment on l'écrirait avec Objectify :

import com.googlecode.objectify.VoidWork;

ofy().transact(new VoidWork() {

public void vrun() { // Tout ce qui est exécuté dans cette méthode appartient à la

même transaction

Page 46: Conception et developpement d'une application mobile Android e-location

45

Objet objet = ofy().load().key(cle).now();

/* Modification de l'objet... */

ofy().save().entity(objet);

}

}

Si la transaction doit retourner de données, voici comment on l'écrirait avec Objectify

import com.googlecode.objectify.Work;

Objet monObjet = ofy().transact(new Work<Objet>() {

public Objet run() {

Objet objet = ofy().load().key(cle).now();

/* Modification de l'objet... */

ofy().save().entity(objet);

return objet;

}

});

III. CONCEPTION DE L’APPLICATION

La création de notre application se fera selon les étapes suivantes :

création de l'application Android ;

génération du Backend App Engine ;

création des classes Entity ;

création des classes Endpoints ;

génération de l'API Client ;

création des méthodes d'accès sous Android ;

test ;

déploiement.

On crée l’application avec Android Studio. Ensuite il nous faut ajouter un nouveau module

(Google Cloud Module) dans l’application afin de créer notre backend. Le backend créé il nous

faut passer à la création des classes Entity qui vont être le model de l’application. Les classes

Entity créées, il faut maintenant générer les classes Cloud Endpoints pour chaque classe d'entité

et bien sûr des modifications seront faites sur les classes Endpoints. Il ne reste plus qu’à générer

l’API client et créer des méthodes d’accès sous Android afin de pouvoir tester l’application et

passer au déploiement.

IV. QUELQUES COMPOSANTES APPLICATIVES REALISEES

Pour plus simplicité dans l’utilisation de l’application E-location, l’interface de l’application

doit présenter 2 onglets : un onglet pour la liste de toutes les offres disponibles et l’onglet pour

les recommandations. De plus on a un bouton de recherche et un bouton pour ajouter une

nouvelle offre. En haut de l’application on a une barre de titre affichant le nom de l’application

et un bouton nous conduisant au menu de l’application. L’accueil sera comme suite :

Page 47: Conception et developpement d'une application mobile Android e-location

46

Ainsi si on clique sur le menu on obtient l’interface suivant qui nous offre la possibilité de se

connecter via son compte Gmail, de créer un compte ou même de sélectionner les offres selon

leurs statuts (en location ou en vente)

Page 48: Conception et developpement d'une application mobile Android e-location

47

Si l’application est lancée pour la première fois et on clique sur l’option se connecter, l’interface

ci-dessous se présente au client Elle lui demande d’autoriser à e-location d’accéder à vos

contacts

Page 49: Conception et developpement d'une application mobile Android e-location

48

Après avoir accepté la demande, le fournisseur d’offre peut se connecter et ainsi il pourra

ajouter une offre.

CONCLUSION Cette partie est la partie est plus délicate dans le développement de notre application. Beaucoup

de technologies sont utilisés notamment les API de Google App Engine dans la réalisation du

backend. Enfin, nous nous intéressons à tester l’application.

Page 50: Conception et developpement d'une application mobile Android e-location

49

CONCLUSION ET PERSPECTIVES

Notre sujet de mémoire a consisté en la conception et le développement d’une

application Android « e-location» afin d’apporter la solution aux problèmes détectés dans le

marché immobilier du Sénégal.

Dans une dynamique de promouvoir une bonne gestion des ressources et un très bon

management moderne, dans un monde où le vent des progrès de la technologie souffle avec

force, dans un milieu où les clients utilisent des devises de plateformes différentes (ordinateurs,

mobile Android, mobile IOS, mobile Firefox,…), nous avons jugé nécessaire de faire deux

applications : une application App Engine qui fera office de Backend et une application Android

qui sera le client (frontend). Nous sommes arrivés à développer les fonctionnalités les plus

essentielles de l’application backend dans les temps (l’ajout d’une nouvelle offre, la recherche

d’une offre, les recommandations suivant la position géographique courante de l’utilisateur) et

nous avons pu développer quelques fonctionnalités de l’application client Android.

Ce mémoire nous a permis d’approfondir nos connaissances théoriques, acquises tous

le long de notre formation, par la pratique des nouvelles technologies. Cette expérience nous a

permis de maîtriser le langage de modélisation UML et les outils de développement Android à

savoir le SDK Android. Il nous a permis aussi de découvrir les langages comme JSP, XML,

JSON.

Le mémoire nous a également permis de découvrir comment fonctionne l’architecture

3-tiers. Nous nous sommes beaucoup instruits, notamment dans des domaines que nous

connaissions peu tels que la programmation sur Smartphone, la technologie NOSQL ou encore

la technologie Google APP Engine sur lequel, le développement n’a pas été une tâche facile du

fait qu’il y a peu du support puisque c’est récent.

Les plus grandes difficultés que nous avons rencontrées durant la conception de

l’application ont été d’utiliser le backend réalisé avec Google App Engine dans le client

Android et de trouver de la documentation sur cette technologie. En effet, la recherche de

renseignement demande de la patience car il est parfois difficile de trouver des informations sur

quelque chose de peu commun ou nouveau. Il a également été difficile de configurer

l’environnement sur lequel on travailler.

Nous avons également appris à surmonter une difficulté et de savoir prendre des

décisions lorsque plusieurs solutions présentent. Cela nous a permis de développer des

méthodes de recherche d’informations, notamment sur Internet.

Enfin, l’application que nous avons développée pourrait être enrichie par des

fonctionnalités avancées telles que l’intégration de la technologie kanel dans l’application

permettant ainsi de recevoir des sms de la part des fournisseurs et faire des recherches d’offres

de locations ou de ventes de par l’envoi d’un simple sms. Après avoir fini le client Android, les

IOS, WEB et Firefox resteront à finir. Nous pouvons aussi, rendre l’application compatible

Page 51: Conception et developpement d'une application mobile Android e-location

50

avec plusieurs plateformes mobile, en la développant avec l’outil Adobe Flash qui génère des

programmes d’extension SWF et qui est la tendance actuellement dans le développement des

applications embarquées pour mobile.

Page 52: Conception et developpement d'une application mobile Android e-location

51

Références bibliographiques

[1] http://countrymeters.info/fr/Senegal dernière visite 14/07/2015

[2] http://perspective.usherbrooke.ca/bilan/tend/SEN/fr/SP.URB.TOTL.IN.ZS dernière visite

14/07/2015

[3] www.kaymu.com, dernier visite le 08/12/2015

[4] www.lamudi.com , dernier visite le 08/12/2015

[5] www.Expat-Dakar.com , dernier visite le 08/12/2015

[6] http://www.commentcamarche.net/faq/34876-responsive-design-avantages-et-

inconvenients, dernier visite le 02/12/2015

[7] https://sites.google.com/site/omtrouhana/googleappengine/le-datastore , dernier visite

le 25 01 2016

[8] https://openclassrooms.com/courses/montez-votre-site-dans-le-cloud-avec-google-

app-engine/manipuler-le-datastore-avec-objectify , dernier visite le 25/01/2016

[9] https://cloud.google.com/datastore/ , dernier visite le 25/01/2016

[10] http://www.commentcamarche.net/faq/34876-responsive-design-avantages-et-

inconvenients , dernière visite le 21/12/2015

[11] https://developers.google.com/appengine/docs/java/datastore/entities#Properties_and_Value Types.

[12] Wiiid A, Espiau F., Créez des applications pour Android, Licence Créative Commons 6 2.0, 2012.

[13] Damien Guignard, Julien Chable, Emmanuel Robles, Programmation Android de la

conception au déploiement, Edition Eyrolles.