Mobile app version of vmapp.org
Login or Join
Becky754

: Filtering desktop users by user agent string In order to determine whether to serve the mobile or full version of my site by default, I use a service that examines requests to determine the

@Becky754

Posted in: #BrowserDetecting #Mobile #UserAgent

In order to determine whether to serve the mobile or full version of my site by default, I use a service that examines requests to determine the type of device they originated from. However, calls to that service are somewhat expensive, so I'd like to filter out a number of desktop clients before having to call my service.

My current traffic stats show the following breakdown for my site:


35% - Chrome
25% - IE
20% - Firefox
16% - Safari


I don't know what percentage of these are desktop browsers vs. mobile browsers. However, last month (before the mobile version of my site existed), mobile users accounted for about 10% of my traffic.

Here's my question: Are there some regular expressions I can apply to the user agent to identify much of my non-mobile traffic so I can avoid unnecessary service calls? It isn't critical that I catch all desktop browsers at this stage. Even identifying 50% of them would be a huge help. It is important, however, not to incorrectly identify a mobile browser as a desktop one. Thus, conservatism would be a benefit here.

Clarification

I want to unambiguously identify some of the common desktop browsers as desktop, but the info I've been able to find so far has been outdated (the bane of browser detection) or otherwise unhelpful.

Here's an example: Chrome is available both on the desktop and on cell phones. Can I write a regular expression to look at a Chrome user agent string and say definitively that it isn't a cell phone? If it makes things simpler, I'm currently treating tablets as desktop browsers, though if it's too complicated, I don't need to handle them here.

10.03% popularity Vote Up Vote Down


Login to follow query

More posts by @Becky754

3 Comments

Sorted by latest first Latest Oldest Best

 

@Shakeerah822

Detecting based off User Agent is, and always will be, an inexact science. I think a much better option would be to detect the width of their device, and then decide which one to send them to. Something like

<script>
if ($(window).width < 600) {
window.location.href="yoursite.com/mobile-version.html";
}
<script>


Could do what you need.

10% popularity Vote Up Vote Down


 

@Speyer207

I don't exactly understand what you need, but if you just want the numbers, then you can get them at Google Analytics -



In the menu on the left, in the Audience --> Technology --> Browser & OS. Then select OS as the secondary dimension.

But if you want real time data, or need to send data to the expensive service, then a regular expression on the user-agent string is a good way to go about it, just change it to search for desktop user-agent patterns. You can find a list of common user-agents and their OS-Browser combinations here.

Also, you can export your GA data to CSV or some other format and then pass it to the other service, if that is possible.

There are a bunch of user-agent string parsers available for download on user-agent-string.info, and it also has an api. Plus a very comprehensive list of UA strings.

Gotta love Google :)

10% popularity Vote Up Vote Down


 

@BetL925

The site detectmobilebrowsers.com/ suggests using two regular expressions and some substrings. They make the code available in some sixteen programming languages. Here is what they recommend in JavaScript.

(function(a,b){if(/(android|bbd+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(a)||/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-/i.test(a.substr(0,4)))window.location=b})(navigator.userAgent||navigator.vendor||window.opera,'http://detectmobilebrowser.com/mobile');

10% popularity Vote Up Vote Down


Back to top | Use Dark Theme