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


103

J'ai cherché partout. Nous utilisons un Motorola Zoom pour tester nos sites de test de tablettes. Le problème est que l'agent utilisateur Android est un agent utilisateur général et qu'il n'y a aucune différence entre la tablette Android et Android mobile. Je ne veux pas simplement cibler un appareil spécifique comme Xoom Useragent car Android sera très probablement sur plusieurs tablettes dans un proche avenir.

Nous utilisons Umbraco CMS, et nous avons envisagé d'utiliser la solution 51Degrees.mobi, et pour le moment, cela ne fonctionnera pas pour nos besoins. Peut-être à l'avenir. Je sais que 51Degrees et certaines personnes chez Umbraco vont faire une intégration dans Umbraco, mais le projet final ne sortira probablement pas avant quelques mois.
Par conséquent, 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 et Android Tablet en général, pas le périphérique spécifique serait très utile.


2
Je ne fais que deviner, mais peut-être y a-t-il un moyen de voir à quel point la résolution d'affichage est également élevée?
Phonon

@ Phonon, Oui, nous essayons d'utiliser Javascript pour renvoyer une valeur de résolution au serveur. Nous essayons de nous un __doPostBack mais cela ne semble pas renvoyer notre valeur. Nous avons une valeur d'entrée cachée, elle montre le côté client mais nous ne la récupérons pas côté serveur.
ClosDesign

Je ne sais pas si je peux vous aider ici.
Phonon

Réponses:


112

Le problème est que l'agent utilisateur Android est un agent utilisateur général et qu'il n'y a aucune différence entre la tablette Android et le mobile Android.

Ceci est une erreur. Mobile Android a la chaîne "Mobile" dans l'en-tête User-Agent. La tablette Android ne le fait pas.

Mais il est à noter qu'il existe pas mal de tablettes qui signalent Safari "Mobile" dans userAgent et ce dernier n'est pas le seul / solide moyen de différencier Mobile et Tablette.


3
vous avez raison. Je cherchais juste une chaîne contenant Android. J'ai dû rechercher la chaîne contenant Android et! Mobile. J'ai trouvé l'article de Tim Bray à ce sujet.
ClosDesign

6
@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".
CommonsWare

27
Cette réponse n'est pas complètement correcte. Il existe un certain nombre de tablettes - même la plus récente Kindle Fire - qui signalent Safari "Mobile" dans la chaîne userAgent. Il ne semble pas y avoir de moyen solide de détecter la tablette par rapport au téléphone à ce stade, sauf s'il s'agit d'une combinaison de userAgent et d'une prise en charge possible de la détection de résolution.
vernonk

22
faux! samsung galaxy tab est une tablette évidente mais il a "mobile" dans son agent utilisateur
puchu

1
Je crois que l'ajout "mobile" était avec Android 4, il y a encore beaucoup d'appareils avant 4 ... Pour android 2.x je suppose téléphone, pour 3.x je suppose tablette (bien qu'il y aura quelques faux positifs) ... sinon vous pouvez tester pour mobile ...
Tracker1

20

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

... Nous recommandons aux fabricants d'appareils grand format de supprimer "Mobile" de l'agent utilisateur ...

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

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

Donc, pour le moment, 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é, ce n'est pas grave mais ce sera bientôt une solution moche.

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

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

Mais comme il n'y a actuellement que des tablettes avec Andorid 3.x, vérifier sur Android 3 suffirait.


1
pourriez-vous publier la liste des appareils que vous avez vérifiés et le codage.
LTech

12

Mieux vaut détecter également l'agent utilisateur «mobile»

Bien que vous souhaitiez toujours détecter «android» dans User-Agent pour mettre en œuvre des fonctionnalités spécifiques à Android, telles que les optimisations de l'écran tactile, notre message principal est le suivant: si votre site mobile dépend du sniffing UA, veuillez détecter les chaînes «mobile» et «android», plutôt que simplement «android», dans User-Agent. Cela permet de servir correctement les visiteurs de votre mobile et de votre tablette.

Détecter 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
Cela fonctionne parfaitement. J'ai ajouté sur ceci pour iPad et 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>")
Spencer Cole

Comment ça marche 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 a le mot 'mobile' dedans pour la tablette Samsung Galaxy?
LTech

8

Vous pouvez essayer ce script car vous ne souhaitez pas cibler uniquement le Xoom. Je n'ai pas de Xoom, mais 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. Découvrez-le - https://github.com/codefuze/js-mobile-tablet-redirect . N'hésitez pas à soumettre des problèmes s'il y a quelque chose qui ne va pas!


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

Je ne suis pas sûr des autres Kindle, mais le Kindle Fire 1 n'a PAS «kindle» dans sa chaîne user-agent - ni «android»; les seuls indices sont les mots «Silk» et «Silk-Accelerated».
mklement0

6

Une fois que j'ai détecté Android dans l'agent utilisateur, voici comment je différencie les navigateurs de tablette et de smartphone (cela utilise Python, mais 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, comme indiqué dans les commentaires ci-dessous.


Pourquoi ne pas simplement rechercher "Mobile" dans l'agent?
Eren Tantekin

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

1
Maintenant que Google a publié Chrome pour Android, votre approche pourrait devenir un peu problématique. Parce que Chrome sur Android se signalera comme "Chrome Mobile" au lieu de l'habituel "Mobile Safari" comme le fait le navigateur Android d'origine. Pour quelques recommandations officielles: developer.google.com/chrome/mobile/docs/user-agent
Eren Tantekin

4

Basé sur les chaînes d'agents sur ce site:

http://www.webapps-online.com/online-tools/user-agent-strings

Ces résultats sont apparus:
Premièrement:

Toutes les tablettes ont:
1. Tablette
2. iPad

Seconde:

Tous les appareils téléphoniques ont:
1. Mobile
2. Téléphone

Troisième:

Les tablettes et téléphones ont:
1. Android

Si vous pouvez détecter niveau par niveau, je pense que le résultat est vrai à 90%. Comme les canaux d'appareils SharePoint.


2

Voici ce que j'utilise:

public static boolean onTablet()
    {
    int intScreenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;

    return (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE) // LARGE
    || (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE + 1); // Configuration.SCREENLAYOUT_SIZE_XLARGE
    }

2

Bien que nous ne puissions pas dire si certaines tablettes omettent «mobile», beaucoup, y compris le Samsung Galaxy Tab , ont un mobile dans leur agent utilisateur, ce qui rend impossible la détection entre une tablette Android et un téléphone Android sans recourir à la vérification des spécificités du modèle. Cette IMHO est une perte de temps, sauf si vous prévoyez de mettre à jour et d'élargir votre liste d'appareils sur une base mensuelle.

Malheureusement, la meilleure solution ici est de se plaindre à Google à ce sujet et de les amener à réparer Chrome pour Android afin d'ajouter du texte pour identifier entre un appareil mobile et une tablette. Enfer, même une seule lettre M OU T à un endroit spécifique de la chaîne suffirait, mais je suppose que cela a trop de sens.


1

Xoom a le mot Xoom dans l'agent utilisateur: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, comme Gecko) Version / 4.0 Safari / 534.13

Galaxy Tab a "Mobile" dans l'agent utilisateur: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, comme Gecko) Version / 4.0 Mobile Safari / 533.1

Ainsi, il est facile de détecter le Xoom, difficile de détecter si une version spécifique d'Android est mobile ou non.


1

La plupart des tablettes modernes fonctionnent en nid d'abeille aka 3.x Aucun téléphone n'exécute 3.x par défaut. La plupart des tablettes qui exécutent actuellement 2.x ont moins de capacité et pourraient de toute façon être mieux présentées avec un site mobile. Je sais que ce n'est pas parfait ... mais je suppose que c'est beaucoup plus précis que l'absence de mobile ...


1
En fait, les téléphones ne peuvent même pas exécuter 3.x car il s'agissait d'une version d'Android réservée aux tablettes et n'était pas open source.
Eren Tantekin

1

Alors que Mobile Android peut avoir "mobile" dans sa chaîne user-agent, que se passe-t-il s'il utilise Opera Mobile pour Android sur une tablette? Il contiendra toujours "mobile" dans sa chaîne user-agent, mais devrait afficher des sites de la taille d'une tablette. Vous devrez tester "mobile" qui n'est pas précédé par "opéra" plutôt que simplement "mobile"

ou vous pouvez simplement oublier Opera Mobile.


1
Opera mobile n'utilise pas «mobile» dans la chaîne utilisateur, il utilise «mobi». Voir ici
Ian Stanway

2
Opera Mobile pour mobiles a "Opera Mobi" dans la chaîne de l'agent utilisateur, mais Opera Mobile pour les tablettes a "Opera Tablet" dans la chaîne de l'agent utilisateur.
tagawa

1

Je recommanderais d'utiliser Categorizr pour détecter si l'utilisateur est sur une tablette. Vous pouvez voir les résultats des tests de catégorizr ici .


1

Si vous utilisez l'absence de "Mobile", c'est presque correct. Mais il y a HTC Sensation 4G (4,3 pouces avec Android 2.X) qui n'envoie pas de mot-clé Mobile.

La raison pour laquelle vous voudrez peut-être le traiter séparément est due à iframesetc.


0

La version bêta de 51Degrees, 1.0.1.6 et la dernière version stable 1.0.2.2 (28/04/2011) ont maintenant la possibilité de renifler pour tablette. Fondamentalement, dans le sens de:

string capability = Request.Browser["is_tablet"];

J'espère que cela vous aide.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.