Я использую сайт С# asp.net.
Как проверить, пользуется ли пользователь ipad или iphone? Как я могу проверить платформу?
Например, если пользователь вводит веб-сайт из ipad, я бы хотел отобразить "Hello ipad user"
Я использую сайт С# asp.net.
Как проверить, пользуется ли пользователь ipad или iphone? Как я могу проверить платформу?
Например, если пользователь вводит веб-сайт из ipad, я бы хотел отобразить "Hello ipad user"
Для iPad пользовательский агент выглядит примерно так:
Mozilla/5.0 (iPad, U, CPU iPhone OS 3_2, как Mac OS X, en-us) AppleWebKit/531.21.10 (KHTML, например, Gecko) Версия /4.0.4 Mobile/7B314 Safari/531.21.10
и для iPhone его somthing вроде:
Mozilla/5.0 (iPhone; U; CPU, как Mac OS X; ru) AppleWebKit/420 + (KHTML, например Gecko) Версия /3.0 Mobile/1A543a Safari/419.3
Любые многие другие в зависимости от версии и ее iPhone 3 или 4
поэтому лучше просто выполнить поиск подстроки для iPhone и iPad, как было предложено другим ответом
UPDATE:
Так как пользовательский агент iPad содержит слово iPhone
как @Rob Hruska упомянутый:
Mozilla/5.0 (iPad, U, CPU iPhone OS 3_2, как Mac OS X, en-us) AppleWebKit/531.21.10 (KHTML, например, Gecko) Версия /4.0.4 Mobile/7B314 Safari/531.21.10
и пользовательский агент iPhone - это что-то вроде this:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0, как Mac OS X, en-us) AppleWebKit/532.9 (KHTML, например, Gecko) Версия /4.0.5 Mobile/8A293 Safari/6531.22.7
было бы правильно проверить слово iPhone;
или iPad;
для идентификации устройства:
var userAgent = HttpContext.Current.Request.UserAgent.ToLower();
if (userAgent.Contains("iphone;"))
{
// iPhone
}
else if (userAgent.Contains("ipad;"))
{
// iPad
}
else
{
// Think Different ;)
}
Пользовательский агент для этих устройств включает "iPod", "iPad" или "IPhone", если это необходимо. Обратите внимание, что в игре есть несколько пользовательских агентов, поэтому совпадение точное нецелесообразно, но посмотрите с вашего устройства на http://whatsmyuseragent.com
Поэтому проверьте пользовательский агент в заголовках.
вы можете сделать это, получив UserAgent
string ua = Request.UserAgent;
if (ua != null && (ua.Contains("iPhone") || ua.Contains("iPad")))
{
...
...
...
}
Я бы сначала попробовал WURFL http://wurfl.sourceforge.net/
У них есть .NET API и очень хорошие образцы кода. http://wurfl.sourceforge.net/dotnet_index.php
Класс, который вам поможет, называется WURFLManager и имеет следующие методы:
Использовать WURFL http://wurfl.sourceforge.net/dotnet_index.php
Если вы используете asp.net mvc, вы можете использовать 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);
}
}
}
Существует также 51Degrees.Mobi Стив Сандерсон рассказал, как это сделать в своем блоге http://blog.stevensanderson.com/2010/12/17/using-51degreesmobi-foundation-for-accurate-mobile-browser-detection-on-aspnet-mvc-3/
51Degrees.Mobi Foundation - это проект с открытым исходным кодом .NET, который расширяет Request.Browser, поэтому он получает информацию от Универсальный файл ресурсов беспроводной сети (WURFL) - одна из самых полных и актуальных баз данных о мобильных устройствах. Отличная новость заключается в том, что Фонд 51Degrees.Mobi теперь доступен как пакет NuGet, поэтому его невероятно легко установить и обновить.
Будьте осторожны с телефонами Windows! По какой-то странной причине многие телефоны Windows говорят "как iPhone" в пользовательском агенте. Поэтому вы хотите проверить:
public bool IsIPhone
{
get
{
if (!UserAgent.ToUpper().Contains("LIKE IPHONE"))
{
return UserAgent.ToUpper().Contains("IPHONE");
}
return false;
}
}
Пример пользовательского агента телефона Windows (от Lumia 735):
"Mozilla/5.0 (мобильный телефон, Windows Phone 8.1, Android 4.0, ARM, Trident/7.0; Touch, rv: 11.0, IEMobile/11.0, NOKIA, Lumia 735), как iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, как Gecko) Mobile Safari/537"
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
}
вы можете получить данные о клиентских ОС от Request.UserAgent
получить имя ОС и версию ОС.
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;
}
С iOS 13 пользовательский агент изменился на Mac OS, например:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, как Gecko) Версия /13.0 Safari/605.1.15