12 votes

Impossible de détecter Android dans le serveur web

Le moyen évident de détecter Android par le serveur est de rechercher la chaîne "Android" dans l'en-tête HTTP User-Agent. Mais - j'ai eu des plaintes que cela ne fonctionne pas sur certains appareils (par exemple dans mon HTC Evo), ils ne sont pas détectés comme Android. whatsmyuseragent.com donne pour mon HTC Evo 3D navigateur web : Mozilla/5.0 (X11 ; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24 . Pas de chaîne ou de version Android. Cela pourrait être un logiciel de sécurité sur l'appareil qui le modifie, ou un problème spécifique à HTC, je n'en suis pas sûr.

Évidemment, Android Chrome sur le même appareil a une autre et meilleure UA : Mozilla/5.0 (Linux ; Android 4.0.3 ; HTC EVO 3D X515m Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19 Mais je ne peux pas espérer que, par exemple, l'application de lecture de codes QR ouvre Chrome et non le navigateur Android intégré, qui a une adresse universelle invalide.

Existe-t-il une bonne astuce (appel javascript ?) pour détecter de manière fiable Android sur tous les appareils et navigateurs ?

Éditer : il semble que le même problème se pose avec le Galaxy S III, même chaîne User-Agent : Détection du navigateur du téléphone Android

6voto

JaakL Points 1715

Il semble que j'avais sélectionné "Afficher la version Desktop" dans les paramètres du navigateur web Android. Une fois désactivé, l'user-agent est avec Android à l'intérieur. Cela semble être une caractéristique de ICS, HTC n'est pas à blâmer : google pour le mauvais user agent que j'ai donné pour voir que cela se produit sur de nombreux téléphones différents.

1voto

Aaron Saray Points 766

Pour cette tâche particulière, je pourrais suggérer d'utiliser wurfl côté serveur.

Vous pouvez détecter Android en faisant quelque chose de très simple :

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER);
if ($requestingDevice->getCapability("device_os") == "Android") {
    //the magic
}

1voto

crazylpfan Points 516

La vérification de l'agent utilisateur a toujours été le moyen recommandé pour déterminer de manière fiable le périphérique de l'utilisateur (du moins avec les paramètres par défaut). Peut-être pourriez-vous essayer de rendre votre recherche plus robuste ? Mozilla propose de rechercher la chaîne de caractères "Mobi" à la place.

0voto

Dinesh Prajapati Points 4485

Ce que j'ai compris de votre problème, c'est que vous obtenez l'agent utilisateur sur certains appareils et sur quelques appareils qui refusent de le donner. Je suppose donc que vous avez une application sur un appareil Android qui appelle votre serveur par le biais d'un webservice et que vous essayez d'extraire l'agent utilisateur. La solution que je vois ici est d'ajouter le paramètre d'agent utilisateur dans l'application Android en tant que code afin qu'il soit affiché dans l'en-tête HTTP et que vous puissiez l'extraire facilement du serveur.

HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android");

J'ai eu le même problème mais je l'ai résolu de cette façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X