Optimiser son application web pour iPhone ou iPod Touch
Posé ici le mardi 01 janvier 2008 à 13:29 par
Avec la récente sortie française des iPhone et iPod Touch, il est maintenant intéressant de se pencher sur le développement d'application web adaptées à ce type d'appareil. Je viens tout juste d'adapter l'un des principaux services Kuantic pour une consultation sur iPhone/iTouch. Je profite de ce premier billet pour essayer d'éclaircir le sujet.

NOTE :
- Dernière mise à jour le 16 janvier 2008 : Webclip
- Cet article a été relayé par Le Journal du Net | Développeur.
- l'iPod Touch sera ici abrégé par le terme iTouch, ce qui pourra choquer quelques puristes ;]
Règles à respecter
Tout type de page internet peut être consulté sur iPhone/iPod mais quelques règles sont à respecter pour offrir une expérience agréable à l'utilisateur sur ce type d'appareil.
- Peu de contenu par page
- Contenu fractionné en portion logique et bien délimité (permet le Double tab zoom)
- Présentation de lien sous forme de bouton facile à cliquer
- Texte en caractères larges et lisibles
- Limitation de la manipulation de la page par l'utilisateur (scrolling horizontal, zoom)
- Prise en compte des avantages et contraintes de la navigation tactile
- Simplicité du contenu, Safari portable n'aime pas les plug-ins, même les plus courants.
Limitations
- Pas de Flash ou Java (mais accepte PDF)
- Nombre de pages ouvertes simultanément limité à 8
- Page web limitée à 10 Mo (ça devrait aller)
- Image limitée à 8 Mo (ça devrait aller aussi)
- Pas de Gif animés (Seule la 1ère image est affichée)
- Javascript limité à 5 secondes et à 10 Mo d'allocation
- Pas de Copier/Couper/Coller
- Pas de Drag/Drop
- Pas de sélection possible
Evénements
Les événements javascript courants ne se comportent pas tous comme prévu pour des raisons compréhensibles de navigation tactile.
MouseoveretMousemovene réagissent pas car le mouvement du doigt sur l'écran fait défiler la page.Keypress,KeyupetKeydownne sont pas pris en compte hors des textareas.Click,MousedownetMouseupsont étrangement appelés en même temps quand le doigt quitte l'écran.Doubleclickne se déclenge pas, le Double-Tap effectue un zoom quoi qu'il arrive et unevent.preventDefault()n'y changera rien.- Le One-finger panning déclenche un
onScrollune fois le mouvement stoppé. - Le Two-finger panning déclenche un
mouseWheelsi l'élément est scrollable.
Il n'existe pas vraiment d'événements propres à l'appareil. On aurait aimé un onFlick, onZoom, onPinch etc.. Heureusement Apple à récemment ajouté onorientationchange qui écoute le changement d'orientation de l'affichage. L'angle d'inclinaison, lui, est disponible par window.orientation (0, 90, -90, 180).
Viewport
Notez que la surface affichable, nommée viewport est moindre en raison des éléments d'interface :
Portrait
La résolution de l'écran est 320 x 480 pixels. Ce qui laisse une surface d'écran affichable de 320 x 356 pixels ou 320 x 416 pixels si la barre d'URL est masquée.
- Barre d'état supérieure : 20 pixels
- Barre de bouton de navigation : 44 pixels en portrait
- Barre d'URL : 60 pixels mais masquable
- Clavier : 216 pixels + 44 pixels de barre de bouton
![]()
Paysage
La résolution de l'écran est logiquement de 480 x 320 pixels. Dans ce mode, certains éléments d'interface changent de proportion. Ce qui laisse une surface d'écran affichable de 480 x 268 pixels ou 480 x 208 pixels si la barre d'URL est masquée.
- Barre d'état supérieure : 20 pixels
- Barre de bouton de navigation : 32 pixels
- Barre d'URL : 60 pixels mais masquable
- Clavier : 180 pixels + 32 pixels de barre de bouton
![]()
Afin de gérer au mieux les affichages par défaut, Apple met à disposition le metatag viewport. Le zoom, la portion de page et différentes limites d'affichage peuvent être spécifiées.
Propriétés width et height
Ces propriétés définissent la largeur et la hauteur de votre page à afficher dans le viewport. La valeur par défaut de width est 980 (valeurs comprises entre 200 et 10 000), ce qui forcera Safari à agir tel un navigateur standard de 980 pixels de large. La valeur par défaut de height est proportionnelle à celle de width (de 223 à 10 000). Il est possible d'utiliser device-width ou device-height à la place d'une valeur pour ajuster l'affichage plein écran de la page.
Ouvrir une page en pleine largeur
<meta name="viewport" content="width=device-width">
Ouvrir une page en pleine hauteur
<meta name="viewport" content="height=device-height">
Ouvrir une page en n'en afficher que 640 pixels
<meta name="viewport" content="width=640">
Propriété initial-scale
Cette propriété force un zoom par défaut sur la page lors de son ouverture. Par défaut le zoom est calculé au mieux pour afficher toute la page.
Ouvrir une page avec en zoomant 2 fois
<meta name="viewport" content="initial-scale=2.0">
Ouvrir une page sans zoom
<meta name="viewport" content="initial-scale=1.0">
Propriétés minimum-scale et maximum-scale
Cette propriété définie la valeur de zoom minimum et maximum. Les valeurs par défaut sont 0.25 (de 0.1 à 10) pour le minimum-scale et de 1.6 (0.1 à 10) pour maximum-scale.
Propriété user-scalable
Cette propriété interdit ou autorise l'utilisateur à zoomer sur la page. Par défaut à yes, elle accepte les valeurs yes (1) ou no (0).
Interdire le zoom par l'utilisateur
<meta name="viewport" content="user-scalable=no">
| Valeur par défaut | Valeur minimum | Valeur maximum | |
|---|---|---|---|
| width | 980 | 200 | 10 000 |
| height | Proportionnelle | 223 | 10 000 |
| inital-scale | Selon la page | minimum-scale | maximum-scale |
| user-scalable | yes | no | yes |
| minimum-scale | 0.25 | 0.1 | 10.0 |
| maximum-scale | 1.6 | 0.1 | 10.0 |
Il est à noter que les propriétés de ce metatag peuvent être le plus souvent cumulées.
<meta name="viewport" content="width=400, initial-scale=0.5" />
...revient à écrire
<meta name="viewport" content="width=200, initial-scale=1.0" />
Donner le même aspect au mode Portrait et Paysage
<meta name="viewport" content="width=480, maximum-scale=0.6666" />
Il existe aussi d'autres metatags spécifiques.
Désactive la reconnaissance automatique des numéros de téléphone
<meta name="format-detection" content="telephone=no">
Astuces
Détecter un iPhone/iTouch.
Les User Agents renvoyés par l'iPhone et l'iTouch ressemblent à quelque chose comme ça. Quelques détails peuvent changer selon les versions.
User Agent iPhone
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
User Agent iPod iTouch
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3
Détection en Javascript
if(navigator.userAgent.match(/iPhone/i)
|| navigator.userAgent.match(/iPod/i)) {
document.location="/iphone/" ;
}
Détection en Php
if (stristr($_SERVER['HTTP_USER_AGENT'], "iPhone")
|| strpos($_SERVER['HTTP_USER_AGENT'], "iPod")) {
header("location:/iphone/");
}
Css sélectifs
Lier la page à une feuille de style spécifique à l'iPod/iTouch
<link media="only screen and (max-device-width: 480px)" href="iphone.css" type="text/css" rel="stylesheet">
Lier la page à une feuille de style pour tout autre navigateur que l'iPhone/iTouch
<link media="screen and (min-device-width: 481px)" href="standard.css" type="text/css" rel="stylesheet">
Masquer la barre d'URL
La barre d'URL peut être masquée en forçant la page à scroller d'un cran dès l'affichage.
<body onload="window.scrollTo(0, 1)">
Afficher une infobulle
L'attribut title ne produit par défaut aucun effet. Il faut un peu forcer le destin pour que le comportement standard se déclenche. Ajouter un onclick par exemple.
<p title="infobulle sur iPhone !" onclick="void(0);">Mon paragraphe</p>
CSS spécifique à l'orientation
Il est très souvent utile de connaître l'orientation de l'écran pour en adapter le style. Joe Hewitt proposait une petite fonction intéressante qui permet d'appliquer un nouvel attribut orient="portrait" (portrait) ou orient="landscape" (paysage) au tag . Body
En voici ma version en utilisant l'événement onorientationchange.
body[orient="portrait"] {
background:#FF0000;
}
body[orient="landscape"] {
background:#000;
}
function updateOrientation() {
switch(window.orientation) {
case 0:
orient = "portrait";
break;
case -90:
orient = "landscape";
break;
case 90:
orient = "landscape";
break;
case 180:
orient = "portrait";
break;
}
document.body.setAttribute("orient", orient);
}
<body onorientationchange="updateOrientation();">
Changer les valeurs du Viewport en cours d'exécussion
Le metatag viewport peut être contrôlé par getElementById.
<name="viewport" id="viewport" content="user-scalable=yes" />
document.getElementById("viewport").setAttribute("content", "user-scalable=no;", false);
Faire un lien vers un numéro de téléphone
Il est aussi possible de faire des liens directement vers des numéros de téléphone.
<a href="tel:0612102132">06.12.10.21.32</a>
Faire un lien vers une carte GoogleMap
Ce type de lien ouvre l'adresse dans l'application built-in GoogleMap de l'iPhone. Sur l'iTouch, Safari s'ouvre comme un site normal.
<a href="http://maps.google.com/maps?q=paris">Paris</a>
Faire un lien vers un vidéo YouTube
Un lien de ce type vers une vidéo YouTube ouvre l'interface vidéo.
http://www.youtube.com/watch?v={youtube video id}
Rendre des champs de saisie "intelligents"
Il est possible d'activer l'autocorrection ou l'autocapitalisation lors de la saisie des champs texte.
<input autocorrect="on" />
<input autocapitalize="on" />
Ajouter un "Webclip"
La dernière version 1.1.3 du firmware permet aux utilisateurs d'ajouter un icône de raccourci (appelé WebClip bookmark) à la page d'ouverture.
Pour que votre application propose ce nouvel icône à l'utilisateur, il suffit d'ajouter le code ci-dessous dans le head de votre page HTML. L'icône doit être un PNG de 57x57 pixels.
Safari ajoutera lui-même les effets de lumière et de réflection.
<link rel="apple-touch-icon" href="/icone.png"/>
Ressources utiles
WebApp.Net
Ajout le 24/06/2008
WebApp.Net est un nouveau framework Javascript/Css permettant d'aller droit au but lors de vos développements iPhone. Je ne l'ai pas encore essayé mais la démonstration tient la route. Une bonne alternative à iUi avec une documentation correcte.
iUI
Développé par Joe Hewitt (développeur de Firefox et créateur du brillant Firebug), iUI est une librairie javascript répondant aux principaux besoins d'une webApp iPhone/iTouch. Elle inclue les fonctions Ajax, images et css adéquats pour rapidement monter une application au look&feel des applications built-in. La majorité des applications iPhone/iTouch actuelles sont montées avec cette librairie… et ça se voit ! Elles ont toutes le même aspect, l'auteur le regrette même sur son blog.
Cette libraire n'est qu'en début de développement mais les résultats sont déjà très prometteurs. Pour l'instant elle manque de documentation et d'exemples. Il faut jouer un petit peu avec pour en découvrir les possibilités.
Je reviendrai plus tard sur cette librairie qui mérite bien un article à elle seule.
Safari
Safari est le navigateur développé par Apple. Le rendu de la version desktop se rapproche grandement de la version mobile équipant les iPod/iTouch et permet d'avoir un aperçu de ses applications. Il est maintenant aussi disponible sur PC.
http://www.apple.com/fr/safari/download/
Iphone Tester
Ce site vous permet de tester votre travail à partir d'un simple PC. Bien évidement il faut s'y rendre avec Safari pour se rapprocher du résultat final. Le site se contente d'ouvrir votre URL dans un iFrame aux dimensions de l'iPhone/iTouch et d'y ajouter les diverses barres d'interface. Il est tout de même possible de changer l'orientation de l'écran mais l'événement onorientationchange n'est pas déclenché. Rien de révolutionnaire ici mais ça dépanne.
http://www.iphonetester.com/?url=votrepage.html
UserAgent Switcher
Cet add-on Firefox, permet de se faire passer pour un iPhone/iTouch en changeant le User Agent délivré par Firefox. Il suffit d'ajouter les 2 modèles de User Agent et sélectionner celui qui nous intéresse.
http://chrispederick.com/work/user-agent-switcher/
iPhoney pour Mac OSx
Les heureux possesseurs de Mac pourront utiliser ce programme pour leurs tests. Etant sur PC, je n'ai pas pu l'essayer.
http://www.marketcircle.com/iphoney/
Apple iPhone Dev Center
Apple propose une section de son Dev Center dédié à l'iPhone. Quelques ressources intéressantes, notamment les vidéos et quelques PDF mais dans l'ensemble c'est reste très basic au niveau des exemples.
http://developer.apple.com/iphone/devcenter/
Des exemples d'applications réussies
A mon sens, le site FaceBook est à ce jour l'adaptation de site la plus intéressante. Elle propose la quasi-totalité des fonctions de FaceBook dans une interface graphiquement réussie et une navigation totalement refondue. Développée par Joe Hewitt lui-même.
Netvibes
Le principe de Netvibes se prête plutôt bien à une version mobile. Les développeurs ont sût marier leur concept à la navigation tactile. Tout d'abord les onglets, puis les titres des articles, suivi des articles eux-mêmes.
Meebo
Ce service de messagerie instantanée propose également une version optimisée des plus pratiques. L'application ne propose rien de plus qu'une liste de noms de contact et une fenêtre de discussion : pas besoin de plus.
Conclusion
Vous voilà assez armé pour vous lancer dans l'adaptation de votre application en version iPhone/iTouch. Phénomène de mode ou réelle plus-value, je ne sais pas si l'adaptation en vaut vraiment la chandelle, mais à l'heure de la médiatisation de certains phénomènes mobile/web2.0, afficher un "iPhone optimized" n'est pas négligeable sur un service digne de ce nom.
N'hésitez pas à ajouter vos commentaires et expériences ci-dessous.
Ce contenu est mis à disposition selon les termes de la licence Creative Commons 2.0 France : Paternité, Pas d'Utilisation Commerciale, Partage des Conditions Initiales à l'Identique.
Context
Thématiques :
Trackbacks
2 trackbacks
Comment optimiser son site iPhone?
Sur , publié le mercredi 01 juillet 2009 10:28
C’est sur le blog de Jay Salvat que l’on trouve un article intéressant qui reprend les éléments essentiels d’un bon site iPhone.Règles à respecter, utilisation des évènements javascript pour la rotation et l’inclinaison de l...
Optimiser un site web pour l’iPhone
Sur , publié le dimanche 13 juillet 2008 18:17
Ce message s’adresse plutôt aux bricoleurs du web : les webmasters.Xavier m’a fait part d’un lien que je souhaite partager avec vous : il s’agit d’un guide permettant d’optimiser l’affiche d’un site in...



Commentaires
23 commentaires
Merci pour ton article regorgeant de conseil et bonnes idée!
1. Par Jbj le samedi 05 janvier 2008 à 08:12
Merci pour cet article riche en conseils et idées, c'est vraiment bien et tellement rare sur la Toile à vrai dire. ;)
2. Par Camille le dimanche 06 janvier 2008 à 04:36
Avis aux developpeurs, ajouter safari/iphone à votre liste de navigateur à tester ;)
Merci pour ce tuto, chapeau bas!
Une remarque concernant Iphone Tester, de nombreux sites ont un rendu differents, il semble donc que ce tester ne soit pas une tres bonne reference
Je reviens des que mon site est iPhone compatible!
3. Par Guillaume le jeudi 10 janvier 2008 à 14:17
mouais, ca existe depuis deja lontemps, je comprends pas ce que l'auteur est en train de re-inventer.
4. Par Studio54 le mercredi 23 janvier 2008 à 08:51
Génial, c'est exactement ce que je cherchais pour un futur dév. Merci pour ce recueille d'informations. IUI, c'est vraiment bien ?
5. Par Pilpoil le mercredi 23 janvier 2008 à 11:14
Pilpoil : Oui, iUi fait gagner un temps fou si tant est qu'on en suite la logique. C'est encore un peu léger, mais c'est très prometteur. Ca demande un peu de temps pour analyser le fonctionnement, la doc est très succinte.
Studio54 : Etrange réfelxion, je ne vois pas en quoi un recueil d'information peut innover.
6. Par Jay Salvat le vendredi 25 janvier 2008 à 07:18
Mon blog étant propulsé par wordpress, je n'ai fait l'effort de portage moi-même mais quelques unes de tes infos auraient été très utiles.
Vous pouvez comparer la version WM6 de mon site face à sa version "iPhone/iPod optimized" à l'url ci-dessous
Famillesdalle.f…hone-ipod-touch
no comment
7. Par Loinduciel le jeudi 07 février 2008 à 22:12
Excellent, merci, notamment pour la detection d'Iphone et Ipod !
8. Par Skilah le mercredi 02 avril 2008 à 11:48
Cet article va m'être très précieux ! Merci beaucoup !
9. Par Vinch le jeudi 24 avril 2008 à 10:46
Merci pour cette article clair et précis, j'ai du développer une télécommande wifi sous safari, et franchement vous m'avez été d'un grand secour pour la création de mon interface :)
10. Par Guillaume L le mardi 29 avril 2008 à 11:54
Grand merci pour toutes ces infos je commencais à me prendre la tête même armé de mes nouveaux bouquins sur le sujet...
Il va me falloir décripter tout ca à tete reposée mais c'est rassurant d'avoir une base cohérente d'informations...
11. Par Jerome le lundi 23 juin 2008 à 22:50
Salut à tous les développeurs qui passent dans le coin... Merci déjà beaucoup pour cet article qui résume déjà tout ce que j'ai apprris au fil des dernières semaines pour développer sur iphone et itouch... Je me suis pas mal éclaté de mon côté en créant un player radio adapté au format avec un beau design de beaux menus et de belles anims. Mais bon étant donné que certaines failles sont apparues sur le firmware 2.0 et que je n'ai pas encore protégé mon code des pc égarés je ne pourrai vous montrer mon oeuvre en revanche je souhaitais savoir si l'un de bous connaissais un code php ou js pour détecter les firmwares 2.0 pour éviter qu'ils s'exposent à la faille tant que la problème n'est pas réglé je lui serai extremement reconnaissant... Bonne soirée a tous ;) !
12. Par Romain Stievenard le samedi 16 août 2008 à 00:28
Salut Romain et les autres,
est-ce que tu peux donner plus d'infos sur comment rendre une webradio écoutable sur l'iphone stp?
Merci par avance.
13. Par Fred le mercredi 20 août 2008 à 11:30
super !
merci de partager toutes ces infos :)
14. Par Alex le vendredi 29 août 2008 à 14:46
Ola
c'est vrai que c'est bien carré. ça motive des infos comme ça!
15. Par Severin le mercredi 19 novembre 2008 à 01:12
J'avais pleins de questions, j'ai presque toutes les répondes : merci !
16. Par Niko le lundi 08 décembre 2008 à 03:19
Merci pour ces informations dont certaines m'ont été très utiles pour la réalisation de mon système de création de sites Internet spécialemet prévus pour téléphone portables - wobile.fr
17. Par Arneau le dimanche 15 mars 2009 à 23:47
merci pour l'article, c'est intéressant :)
18. Par Aissaouimoncif le lundi 16 mars 2009 à 14:26
Magnifique! Merci
Article ajouté à mon Yoolink.fr :)
19. Par Ve le mercredi 08 avril 2009 à 15:47
Je viens d'arriver sur cet super article grâce à wri, merci depuis le temps que je cherche à booster mon trafic iphone, je vais maintenant m'y atteler !!!
20. Par Yves le dimanche 10 mai 2009 à 15:43
Je viens de créer un site optimisé pour l’ iphone qui regroupe pas mal de clips, une fonctionnalité très intéressante, les iMembres peuvent se créer et gérer une iplayliste en y ajoutant leurs iclips préférés et les effacés à leur guise.
Plusieurs genres musical sont disponible possibilité d’afficher les iclips par genre ou faire directement une recherche parmi les iclips mit déjà en ligne.
iclips.fr
21. Par Diégo le lundi 18 mai 2009 à 23:46
Super toutes ces astuces, merci beaucoup !!!
Parcontre je rencontre quelques soucis pour masquer la barre d'url, ca ne fonctionne pas. voici mon code :
<body onload="window.scrollTo(0, 3)" bgcolor="#FFFFFF" topmargin=0 leftmargin=0>
Pourquoi ?
22. Par Arnaud le jeudi 18 juin 2009 à 10:35
Bonjour Arnaud,
As-tu simplement essayé ?
<body onload="window.scrollTo(0, 1)">
23. Par Jay Salvat le jeudi 18 juin 2009 à 10:42