L'objectif de ce TP est de transformer votre application Web actuelle en application mobile.
Cela permet d'avoir accès à des API natives (ex : le carnet d'adresse) ou à des API plus riches que celles accessibles depuis un navigateur (ex : boussole). Un autre avantage est la possibilité de distribuer vos applications sur les stores des plateformes (Play Store, App Store...)
Télécharger le SDK Android et vérifiez que l'émulateur fonctionne.
Vérifier que les liens vers les outils du SDK Android sont dans le PATH. Sous unix :
$ export PATH=$PATH:/.../android-sdk/tools/
$ export PATH=$PATH:/.../android-sdk/platform-tools/
Vérifier que ant est bien dans votre PATH.
Installer Cordova qui sera notre outil permettant de transformer des applications Web en applications mobile:
$ npm install -g cordova
Un serveur node est toujours nécessaire pour gérer les requêtes CORS. On se concentrera toutefois sur la partie Web mobile pendant le TP.
ngrok permet d'exposer un serveur tournant en local au monde extérieur. Cela peut être utile si vous voulez tester des choses avec votre téléphone via la 3G ou le Wifi.
Cordova et Phonegap permettent d'embarquer une application Web dans une application Mobile. Cette approche est la plus légère mais offre une intégration plus limitée que d'autres outils multi-plateformes tels que Xamarin Studio, Appcelerator Titanium, or Embarcardero FireMonkey, qui eux permettent de créer des applications réellement natives ()
Cordova est le projet ouvert sur lequel se base Phonegap, depuis que Phonegap a été racheté par Adobe. Grossièrement Phonegap rajoute une couche facilitant le processus de build. Notamment en permettant de gérer des builds sur les serveurs d'Adobe (ce qui permet de faire une build pour iOS sans Mac par exemple).
Nous allons travailler avec Cordova qui est le projet ouvert.
Créer un projet :
$ cordova create hello com.example.hello HelloWorld
Ajouter la plateforme Android au projet (faire ça dans le dossier du projet) :
$ cordova platforms add android
Construire le projet :
$ cordova build
Tester le projet dans un émulateur :
$ cordova emulate android
Au cas ou la connexion avec l'émulateur se fait mal.
Lancer l'émulateur à la main
$ android avd
Charger l'application dans l'émulateur (depuis le dossier de votre projet) :
$ adb install platforms/android/ant-build/Mif3802-debug.apk
Nous restons avec une single page application consistant en une première vue de recherche puis une seconde vue d'affichage sur la carte.
Adapter la 1ere vue, pour que la recherche affiche un ensemble de résultat sur la même page.
Ajouter le plugin a votre projet :
$ cordova plugin add org.apache.cordova.dialogs
Dans votre index.html, ajouter la référence au fichier cordova.js
<script src="cordova.js"></script>
Cette commande demande au client Cordova d'injecter la version correspondant à votre plateforme (Android/iOS/...) au moment du build. Il n'est pas nécessaire (ou même recommandé) d'avoir un fichier cordova.js dans votre dossier www/.
Surcharger la dénition de window.alert() par navigator.notification.alert() pour avoir
document.addEventListener('deviceready', function () {
if (navigator.notification) { // Override default HTML alert with native dialog
window.alert = function (message) {
navigator.notification.alert(
message, // message
null, // callback
"Workshop", // title
'OK' // buttonName
);
};
}
}, false);
Ajouter le plugin de geolocalisation à votre projet :
$ cordova plugin add org.apache.cordova.geolocation
Ce plugin permettra d'accéder aux données GPS même si le navigateur du téléphone ne supporte pas l'API de géolocalisation du W3C. Exemple d'utilisation :
navigator.geolocation.getCurrentPosition(
function(position) {
alert(position.coords.latitude + ',' + position.coords.longitude);
},
function() {
alert('Error getting location');
}
);
Tester l'application
Une Application mobile a souvent une entete (header). Normalement cette entête ne bouge pas quand le contenu de la fenetre défile. Accrocher l'entête en haut de l'écran:
Ajouter une classe css scroller à la liste des résulats de la rechercher
<div class="topcoat-list__container scroller">
<ul class="topcoat-list list employee-list"></ul>
</div>
Dans www/css/styles.css définir la classe scroller :
.scroller {
overflow: auto;
-webkit-overflow-scrolling: touch;
position: absolute;
top: 141px;
bottom: 0px;
left: 0px;
right: 0px;
}
Quand un des résultats de recherche est sélectionné, l'afficher sur la carte. Ajouter éventuellement une transition CSS.