108 votes

Comment détecter les tablettes Android en général. Useragent ?

J'ai cherché partout. Nous utilisons un Motorola Zoom pour tester notre site sur tablette. Le problème est que le Useragent Android est un Useragent général et qu'il n'y a pas de différence entre Android tablette et Android mobile. Je ne veux pas cibler un appareil spécifique comme le Useragent du Xoom, car Android sera très probablement présent sur plusieurs tablettes dans un avenir proche.

Nous utilisons Umbraco CMS, et nous avons envisagé d'utiliser la solution 51Degrees.mobi, mais pour l'instant, elle ne répond pas à nos besoins. Peut-être à l'avenir. Je sais que 51Degrees et certaines personnes d'Umbraco vont faire une intégration dans Umbraco, mais le projet final ne sera probablement pas disponible avant quelques mois.
C'est pourquoi nous aimerions détecter la chaîne Useragent d'une tablette Android et ne pas la diriger vers notre site mobile comme c'est le cas actuellement.

Si quelqu'un sait comment détecter une tablette Android en général, et non un appareil spécifique, cela serait très utile.

2 votes

Je ne fais que supposer, mais peut-être y a-t-il un moyen de voir la résolution de l'affichage ?

0 votes

@Phonon, Oui nous essayons d'utiliser Javascript pour renvoyer une valeur res au serveur. Nous essayons d'utiliser un __doPostBack mais cela ne semble pas renvoyer notre valeur. Nous avons une valeur d'entrée cachée, elle s'affiche côté client mais nous ne la renvoyons pas côté serveur.

0 votes

Je ne sais pas si je peux vous aider.

115voto

CommonsWare Points 402670

Le problème est que l'User-Agent d'Android est un User-Agent général et qu'il n'y a pas de différence entre Android tablette et Android mobile.

C'est incorrect. Android mobile a la chaîne "Mobile" dans l'en-tête User-Agent. Ce n'est pas le cas pour la tablette Android.

Pero il convient de mentionner qu'il y a pas mal de tablettes qui signalent "Mobile" Safari dans l'userAgent et ce dernier n'est pas la seule/ solide façon de différencier entre le mobile et la tablette.

3 votes

Vous avez raison. Je cherchais juste une chaîne de caractères qui contient Android. J'ai dû chercher la chaîne qui contient Android et !mobile. J'ai trouvé l'article de Tim Bray à ce sujet.

0 votes

Wurfl a toujours "mobile" dans l'agent utilisateur de Xoom : tera-wurfl.com/explore/

6 votes

@yoavf : Cela semble avoir été corrigé avec la mise à jour Android 3.1 du XOOM. Je possède un XOOM et je viens de le tester - pas de "mobile".

20voto

Bitwalker Points 161

@Carlos : Dans son article, Tim Bray recommande ceci (comme un autre article de Google ), mais elle n'est malheureusement pas appliquée par tous les fabricants de tablettes.

... Nous recommandons aux fabricants d'appareils de grande taille de supprimer "Mobile" de l'agent utilisateur...

La plupart des chaînes d'agent utilisateur des tablettes Android que j'ai vues utilisent mobile safari, par exemple le Samsung Galaxy Tab :

Mozilla/5.0 (Linux ; U ; Android 2.2 ; en-us ; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Pour l'instant, je vérifie les noms des appareils pour détecter les tablettes Android. Tant qu'il n'y a que quelques modèles sur le marché, c'est bon, mais bientôt, cette solution ne sera plus adaptée.

Au moins dans le cas du XOOM, la partie mobile semble avoir disparu :

Mozilla/5.0 (Linux ; U ; Android 3.0 ; en-us ; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

Mais comme il n'y a actuellement que des tablettes avec Andorid 3.x, la vérification sur Android 3 serait suffisante.

1 votes

Pourriez-vous afficher la liste des appareils que vous avez vérifiés et le codage.

12voto

Elenasys Points 23268

Mieux vaut également détecter l'agent utilisateur "mobile".

Bien que vous puissiez toujours vouloir détecter "Android" dans l'User-Agent afin de d'implémenter des fonctionnalités spécifiques à Android, telles que l'écran tactile l'optimisation des écrans tactiles, notre message principal est le suivant : Si votre site mobile dépend de le reniflage de l'UA, veuillez détecter les chaînes "mobile" et "Android", plutôt que plutôt que simplement "Android", dans l'agent utilisateur. Cela permet de servir correctement à la fois vos visiteurs sur mobile et tablette.

Détection d'un appareil Android via le navigateur

 < script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>----------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>----------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>

3 votes

Cela fonctionne parfaitement. Je l'ai ajouté pour l'iPad et l'iPhone/iPod. else if (userAgent.search("ipad") > -1) document.write("<b> iPad <br>") else if ((userAgent.search("iphone") > -1)||(userAgent.search("ipod") > -1)) document.write("<b> iPhone or iPod <br>")

0 votes

Comment cela fonctionne-t-il pour mozilla/5.0 (linux ; u ; Android 2.2 ; en-gb ; gt-p1000 build/froyo) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/533.1 qui contient le mot 'mobile' pour la Samsung Galaxy Tablet ?

8voto

CodeFuze Points 346

Vous pouvez essayer ce script puisque vous ne voulez pas cibler uniquement la Xoom. Je n'ai pas de Xoom, mais cela devrait fonctionner.

function mobile_detect(mobile,tablet,mobile_redirect,tablet_redirect,debug) {
var ismobile = (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase()));
var istablet = (/ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase()));

if (debug == true) {
    alert(navigator.userAgent);
}

if (ismobile && mobile==true) {
    if (debug == true) {
        alert("Mobile Browser");
    }
    window.location = mobile_redirect;
} else if (istablet && tablet==true) {
    if (debug == true) {
        alert("Tablet Browser");
    }
    window.location = tablet_redirect;
}
}

J'ai créé un projet sur github. Jetez-y un coup d'oeil - https://github.com/codefuze/js-mobile-tablet-redirect . N'hésitez pas à soumettre des problèmes s'il y en a !

1 votes

Cela ne fonctionnera pas pour les versions d'Android > 3.0, comme ICS (4.0). Je pense que la réponse acceptée est la bonne - vérifiez si "Mobile Safari" figure dans le useragent.

0 votes

Je ne sais pas ce qu'il en est pour les autres Kindles, mais le Kindle Fire 1 ne contient PAS le mot "kindle" dans sa chaîne d'agents utilisateur, ni "Android" ; les seuls indices sont les mots "Silk" et "Silk-Accelerated".

6voto

Suman Points 2478

Une fois que j'ai détecté Android dans l'agent utilisateur, voici comment je fais la différence entre les navigateurs pour tablettes et pour smartphones (j'utilise Python, mais c'est tout aussi simple pour d'autres langages de programmation) :

if ("Android" in agent):
  if ("Mobile" in agent):
    deviceType = "Phone"
  else:
    deviceType = "Tablet"

MISE À JOUR : pour refléter l'utilisation de Chrome sur Android, conformément aux commentaires ci-dessous.

1 votes

Pourquoi ne pas simplement chercher "Mobile" dans l'agent ?

0 votes

Je pense que cela pourrait également fonctionner, mais je pense qu'il pourrait être dangereux de rechercher uniquement "Mobile" - il pourrait y avoir des appareils avec des noms, comme "HTC Mobile", etc. Je pense que c'est l'approche recommandée.

1 votes

Maintenant que Google a publié Chrome pour Android, votre approche peut devenir un peu problématique. En effet, Chrome pour Android se présente comme "Chrome Mobile" au lieu de l'habituel "Mobile Safari", comme le fait le navigateur Android standard. Pour quelques recommandations officielles : developers.google.com/chrome/mobile/docs/user-agent

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