2011-03-01 21 views
32

Estoy usando un sitio web C# asp.net.¿Cómo puedo verificar si el agente de uso es un ipad o un iphone?

¿Cómo puedo verificar si el usuario usa ipad o iphone? ¿Cómo puedo verificar la plataforma?

Por ejemplo, si el usuario introduce el sitio web de ipad Me gustaría mostrar "Hola usuario ipad"

+2

¿Puede ser más específico? ¿Estás escribiendo una aplicación C# con MonoTouch para su implementación en estos dispositivos? ¿Estás escribiendo un sitio web C# ASP .NET al que accederán estos dispositivos? – David

+0

Supongo que no es una aplicación C# sino un servidor web C# (ASP?) Debería verificar el UserAgent – RvdK

+0

Sí, es C# asp.net web – avnic

Respuesta

19

para iPad user agent es algo así como:

Mozilla/5.0 (iPad; U ; CPU iPhone OS 3_2 como Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10

y para iPhone su algo como :

Mozilla/5.0 (iPhone; U; CPU como Mac OS X; en) AppleWebKit/420 + (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419,3

Cualquier muchos más, dependiendo de la versión y el tiempo lo su iPhone 3 o 4

así que es mejor simplemente hacer una subcadena búsqueda de iPhone y iPad como sugiere otra respuesta

+0

La búsqueda de "iPhone" también identificará los teléfonos de Windows como iPhones. Ver mi respuesta a continuación. – nashwan

4

lo puede hacer por conseguir el agente de usuario

string ua = Request.UserAgent; 
if (ua != null && (ua.Contains("iPhone") || ua.Contains("iPad"))) 
{ 
... 
... 
... 
} 
+0

Esto no siempre funcionará, vea mi respuesta a continuación. – nashwan

66

ACTUALIZACIÓN: Puesto que el agente de usuario iPad contiene la palabra iPhone como @ Rob Hruska mentioned:

Mozilla/5.0 (iPad; U; CPU iPhone OS 3_2 como Mac OS X; es-es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10

y el agente de usuario de iPhone es algo así como this:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 como Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7

sería corre ct para comprobar la palabra iPhone; o iPad; para identificar el dispositivo:

var userAgent = HttpContext.Current.Request.UserAgent.ToLower(); 
if (userAgent.Contains("iphone;")) 
{ 
    // iPhone 
} 
else if (userAgent.Contains("ipad;")) 
{ 
    // iPad 
} 
else 
{ 
    // Think Different ;) 
} 
+2

esta solución está realmente bien, funciona para mí, me pregunto por qué esta no es la respuesta seleccionada ... * jeje * simplemente copié y pegué y 'Alex' me ayudó ... ¡Gracias! :) – visual

+1

Yo Alex, me ayudó también. +1. – Jack

+5

¿Esto no identifica iPads como iPhones, ya que el [agente de usuario del iPad] (http://stackoverflow.com/a/2248420/29995) contiene '... CPU iPhone ...'? –

5

El agente de usuario para estos dispositivos incluye "iPod", "iPad" o "iPhone" según sea apropiado. Tenga en cuenta que hay varios agentes de usuario en juego, por lo que un exacta partido es poco prudente - pero tienen un aspecto desde su dispositivo en http://whatsmyuseragent.com

A fin de comprobar el agente de usuario en las cabeceras.

4

me gustaría probar WURFL primera http://wurfl.sourceforge.net/

Tienen API .NET y muy buenos ejemplos de código. http://wurfl.sourceforge.net/dotnet_index.php

La clase que le ayudará a que se llama WURFLManager y tiene los siguientes métodos:

enter image description here

Uso WURFL http://wurfl.sourceforge.net/dotnet_index.php

Si el uso de asp.net mvc puede utilizar una ActionFilter

public class MobileActionFilterAttribute : ActionFilterAttribute 
{ 
    // The WURFL database contains information about a huge number of devices and mobile browsers. 
    // http://wurfl.sourceforge.net/ 
    // http://wurfl.sourceforge.net/dotnet_index.php 
    // http://wurfl.sourceforge.net/help_doc.php 

    private static readonly IWURFLManager WurflManager; 

    static MobileActionFilterAttribute() 
    { 
     IWURFLConfigurer configurer = new ApplicationConfigurer(); 
     WurflManager = WURFLManagerBuilder.Build(configurer); 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpRequestBase request = filterContext.RequestContext.HttpContext.Request; 

     // We don't have ARR server for dev environment, so we still need to check to see if the current domain name is the mobile site. 
     if (request.Url.AbsoluteUri.StartsWith(SiteConfiguration.Current.MobileSiteAddress, StringComparison.OrdinalIgnoreCase)) 
     { 
      return; 
     } 

     // Creates a WURFLRequest object from an ASP.NET HttpRequest object 
     WURFLRequest wurflRequest = WURFLRequestFactory.CreateRequest(HttpContext.Current.Request); 

     // Indicates whether the current user agent string refers to a desktop agent. 
     if (wurflRequest.IsDesktopRequest) 
      return; 

     // Get the information about the device 
     IDevice deviceInfo = WurflManager.GetDeviceForRequest(wurflRequest); 

     // Tells you if a device is a tablet computer (iPad and similar, regardless of OS) 
     bool isTablet = string.Equals(deviceInfo.GetCapability("is_tablet") ?? string.Empty, "true", StringComparison.OrdinalIgnoreCase); 

     if (isTablet) 
     { 
      // so we don't show the mobile site for iPad. 
      return; 
     } 

     // Indicates whether the current user agent string refers to a mobile device. 
     bool isMobileRequest = wurflRequest.IsMobileRequest; 

     // Tells you if a device is wireless or not. Specifically a mobile phone or a PDA are considered wireless devices, a desktop PC or a laptop are not 
     bool isWirelessDevice = string.Equals(deviceInfo.GetCapability("is_wireless_device") ?? string.Empty, "true", StringComparison.InvariantCultureIgnoreCase); 

     if (isMobileRequest && isWirelessDevice) 
     { 
      // we can redirect to the mobile site! 
      filterContext.Result = new RedirectResult(SiteConfiguration.Current.MobileSiteAddress); 
     } 
    } 
} 

También hay 51Degrees.Mobi Steve Sanderson ha cubierto cómo hacer esto en su blog http://blog.stevensanderson.com/2010/12/17/using-51degreesmobi-foundation-for-accurate-mobile-browser-detection-on-aspnet-mvc-3/

Fundación 51Degrees.Mobi es un proyecto .NET de código abierto que mejora Request.Browser por lo que obtiene su información de Wireless Universal Resource File (WURFL) - uno de las bases de datos más completas y actualizadas de información de dispositivos móviles. La gran noticia es que 51Degrees.Mobi Foundation ahora está disponible como un paquete NuGet, por lo que es increíblemente fácil de instalar y actualizar.

0
private static final Pattern IPHONE_AGENT = Pattern.compile(".*iPad.*|.*iPhone.*|.*iPod.*");  

String userAgent = request.getHeader("User-Agent"); 
if (userAgent != null && IPHONE_AGENT.matcher(userAgent).matches()) { 
    // do something 
} 
3

¡Tenga cuidado con los teléfonos Windows! Por alguna razón extraña, muchos teléfonos con Windows dicen "como iPhone" en el agente de usuario. Por lo que desea comprobar:

public bool IsIPhone 
{ 
    get 
    { 
     if (!UserAgent.ToUpper().Contains("LIKE IPHONE")) 
     { 
      return UserAgent.ToUpper().Contains("IPHONE"); 
     } 
     return false; 
    } 
} 

agente de usuario de teléfono Ejemplo de Windows (de Lumia 735):

"Mozilla/5.0 (Mobile; Windows Phone 8.1, Android 4.0; ARM; Trident/7.0; táctil; RV: 11,0; IEMobile/11,0; NOKIA; Lumia 735) como el iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537"

0

puede obtener datos del SO cliente desde Request.UserAgent obtener el nombre del sistema operativo y la versión del sistema operativo.

public static string GetClientOS(string ua, string platform) 
    { 

     if (ua.Contains("Android")) 
      return string.Format("Android {0}", GetMobileVersion(ua, "Android")); 

     if (ua.Contains("iPad")) 
      return string.Format("iPad OS {0}", GetMobileVersion(ua, "OS")); 

     if (ua.Contains("iPhone")) 
      return string.Format("iPhone OS {0}", GetMobileVersion(ua, "OS")); 

     if (ua.Contains("Linux") && ua.Contains("KFAPWI")) 
      return "Kindle Fire"; 

     if (ua.Contains("RIM Tablet") || (ua.Contains("BB") && ua.Contains("Mobile"))) 
      return "Black Berry"; 

     if (ua.Contains("Windows Phone")) 
      return string.Format("Windows Phone {0}", GetMobileVersion(ua, "Windows Phone")); 

     if (ua.Contains("Mac OS")) 
      return "Mac OS"; 

     if (ua.Contains("Windows NT 5.1") || ua.Contains("Windows NT 5.2")) 
      return "Windows XP"; 

     if (ua.Contains("Windows NT 6.0")) 
      return "Windows Vista"; 

     if (ua.Contains("Windows NT 6.1")) 
      return "Windows 7"; 

     if (ua.Contains("Windows NT 6.2")) 
      return "Windows 8"; 

     if (ua.Contains("Windows NT 6.3")) 
      return "Windows 8.1"; 

     if (ua.Contains("Windows NT 10")) 
      return "Windows 10"; 

     return platform + (ua.Contains("Mobile") ? " Mobile " : ""); 
    } 

    public static string GetMobileVersion(string userAgent, string device) 
    { 
     var temp = userAgent.Substring(userAgent.IndexOf(device) + device.Length).TrimStart(); 
     var version = string.Empty; 

     foreach (var character in temp) 
     { 
      var validCharacter = false; 
      int test = 0; 

      if (int.TryParse(character.ToString(), out test)) 
      { 
       version += character; 
       validCharacter = true; 
      } 

      if (character == '.' || character == '_') 
      { 
       version += '.'; 
       validCharacter = true; 
      } 

      if (validCharacter == false) 
       break; 
     } 

     return version; 
    } 
Cuestiones relacionadas