【问题标题】:Detecting Device Type in a web application在 Web 应用程序中检测设备类型
【发布时间】:2012-01-20 20:35:29
【问题描述】:

我们有一个基于 Java 的应用程序,我们希望在其中检测发送请求的设备的设备类型(移动设备或桌面设备)。

这怎么可能?

【问题讨论】:

标签: java javascript websphere-portal


【解决方案1】:

您必须从请求中读取 User-Agent 标头并做出决定。

在普通 servlet 应用程序中,一种粗略的做法是:

public void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
  if(request.getHeader("User-Agent").contains("Mobi")) {
    //you're in mobile land
  } else {
    //nope, this is probably a desktop
  }
}

【讨论】:

【解决方案2】:

可以通过解析http header获取设备信息

String browserType = request.getHeader("User-Agent");

你应该解析 browserType 来获取设备类型

这可能会有所帮助

  public String  getBrowserInfo( String Information )
  {
    String browsername = "";
    String browserversion = "";
    String browser = Information;
    if (browser.contains("MSIE"))
    {
      String subsString = browser.substring(browser.indexOf("MSIE"));
      String info[] = (subsString.split(";")[0]).split(" ");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Firefox"))
    {

      String subsString = browser.substring(browser.indexOf("Firefox"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Chrome"))
    {

      String subsString = browser.substring(browser.indexOf("Chrome"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Opera"))
    {

      String subsString = browser.substring(browser.indexOf("Opera"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Safari"))
    {

      String subsString = browser.substring(browser.indexOf("Safari"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    }
    return browsername + "-" + browserversion;
  }

【讨论】:

  • 你能提供更多关于这方面的信息吗?我试图通过Http Header提供的数据但没有找到所需的数据。
  • 有人可以在向服务器发送请求时伪造User-Agent 吗?说他们点击了curl 命令,但假装它来自Mobile
  • @daydreamer 可以更改或“伪造”您的网络浏览器作为其用户代理发送的内容。一些移动网络浏览器允许您更改浏览器的标识(即“移动模式”或“桌面模式”),以便访问某些只允许桌面计算机的网站。如果您更改此设置,用户代理就会受到影响。
  • 有适用于 Chrome 和 Firefox 的插件,可能还有其他插件允许您编写任何用户代理,甚至是预定义的“ipad”和“searchbot”用户代理......不值得信任,但有利于统计
【解决方案3】:

您可以获得第 3 方软件解决方案。那里有很多开源的。我之前使用过51Degrees.mobi's Java solution(并且还研究过他们的开源 C 解决方案)。按照该链接并点击下载按钮。启动和运行起来相对容易。

【讨论】:

    【解决方案4】:

    您可以尝试使用Spring Mobile。有一些方便的类可以解决这个问题。

    Device currentDevice = DeviceUtils.getCurrentDevice(servletRequest);
    if(currentDevice.isMobile()) { /* Mobile */ }
    if(currentDevice.isTablet()) { /* Tablet */ }
    if(currentDevice.isNormal()) { /* Desktop */ }
    

    【讨论】:

      【解决方案5】:

      你可以试试这个库,我想,yauaa 可以检测到用户代理字符串是哪个设备/软件

      https://github.com/nielsbasjes/yauaa

      【讨论】:

        【解决方案6】:

        您可以检查HttpServletRequest 对象上的User-Agent HTTP header

        参考:http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#user-agent

        【讨论】:

        • 我认为最好将重复链接放在问题本身的评论下方。现在它表明你的答案是重复的。
        【解决方案7】:

        对于 Java 51Degrees 在 GitHub https://github.com/51Degrees/Java-Device-Detection 上有一个免费的 API,它定期没有注明日期,应该能够涵盖您需要的所有基本保留。

        这里有一个如何使用API​​进行设备类型检测的教程https://51degrees.com/Developers/Documentation/APIs/Java-V32/Tutorials/Web-App

        还有一个提供 DeviceType 属性的免费云版本(如果您想要的不仅仅是 IsMobile),您可以在 51Degrees 网站上找到有关此内容的详细信息。您需要通过网站“购买”免费云,但它不要求提供银行详细信息,并且完全免费。您还可以根据自己的要求使用 JavaScript 和其他集成。

        披露:我在 51Degrees 工作。

        【讨论】:

          【解决方案8】:

          还有http://openddr.mobi/,开源设备检测用于

          • Java
          • C#
          • VB.net

          基于W3C Device Description Repository

          OpenDDR 可与 51Degrees、DeviceAtlas 或 ScientiaMobile/WURFL 的设备存储库相媲美,但与那些专有的封闭源代码产品不同,它是开源且免费使用的。

          【讨论】:

            猜你喜欢
            • 2012-06-20
            • 2012-12-31
            • 1970-01-01
            • 2014-06-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-17
            • 1970-01-01
            相关资源
            最近更新 更多