2011-12-15 15 views
22

Tenemos una aplicación basada en Java en la que queremos detectar el tipo de dispositivo (móvil o de escritorio) para el dispositivo que está enviando la solicitud.Detección de tipo de dispositivo en una aplicación web

¿Cómo es posible?

+0

Véase la pregunta y la respuesta duplicado: http://stackoverflow.com/questions/1005153/auto-detect-mobile-browser-via-user-agent – jbindel

+0

@Fly Es decir, en PHP no Java – nidhin

+0

El concepto es exactamente lo mismo. Usted verifica el usuario-agente. – jbindel

Respuesta

34

Usted Tendremos que leer el encabezado User-Agent del solicitar y decidir sobre eso.

En aplicaciones de servlet de vainilla, de una manera burda de hacerlo es:

public void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
    if(request.getHeader("User-Agent").indexOf("Mobile") != -1) { 
    //you're in mobile land 
    } else { 
    //nope, this is probably a desktop 
    } 
} 
+3

La última y mejor manera en Mozilla sitio - https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent – San

+1

Otra forma exhaustiva: https://code.google.com/p/mobileesp/source/browse/Java/UAgentInfo.java – San

+1

Otra buena biblioteca es useragentutils bitwalker: https://github.com/HaraldWalker/user-agent-utils que proporciona enumeraciones para BrowserType, DeviceType, OperatingSystem, Manufacturer, Version. Se puede instalar a través de Maven, y (quizás lo más importante) se mantiene. –

12

Usted puede obtener información del dispositivo mediante el análisis de encabezado HTTP

String browserType = request.getHeader("User-Agent"); 

Debe analizar BrowserType para obtener el tipo de dispositivo

Esto puede ayudar a

public String getBrowserInfo(String Information) 
    { 
    String browsername = ""; 
    String browserversion = ""; 
    String browser = Information; 
    if (browser.contains("MSIE")) 
    { 
     String subsString = browser.substring(browser.indexOf("MSIE")); 
     String info[] = (subsString.split(";")[0]).split(" "); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Firefox")) 
    { 

     String subsString = browser.substring(browser.indexOf("Firefox")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Chrome")) 
    { 

     String subsString = browser.substring(browser.indexOf("Chrome")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Opera")) 
    { 

     String subsString = browser.substring(browser.indexOf("Opera")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Safari")) 
    { 

     String subsString = browser.substring(browser.indexOf("Safari")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } 
    return browsername + "-" + browserversion; 
    } 
+0

¿Puede proporcionarme más información al respecto? Traté de revisar los datos que Http Header proporciona pero no encontré los datos requeridos. –

+0

¿alguien puede falsificar 'User-Agent' cuando envía una solicitud al servidor?dicen que presionan el comando 'curl' pero dicen que proviene de' Mobile' – daydreamer

+0

@daydreamer Es posible cambiar o "falsear" lo que su navegador web envía como su agente de usuario. Algunos navegadores web móviles le permitirán cambiar lo que el navegador se identifica a sí mismo (es decir, "Modo móvil" o "Modo escritorio") para acceder a ciertos sitios web que solo permiten computadoras de escritorio. Si cambia esta configuración, el agente de usuario es el que se ve afectado. – Lucky

5

usted podría conseguir una solución de software de tercera parte. Hay muchos Open Source. He usado 51Degrees.mobi's Java solution antes de ahora (y también he trabajado en su solución C de código abierto). Sigue ese enlace y presiona el botón de descarga. Es relativamente fácil comenzar a funcionar.

0

Para Java 51Degrees tiene una API gratuita en GitHub https://github.com/51Degrees/Java-Device-Detection, que tiene fecha regularmente y debe ser capaz de cubrir todas las detenciones básicas que necesita.

No es un tutorial de cómo utilizar la API para la detección de tipos de dispositivo aquí https://51degrees.com/Developers/Documentation/APIs/Java-V32/Tutorials/Web-App

También hay una versión gratuita en la nube que ofrece la propiedad DeviceType (si quieres algo más que isMobile) se pueden encontrar los detalles sobre esto en el sitio web 51Degrees. Deberá "comprar" la nube gratuita a través del sitio web, pero no solicita los datos bancarios y es completamente gratis. También puede usar JavaScript y otra integración dependiendo de sus requisitos.

Divulgación: trabajo en 51 grados.

0

Puede intentar utilizar Spring Mobile. Hay clases convenientes para resolver eso.

Device currentDevice = DeviceUtils.getCurrentDevice(servletRequest); 
if(currentDevice.isMobile()) { /* Mobile */ } 
if(currentDevice.isTablet()) { /* Tablet */ } 
if(currentDevice.isNormal()) { /* Desktop */ } 
Cuestiones relacionadas