Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mobile Device Detection in asp.net

Tags:

c#

asp.net

The following is a Mobile device detection code which encompasses three different conditions

if (Request.Browser.IsMobileDevice) {    //Do Something } else if (((System.Web.Configuration.HttpCapabilitiesBase)myBrowserCaps).IsMobileDevice) {   //Do Something } else if (IsMobileDevice(mobileDevices)) {   //Do Something }  public bool IsMobileDevice() {      private static string[] mobileDevices = new string[] {"iphone","ppc"                                                    "windows ce","blackberry",                                                    "opera mini","mobile","palm"                                                    "portable","opera mobi" };           string userAgent = Request.UserAgent.ToString().ToLower();          return mobileDevices.Any(x => userAgent.Contains(x));  } 

I was forced to write three conditions as they were failing for some devices.

Can anyone suggest a better approach?

like image 514
Bisileesh Avatar asked Oct 26 '12 12:10

Bisileesh


People also ask

What is Mobile device detection?

Device Detection is technology that identifies what type of mobile devices are accessing an organization's website. That organization can run device detection in real time, or run it as post-processing data analysis.

How can check website open in mobile or desktop in asp net?

You can use useragent in asp.net to verify the request are coming from mobile or desktop.


1 Answers

taking and change a bit the code from : http://detectmobilebrowsers.com/

public static class Utils {         // update : 5/April/2018     static Regex MobileCheck = new Regex(@"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);     static Regex MobileVersionCheck = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);      public static bool fBrowserIsMobile()     {         Debug.Assert(HttpContext.Current != null);          if (HttpContext.Current.Request != null && HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"] != null)         {             var u = HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"].ToString();              if (u.Length < 4)                 return false;              if (MobileCheck.IsMatch(u) || MobileVersionCheck.IsMatch(u.Substring(0, 4)))                 return true;         }          return false;     } } 

and this is how you call it.

if (Utils.fBrowserIsMobile()) {     // go to mobile pages } 

What I have change to the code from http://detectmobilebrowsers.com/

  • Make static compile the Regex for faster check.
  • Fix a bug in the case that u is less than 4 characters.
  • Other checks.

Using Cache

This code is fast, and the one trick is that we have made static and pre compile the regex. How ever i suggest after the first check to save the result on user session and use that session variable that is a lot faster.

like image 116
Aristos Avatar answered Sep 23 '22 10:09

Aristos