Cómo detectar tabletas Android en general. ¿Agente de usuario?

103

He mirado por todas partes. Estamos utilizando un Motorola Zoom para probar el sitio de nuestras tabletas. El problema es que el Android Useragent es un Useragent general y no hay diferencia entre la tableta Android y el Android móvil. No quiero apuntar solo a un dispositivo específico como Xoom Useragent ya que es muy probable que Android esté en múltiples dispositivos de tableta en el futuro cercano.

Estamos usando Umbraco CMS, y hemos considerado usar la solución 51Degrees.mobi, y en este momento esto no funcionará para nuestras necesidades. Quizás en el futuro. Sé que 51Degrees y algunas personas de Umbraco van a integrarse un poco en Umbraco, pero el proyecto final probablemente no saldrá hasta dentro de un par de meses.
Por lo tanto, ¿por qué nos gustaría detectar la cadena Useragent de una tableta Android y no tenerla directamente en nuestro sitio móvil como lo es actualmente?

Si alguien sabe cómo detectar una tableta Android en general, no el dispositivo específico sería de gran ayuda.

ClosDesign
fuente
2
Solo estoy adivinando, pero tal vez haya una manera de ver qué tan alta es la resolución de visualización.
Phonon
@Phonon, Sí, estamos intentando usar Javascript para enviar un valor res al servidor. Estamos intentando hacernos un __doPostBack, pero eso parece no devolver nuestro valor. Tenemos un valor de entrada oculto, muestra el lado del cliente pero no lo estamos recuperando del lado del servidor.
ClosDesign
No estoy seguro de poder ayudarte aquí.
Phonon

Respuestas:

112

El problema es que el agente de usuario de Android es un agente de usuario general y no hay diferencia entre Android de tableta y Android móvil.

Esto es incorrecto. Android móvil tiene la cadena "Móvil" en el encabezado User-Agent. Tablet Android no lo hace.

Pero vale la pena mencionar que hay bastantes tabletas que reportan Safari "Mobile" en el userAgent y esta última no es la única forma sólida de diferenciar entre Mobile y Tablet.

CommonsWare
fuente
3
estás en lo correcto. Solo estaba buscando una cadena que contenga Android. Tuve que buscar la cadena que contiene Android y! Mobile. Encontré el artículo de Tim Bray sobre esto.
ClosDesign
6
@yoavf: Eso parece haberse solucionado con la actualización de Android 3.1 de XOOM. Soy dueño de un XOOM y lo acabo de probar, no "móvil".
CommonsWare
27
Esta respuesta no es del todo correcta. Hay bastantes tabletas, incluso la más reciente Kindle Fire, que informan Safari "Móvil" en la cadena userAgent. No parece haber una forma sólida de detectar tableta frente a teléfono en este momento, a menos que sea una combinación de userAgent y posible soporte para detección de resolución.
vernonk
22
¡falso! Samsung Galaxy Tab es una tableta obvia pero tiene "móvil" en su agente de usuario
puchu
1
Creo que la adición de "móvil" fue con Android 4, todavía hay muchos dispositivos anteriores a 4 ... Para Android 2.x supongo teléfono, para 3.x supongo tableta (aunque habrá algunos falsos positivos) ... de lo contrario, puede probar para dispositivos móviles ...
Tracker1
20

@Carlos: En su artículo Tim Bray recomienda esto (al igual que otra publicación de Google ), pero desafortunadamente no todos los fabricantes de tabletas lo están aplicando.

... Recomendamos que los fabricantes de dispositivos de factor de forma grande eliminen "Mobile" del User Agent ...

La mayoría de las cadenas de usuario-agente de tabletas Android que he visto usan safari móvil, por ejemplo, el Samsung Galaxy Tab:

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

Entonces, en este momento, estoy verificando los nombres de los dispositivos para detectar tabletas Android. Siempre que haya pocos modelos en el mercado, está bien, pero pronto será una solución desagradable.

Al menos en el caso del XOOM, la parte móvil parece haber desaparecido:

Mozilla / 5.0 (Linux; U; Android 3.0; en-us; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML, como Gecko) Versión / 4.0 Safari / 534.13

Pero como actualmente solo hay tabletas con Andorid 3.x, verificar en Android 3 sería suficiente.

Bitwalker
fuente
1
¿Podría publicar la lista de dispositivos que comprobó y la codificación?
LTech
12

Mucho mejor para detectar también al usuario-agente "móvil"

Si bien es posible que aún desee detectar "android" en el User-Agent para implementar funciones específicas de Android, como las optimizaciones de la pantalla táctil, nuestro mensaje principal es: si su sitio móvil depende del rastreo de UA, detecte las cadenas "mobile" y "android", en lugar de solo "android", en el User-Agent. Esto ayuda a atender adecuadamente a los visitantes de sus dispositivos móviles y tabletas.

Detectar dispositivo Android a través del navegador

 < 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>
Jorgesys
fuente
3
Esto funciona perfectamente. Agregué a esto para iPad y 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
¿Cómo funciona para mozilla / 5.0 (linux; u; android 2.2; en-gb; gt-p1000 build / froyo) applewebkit / 533.1 (khtml, como gecko) versión / 4.0 mobile safari / 533.1 que tiene la palabra 'móvil'? en él para la tableta Samsung Galaxy?
LTech
8

Puede probar este script, ya que no desea apuntar solo a Xoom. No tengo una Xoom, pero debería funcionar.

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;
}
}

Creé un proyecto en github. Compruébelo usted mismo: https://github.com/codefuze/js-mobile-tablet-redirect . ¡No dudes en enviar problemas si hay algún problema!

CodeFuze
fuente
1
Esto no funcionará para las versiones de Android> 3.0, como ICS (4.0). Creo que la respuesta aceptada es la correcta: compruebe si "Mobile Safari" está en useragent.
Suman
No estoy seguro acerca de otros Kindles, pero el Kindle Fire 1 NO tiene "kindle" en su cadena de usuario-agente, ni contiene "android"; las únicas pistas son las palabras 'Silk' y 'Silk-Accelerated'.
mklement0
6

Una vez que he detectado Android en el agente de usuario, así es como puedo diferenciar entre navegadores de tabletas y teléfonos inteligentes (esto usa Python, pero es igualmente simple para otros lenguajes de programación):

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

ACTUALIZADO: para reflejar el uso de Chrome en Android, según los comentarios a continuación.

Suman
fuente
¿Por qué no buscar simplemente "Móvil" en el agente?
Eren Tantekin
Creo que eso también podría funcionar, pero creo que puede ser peligroso buscar solo "Móvil"; podría haber dispositivos con nombres, como "HTC Mobile", etc. Creo que este es el enfoque recomendado.
Suman
1
Ahora que Google lanzó Chrome para Android, su enfoque podría volverse un poco problemático. Porque, Chrome en Android se reportará a sí mismo como "Chrome Mobile" en lugar del habitual "Mobile Safari" como lo está haciendo el navegador estándar de Android. Para algunas recomendaciones oficiales: developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin
4

Según las cadenas de agentes de este sitio:

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

Estos resultados surgieron:
Primero:

Todos los dispositivos de tableta tienen:
1. Tableta
2. iPad

Segundo:

Todos los dispositivos telefónicos tienen:
1. Móvil
2. Teléfono

Tercero:

Los dispositivos de tableta y teléfono tienen:
1. Android

Si puede detectar nivel por nivel, creo que el resultado es 90 por ciento verdadero. Como los canales de dispositivos de SharePoint.

Jalali Shakib
fuente
2

Esto es lo que uso:

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
    }
Regis St-Gelais
fuente
2

Si bien no podemos decir si algunas tabletas omiten "móvil", muchas, incluida la Samsung Galaxy Tab , tienen un dispositivo móvil en su agente de usuario, lo que hace imposible detectar entre una tableta Android y un teléfono Android sin tener que revisar los detalles del modelo. En mi humilde opinión, es una pérdida de tiempo a menos que planee actualizar y expandir su lista de dispositivos mensualmente.

Desafortunadamente, la mejor solución aquí es quejarse con Google sobre esto y hacer que arreglen Chrome para Android para que agregue algo de texto para identificar entre un dispositivo móvil y una tableta. Demonios, incluso una sola letra M o T en un lugar específico de la cadena sería suficiente, pero supongo que tiene demasiado sentido.

D Langhorne
fuente
1

Xoom tiene la palabra Xoom en el usuario-agente: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, como Gecko) Versión / 4.0 Safari / 534.13

Galaxy Tab tiene "Mobile" en el usuario-agente: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, como Gecko) Versión / 4.0 Mobile Safari / 533.1

Entonces, es fácil detectar el Xoom, difícil de detectar si una versión específica de Android es móvil o no.

travyo
fuente
1

La mayoría de las tabletas modernas funcionan con Honeycomb, también conocido como 3.x Ningún teléfono ejecuta 3.x de forma predeterminada. La mayoría de las tabletas que actualmente ejecutan 2.x tienen menos capacidad y, de todos modos, podrían ser mejores cuando se les presenta un sitio móvil. Sé que no es impecable ... pero supongo que es mucho más preciso que la ausencia de un móvil ...

gjr
fuente
1
En realidad, los teléfonos ni siquiera pueden ejecutar 3.x porque era una versión de Android solo para tabletas y no era de código abierto.
Eren Tantekin
1

Si bien Mobile Android puede tener "mobile" en su cadena de usuario-agente, ¿qué sucede si está usando Opera Mobile para Android en una tableta? Seguirá teniendo "móvil" en su cadena de agente de usuario, pero debería mostrar sitios del tamaño de una tableta. Deberá probar para "móvil" que no esté precedido por "opera" en lugar de solo "móvil"

o simplemente podría olvidarse de Opera Mobile.

GeeItSomeLaldy
fuente
1
Opera mobile no usa 'mobile' en la cadena de usuario, usa 'mobi'. Vea aquí
Ian Stanway
2
Opera Mobile para móviles tiene "Opera Mobi" en la cadena de agente de usuario, pero Opera Mobile para tabletas tiene "Opera Tablet" en la cadena de agente de usuario.
tagawa
1

Recomendaría usar Categorizr para detectar si el usuario está en una tableta. Puede ver los resultados de la prueba de categorización aquí .

híbrido
fuente
1

Si utiliza la ausencia de "Móvil", entonces es casi correcto. Pero hay HTC Sensation 4G (4,3 pulgadas con Android 2.X) que no envía palabra clave móvil.

La razón por la que es posible que desee tratarlo por separado se debe a, iframesetc.

zel
fuente
0

La versión beta de 51Degrees, 1.0.1.6 y la última versión estable 1.0.2.2 (28/4/2011) ahora tienen la capacidad de rastrear tabletas. Básicamente en la línea de:

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

Espero que esto te ayude.

Joey Schluchter
fuente
0

Pruebe OpenDDR , es gratis a diferencia de la mayoría de las otras soluciones mencionadas.

Werner Keil
fuente