Solved

Mobile REdirection

Posted on 2011-03-01
11
478 Views
Last Modified: 2014-11-12
Can anyone see why this will not work?
Imports System.Web
Imports System.Text
Imports System.Text.RegularExpressions

Namespace TurboKits

    Public Class Browsers

        Public Property UsersAgent As String
        Public Property BrowserAccept As String
        Public Property BrowserWAPProfile As String
        Public Property UserBrowser


        ''' <summary>
        ''' Check for a mobile device
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function IsMobile() As Boolean
            Try
                If UserBrowser.IsMobileDevice Then
                    Return True
                Else
                    'Try checking for the HTTP_X_WAP_PROFILE Header
                    If Not (IsNothing(BrowserWAPProfile)) Then
                        Return True
                    Else
                        'Check to see if HTTP_ACCEPT contains wap
                        If Not (IsNothing(BrowserAccept)) And (LCase(BrowserAccept).Contains("wap")) Then
                            Return True
                        Else
                            'If all else has failed, then chekc the user-agent
                            Dim objUA As String = LCase(UsersAgent)
                            Dim objRegEx1 As New Regex("(iphone|windows ce|blackberry|opera (mini|mobi)|mobile|palm|portable|windows phone|avantgo|docomo|ipod|ipad|up\.|android|dolfin|fennec|gobrowser|nokia|iemobile|jasmine|tablet|minimo|mot-|netfront|playstation|kindle|hiptop|symbianos|obigo|samsung|alcatel|lg-|webos|polaris|sonyericsson|semc|skyfire|tear|teashark|ucweb|uzardweb|midp|j2me|novarra|palmos|palmsource|240x320|opwv|chtml|pda|htc|panasonic|sony|pocket|dolphin|android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino)", RegexOptions.IgnoreCase)
                            Dim objRegEx2 As 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|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|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|xda(\-|2|g)|yas\-|your|zeto|zte\-)", RegexOptions.IgnoreCase)
                            If objRegEx1.IsMatch(objUA) Or objRegEx2.IsMatch(Left(objUA, 4)) Then
                                Return True
                            Else
                                Return False
                            End If
                            objRegEx1 = Nothing : objRegEx2 = Nothing
                        End If
                    End If
                End If
            Catch ex As Exception
                Dim objErr As New TurboKits.ErrorManager
                objErr.Location = "Browsers - IsMobile"
                objErr.Stack = ex.StackTrace()
                objErr.Except = ex
                objErr.ParseError()
                objErr = Nothing
                Return False
            End Try
        End Function

    End Class

End Namespace

Open in new window


On emulators, it seems to do the trick, but on my iPhone, my boss's iPhone, his friends Android, it does not work in production.

In staging it works just fine.  Both sites reside on the same server, and are configured the exact same.
0
Comment
Question by:kevp75
  • 5
  • 4
11 Comments
 
LVL 25

Author Comment

by:kevp75
ID: 35011129
the exception section is producing me:

Object reference not set to an instance of an object.


no line number
0
 
LVL 13

Assisted Solution

by:agarwalrahul
agarwalrahul earned 250 total points
ID: 35014080
Link:

http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_2298-ASP-NET-Mobile-Device-Detection-and-Redirection.html


Its a useful for you this article explains for ASP.NET mobile development to determine if an HTTP request is coming from a mobile phone and then redirecting the request to a page optimized for a mobile browser.

Please go through it may it works for you as well.
0
 
LVL 25

Author Comment

by:kevp75
ID: 35017122
can't use 3rd party.

Plus what I have works in one site, but does not work in another...  and there is an error thrown
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 28

Accepted Solution

by:
strickdd earned 250 total points
ID: 35164540
This is what I use. It is a RegEx on the user agent. It has caught every device connected so far, I work for a University and we have a lot of students connecting. You can get this RegEx string here - http://detectmobilebrowser.com/.

Dim u As String = Request.ServerVariables("HTTP_USER_AGENT")
Dim b As New Regex("android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino", RegexOptions.IgnoreCase)
Dim v As 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|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|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|xda(\-|2|g)|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase)
If b.IsMatch(u) Or v.IsMatch(Left(u, 4)) Then Response.Redirect("MyMobilePage.aspx")
0
 
LVL 25

Author Comment

by:kevp75
ID: 35165149
:)  that's where I got mine from..  i just added a few extras to it.
0
 
LVL 28

Expert Comment

by:strickdd
ID: 35165249
then the issue you are having is probably the same as mine. The User Agent string is not passed by the browser that is connecting to the page. You have to check if Request.ServerVariables["User_Agent"] = null
0
 
LVL 25

Author Comment

by:kevp75
ID: 35165523
is there another method to get that if it is null?
0
 
LVL 28

Expert Comment

by:strickdd
ID: 35166678
Nope, if it is null, then the browser isn't passing it. We had issues where our BigIP was hitting the page and caused error after error since it didn't have a user agent. In the end it detected the site as offline and would load the page for any user.
0
 
LVL 25

Author Comment

by:kevp75
ID: 35231587
is there another method to doing this?   I can't believe that I would simply have to rely on a 3rd party service to do it for me...
0
 
LVL 28

Expert Comment

by:strickdd
ID: 35233370
There is, but is it no longer supported: http://mdbf.codeplex.com/.
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

773 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question