web-dev-qa-db-fra.com

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

J'ai regardé partout. Nous utilisons un Motorola Zoom pour tester les tests de notre site pour tablettes .. Le problème est que Android Useragent est un agent utilisateur général et qu’il n’existe aucune différence entre tablette Android et mobile Android. Je ne souhaite pas uniquement cibler un périphérique spécifique, tel que Xoom Useragent, dans la mesure où Android sera probablement installé sur plusieurs tablettes dans un avenir proche.

Nous utilisons Umbraco CMS et nous avons envisagé d’utiliser la solution 51Degrees.mobi. Pour le moment, cela ne répondra pas à nos besoins. Peut-être à l'avenir. Je sais que 51Degrees et certaines personnes chez Umbraco vont s’intégrer à Umbraco, mais le projet final ne sera probablement pas opérationnel avant quelques mois.
C'est pourquoi nous souhaitons détecter la chaîne UserAgent d'une tablette Android et ne pas la diriger directement vers notre site mobile, comme c'est actuellement le cas.

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

99
ClosDesign

Le problème est que l’agent utilisateur Android est un agent utilisateur général et qu’il n’existe 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.

106
CommonsWare

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

... Nous recommandons que les fabricants d'appareils de grande taille suppriment "Mobile" de l'agent utilisateur ...

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

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

Donc, pour le moment, je vérifie le nom 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 ce sera bientôt une mauvaise solution.

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’existe actuellement que des tablettes avec Andorid 3.x, une vérification sur Android 3 serait suffisante.

20
Bitwalker

Mo ’est préférable de détecter également l’agent utilisateur« mobile »

Bien que vous souhaitiez peut-être toujours détecter «Android» dans l’agent d’utilisateur, le implémenter des fonctionnalités spécifiques à Android, telles que l'écran tactile optimisations, notre message principal est: Si votre site mobile dépend de UA sniffing, veuillez détecter les chaînes de caractères "mobile" et "Android" plutôt que simplement «Android» dans User-Agent. Cela aide à bien servir les deux vos visiteurs mobiles et tablettes.

Détection d'un appareil Android via un 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>
12
Elenasys

Vous pouvez essayer ce script car vous ne voulez pas cibler uniquement Xoom. Je n'ai pas de Xoom, mais ça devrait marcher.

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. Check it out - https://github.com/codefuze/js-mobile-tablet-redirect . N'hésitez pas à soumettre des problèmes s'il y a un problème!

8
CodeFuze

Une fois que j'ai détecté Android dans l'agent utilisateur, voici comment je différencie les navigateurs de tablettes et de smartphones (ceci utilise Python, mais reste simple pour les 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, selon les commentaires ci-dessous.

6
Suman

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

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

Ces résultats sont venus:
Premier: 

Tous 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 les 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 de périphérique SharePoint.

3
Jalali Shakib

Bien que nous ne puissions pas dire si certaines tablettes omettent "mobile", beaucoup, y compris le Samsung Galaxy Tab ont ont un mobile dans leur agent utilisateur, rendant impossible la détection entre une tablette Android et un téléphone Android sans avoir à vérifier le modèle détails. Cet IMHO est une perte de temps, sauf si vous envisagez de mettre à jour et d’élargir votre liste d’appareils tous les mois.

Malheureusement, la meilleure solution ici est de se plaindre auprès de Google à ce sujet et de lui demander de réparer Chrome pour Android afin d'ajouter du texte à identifier entre un appareil mobile et une tablette. Même une seule lettre M OR T à un endroit précis de la chaîne suffirait, mais je suppose que cela a trop de sens.

2
D Langhorne

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
Regis St-Gelais

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

La raison pour laquelle vous pouvez vouloir le traiter séparément est due à iframes etc.

1
zel

La plupart des tablettes modernes fonctionnent en nid d'abeille, c'est-à-dire 3.x Aucun téléphone ne fonctionne sous 3.x par défaut . La plupart des tablettes exécutant actuellement la version 2.x ont moins de capacité et pourraient être de meilleure qualité lorsqu'elles sont présentées à un site mobile de toute façon .Je sais que ce n’est pas sans faille .. mais je suppose que c’est beaucoup plus précis que l’absence de portable ..

1
gjr

Xoom a le mot Xoom dans l'agent utilisateur: Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; 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; fr-fr; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, comme Gecko) Version/4.0 Mobile Safari/533.1

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

1
travyo

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
hybrid

Alors que Mobile Android peut avoir "mobile" dans sa chaîne d'agent utilisateur, que se passe-t-il s'il utilise Opera Mobile pour Android sur une tablette? Il aura toujours "mobile" dans sa chaîne d'agent utilisateur, 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 par "mobile" "

ou vous pouvez simplement oublier Opera Mobile.

1
GeeItSomeLaldy

La version bêta, 1.0.1.6 et la dernière version stable 1.0.2.2 (28/04/2011) de 51Degrees offrent désormais la possibilité de renifler pour tablette. Fondamentalement dans les lignes de:

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

J'espère que cela vous aide.

0
Joey Schluchter

Essayez OpenDDR , il est gratuit contrairement à la plupart des autres solutions mentionnées.

0
Werner Keil