What's the easiest way to detect the user's operating system in Rails 3?

前端 未结 4 1306
难免孤独
难免孤独 2021-02-07 20:01

Simple Rails app, mostly scaffolding. I want to detect whether the user is using Android or iPhone to access my app. What\'s the easiest way to do that?

相关标签:
4条回答
  • 2021-02-07 20:46

    the user_agent gem is useful for mobile vs. desktop..., and browser version. but doesn't do anything for OS https://github.com/josh/useragent

    0 讨论(0)
  • 2021-02-07 20:47
    if request.env['HTTP_USER_AGENT'].downcase.match(/android|iphone/)
      puts "yup, its mobile"
    end
    
    0 讨论(0)
  • 2021-02-07 20:54
      def getBrowser(bt)
        rs=false
        ua=request.env['HTTP_USER_AGENT'].downcase
        isOpera = ua.index('opera') ? true : false
        isSafari = (ua =~ /webkit|khtml/) ? true : false
        isSafari3 = (ua.index('webkit/5') ? true : false
        isGecko = (!isSafari and ua.index('gecko')) ? true : false
        isGecko3 = (!isSafari and ua.index('rv:1.9')) ? true : false
        isIE = (!isOpera and ua.index('msie')) ? true : false
        isIE7 = (!isOpera and ua.index('msie 7')) ? true : false
        case bt
          when 0  #isKonqueror
            if ua.index('konqueror') then rs=true end
          when 1  #isOpera
            rs=isOpera
          when 2  #isSafari
            rs=isSafari
          when 3  #isSafari2
            rs=isSafari && !isSafari3
          when 4  #isSafari3
            rs=isSafari3
          when 5  #isIE
            rs=isIE
          when 6  #isIE6
            rs=isIE && !isIE7
          when 7  #isIE7
            rs=isIE7
          when 8  #isGecko
            rs=isGecko
          when 9  #isGecko2
            rs=isGecko && !isGecko3
          when 10 #isGecko3
            rs=isGecko3
          when 11 #isWindows
            if ua.index('windows') or ua.index('win32') then rs=true end
          when 12 #isMac
            if ua.index('macintosh') or ua.index('mac os x') then rs=true
    end
          when 13 #isAir
            if ua.index('adobeair') then rs=true end
          when 14 #isLinux
            if ua.index('linux') then rs=true end
          when 15 #isSecure
            s = request.env['SERVER_PROTOCOL'].downcase
            if s.index('https') then rs=true end
        end
        rs
      end 
    

    http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/8fa57719fd9316e1

    0 讨论(0)
  • 2021-02-07 20:59

    I know this question is old, but in case this helps someone else, I use this method in application_controller.rb to automatically set the format to :mobile:

    before_filter :detect_mobile
    
    protected
    
    def detect_mobile
      request.format = :mobile if mobile?
    end
    
    def mobile?
      request.user_agent =~ /iPhone|iPad|Android/i
    end
    

    The mobile? method is separate so that you can also use it in your own controllers if you need to do some sort of conditional logic for mobile browsers.

    0 讨论(0)
提交回复
热议问题