Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Mobile REdirection

Posted on 2011-03-01
11
Medium Priority
?
499 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
10 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
NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

 
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

Industry Leaders: 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!

Question has a verified solution.

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

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
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…
This video shows how to quickly and easily deploy an email signature for all users in Office 365 and prevent it from being added to replies and forwards. (the resulting signature is applied on the server level in Exchange Online) The email signat…
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
Suggested Courses

876 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