9 Replies Latest reply on Oct 14, 2010 5:18 AM by CPAcadiennes

    detect blackberry os version

    CPAcadiennes

      Does somebody know the code to detect the Blackberry version with coldfusion?

       

      First, i have code to detect if its a blackberry :

       

      <cfif findNoCase('BlackBerry', CGI.HTTP_USER_AGENT)>

       

      And if its a blackberry i need to detect the version of the OS because our mobile site only support version 4.5.0.127 and up.  If the version is under that i have to redirect the user to another page to tell him that his OS version is not supported, they have to update there OS before using our mobile site.

       

      Please HELP!!!

        • 1. Re: detect blackberry os version
          CPAcadiennes Level 1

          With JSP the code look like this and its working fine but i can't use JSP because our server do not support it.

           

          if (request.getHeader("user-agent").matches("^BlackBerry[0-9]{0,6}.*") && !request.getHeader("user-agent").matches("^BlackBerry[0-9]{0,6}/(4\\.(5\\.(0\\.(1(2[7-9]| [3-9]{1}\\d{1})|[2-9]{1}\\d{2}){1}|[1-9]){1}|[6-9]|1[0-9]){1}|[5-9]|1[0-9]){1}.*") ) {

           

          I can use javascript, but i go some syntax error :

           

          <script language=javascript>
          <!--
          if((navigator.userAgent.match(/blackberry/i)) && !request.getHeader("user-agent").matches("^BlackBerry[0-9]{0,6}/(4\\.(5\\.(0\\.(1(2[7-9]| [3-9]{1}\\d{1})|[2-9]{1}\\d{2}){1}|[1-9]){1}|[6-9]|1[0-9]){1}|[5-9]|1[0-9]){1}.*") ) )

          {
          location.href='notcompatible.cfm';
          }
          -->
          </script>

           

          I would prefer to use coldfusion if possible because its our main language.

           

          Thanks in advance for any help you can give to me

          • 2. Re: detect blackberry os version
            Adam Cameron. Level 5

            You might want to read this lot, detailing how CF implemented regexes, and which functions to use:

            http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24 -7a49.html

             

            --

            Adam

            • 3. Re: detect blackberry os version
              CPAcadiennes Level 1

              I already take a look at regular expression but I don't know how to code it to detect blackberry version....... do you know???

               

              My CF code to detect if its a mobile looks like this, but how to detect the version of the BB oucccchhh :

               

              cfif reFindNoCase("android|avantgo|blackberry|blazer|elaine|hiptop|ip(hone|od)|kindle|midp|mmp |mobile|o2|opera mini|palm( os)?|pda|plucker|pocket|psp|smartphone|symbian|treo|up\.(browser|link)|vodafone|wap|windo ws ce; (iemobile|ppc)|xiino",CGI.HTTP_USER_AGENT) GT 0 OR reFindNoCase("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)|a ttw|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\-|cel l|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|r3 80|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)|t s(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|v oda|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\-",Left(CGI.HTTP_USER_AGENT,4)) GT 0>

              • 4. Re: detect blackberry os version
                Adam Cameron. Level 5

                Wow. I'm @ the pub (mate is off getting a pint, so being a geek & checking email) so am not gonna pore over that regex but it seems unnecessarily complicated. Don't try to match •every• client agent string, just match the pattern of the BlackBerry ones. One can use wild cards to match the sequences of chars that are irrelevant to what you need to extract: you don't need to match every possibility.

                 

                Here's my pint.

                 

                --

                Adam

                • 5. Re: detect blackberry os version
                  Owain North Level 4

                  Got to agree that looks unnecessarily complicated.

                   

                  I don't know how the line would appear from a BlackBerry, but take for example a Firefox one:

                   

                  <cfset Str = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6" />

                   

                  <cfif findNoCase("Firefox", Str) >

                      <!--- At this point we know it's Firefox --->

                   

                      <!--- Strip out everything before the "Firefox" string to get the version --->

                      <cfset FFVersion = ReReplaceNoCase(Str, ".*Firefox\/", "") />

                   

                      <!--- FFVersion = "3.6.6" --->

                      <cfset FFMajor = listFirst(FFVersion, '.') /> <!--- 3 --->

                      <cfset FFMinor = listGetAt(FFVersion, 2, '.') /> <!--- 6 --->

                      <cfset FFRelease = listLast(FFVersion, '.') /> <!--- 6 --->

                  </cfif>

                   

                  At this point, you've now got variables in hand on which to perform all your business logic as to what versions are supported, however you choose to do that. You might want to wrap it all in a try/catch in case the format changes in future releases of the BB browser.

                   

                  It's 8:06am, and my pint still isn't here yet. Jealous.

                  • 6. Re: detect blackberry os version
                    Adam Cameron. Level 5

                    It's 8:06am, and my pint still isn't here yet. Jealous.

                    Strangely, the appeal of having a pint has now somewhat diminished for me this morning.  I can't quite put my finger on what it might be.

                     

                    That'll learn me for going out on a school night.

                     

                    --

                    Adam

                    • 7. Re: detect blackberry os version
                      Owain North Level 4

                      Rubbish, hair of the dog an' all that The best thing about drinking as soon as you get into the office is you've got eight hours to sober up before you have to drive home.

                      • 8. Re: detect blackberry os version
                        Adam Cameron. Level 5

                        Surely you mean driving to the pub?

                         

                        --

                        Adam

                        • 9. Re: detect blackberry os version
                          CPAcadiennes Level 1

                          Here is what i finaly use.. quite simple........

                           

                           

                          <cfset a = '#mid(CGI.http_user_agent,16,3)#'>

                           

                           

                          <cfif #a# LTE 4.5>

                           

                           

                           

                          Not supported

                           

                           

                           

                          </cfif>

                           

                           

                           

                          Forget about regular expression and don't drink and drive..............