Chrome Android et les Webapps

Depuis la version beta 31 de Chrome Android, il est enfin possible d’ajouter un raccourcis vers une webapp sur la home de son terminal et de l’afficher en plein Ă©cran comme une vĂ©ritable application (comme ce que fait iOS depuis longtemps).

Avec la puissance qu’atteignent maintenant les terminaux android, une webapp est tout à fait viable en tant qu’application, et selon les contextes suffit amplement par rapport à une application native.

Offline ?

Il y a peu, j’étais dans le mĂ©tro de ma ville, et j’ai eu besoin de consulter le plan du mĂ©tro. Je sors donc mon tĂ©lĂ©phone, je lance l’application des transports en commun de ma ville. Et lĂ  c’est le drame : sans connexion web (ce qui est souvent le cas en sous-sol) impossible de consulter le plan du mĂ©tro. Comment dire 


Je me souviens, avant 2000, j’habitais Paris et j’avais un Palm Vx qui embarquait le plan du mĂ©tro parisien (et lĂ  pas de connexion data Ă  l’époque), il y avait mĂȘme un moteur de calcul d’itinĂ©raire!!! DĂ©veloppĂ© par un passionnĂ©.

Ben mince alors, les applications mobiles sont en train de rĂ©gresser. A l’heure du tout connectĂ© on oublie que “ça capte pas partout” ;)

C’est le prĂ©texte pour tester les Webapps sous Android

Je me suis donc codĂ© une webapp qui utilise Leaflet et le principe de “Image Overlay” pour afficher une image en lieu et place d’une map (d’un point de vue SIG). J’affiche un plan stylisĂ© du mĂ©tro de ma ville. Je l’ai dessinĂ© moi mĂȘme pour ne pas avoir de problĂšmes:

Alors pour qu’une Webapp puisse “se prendre” pour une application il y a quelques rùgles à respecter:

S’afficher en plein Ă©cran et avoir un comportement “mobile”

Dans le header, vous aurez besoin de ceci:

<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="mobile-web-app-capable" content="yes">

Ainsi votre webapp s’affichera en plein Ă©cran, sans la barre d’url de Chrome

Associer une icîne à votre “application”

Créez une icÎne de taille 196x196 pixels au format .png, puis ajoutez le tag suivant au header de votre page:

<link rel="icon" sizes="196x196" href="rocket.png">

Et pour la partie “offline” ?

Il suffit de crĂ©er un fichier avec l’extension .appcache au mĂȘme niveau que la page html de votre webapp et de dĂ©crire dans ce fichier toutes les ressources que l’on souhaite mettre en cache. Comme cela, mĂȘme sans connexion, l’application sera utilisable (toutes les ressources sont tĂ©lĂ©chargĂ©es Ă  la 1Ăšre connexion). Voici Ă  quoi va ressembler mon fichier lugdunum.appcache:

CACHE MANIFEST
#  537bNHNmyCLSmx5RpSB5W2gLn1g=

CACHE:
js/leaflet/leaflet.js
js/leaflet/leaflet.css
js/leaflet/images/layers.png
js/leaflet/images/layers-2x.png
js/leaflet/images/marker-icon.png
js/leaflet/images/marker-icon-2x.png
js/leaflet/images/marker-shadow.png
css/styles.js
images/lugdunum.png
index.html
rocket.png

#  catch-all for anything else
NETWORK:
*
http://*
https://*

oĂč images/lugdunum.png est mon plan de mĂ©tro.

et vous déclarez le fichier dans votre page html: <html lang="en" manifest="lugdunum.appcache">

Le code pour afficher la map du métro avec Leaflet

var mapMinZoom = 1;
var mapMaxZoom = 3;
var map = L.map('map', {
  maxZoom: mapMaxZoom,
  minZoom: mapMinZoom,
  crs: L.CRS.Simple
}).setView([0, 0], mapMaxZoom);

var mapBounds = new L.LatLngBounds(
  map.unproject([-800, 2816], mapMaxZoom),
  map.unproject([3072, -800], mapMaxZoom));

map.fitBounds(mapBounds);

L.imageOverlay("images/lugdunum.png", mapBounds).addTo(map);

Leaflet va aller chercher l’élĂ©ment du dom qui a un id map et il affichera la map du mĂ©tro dans cet Ă©lĂ©ment.

Au final vous pouvez voir Ă  quoi cela ressemble ici: http://lugdunum.github.io/metro/

Si vous voulez l’installer sur votre terminal android, connectez vous Ă  cette url, puis dans le menu de Chrome pour Android, sĂ©lectionnez “Ajouter Ă  l’écran d’accueil”.

Et le code est ici: https://github.com/lugdunum/metro.

Bon faudra angulariser tout ça ;)

blog comments powered by Disqus

Related posts