Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Mobile REdirection

Posted on 2011-03-01
11
Medium Priority
?
495 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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:Rahul Agarwal
Rahul Agarwal earned 1000 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 28

Accepted Solution

by:
strickdd earned 1000 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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

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

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

721 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