Webapp iphone : détecter si l'utilisateur provient de son écran d'accueil

Lorsque l'on réalise une webapp, l'utilisateur peut se trouver dans 2 situations différentes :
1) Il est venu sur votre webapp à partir de son navigateur safari.
2) Il a "cliqué" sur une icône de son écran d'accueil (considérons qu'il a "installé" votre application).

Dans la deuxième situation, si vous ajouté les bons headers dans votre webapp (cf. WebApp Iphone: 3 lignes dans votre header qui changent tout),l'utilisateur a donc votre webapp, sur son iphone, en plein écran. Pas dans le premier cas.

Comment savoir, alors, si l'utilisateur a bien "installé" votre webapp, ou s'il la consulte depuis le navigateur safari ?

En faisant un (ô combien crado) print_r($GLOBALS); , pour chacune des deux situations, une différence apparaît, subtile, mais pratique :

Dans la première situation, nous obtenons :
[_SERVER] => Array
[HTTP_USER_AGENT] => Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/xxxxx safari/xxxxx

Dans la deuxième situation :
[_SERVER] => Array
[HTTP_USER_AGENT] => Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/xxxxx


Dans la première situation, $_SERVER['HTTP_USER_AGENT'] contient "safari/xxxx", pas dans la deuxième situation.
Et cette différence se retrouve également dans la version 5 d'ios.

Ainsi, un simple :
[sourcecode language="php"]
if(eregi('safari', $_SERVER['HTTP_USER_AGENT']))
[/sourcecode]
vous permettra de savoir si l'utilisateur vient de lancer votre webapp ou s'il est encore sur son navigateur.

En peaufinant un peu, on peut imaginer une fonction du genre :
[sourcecode language="php"]
function webapp_installed(){
if(eregi('safari', $_SERVER['HTTP_USER_AGENT']))return false;
return true;
}[/sourcecode]
Fonction qui retourne true si l'utilisateur est dans la situation n°2, ou false en situation n°1.
Gpenverne

Gpenverne

Développeur backend symfonien, qui trouve toujours moyen de faire des machins avec des bidules même si ce n'est pas utile.

Read More