检测 Web 应用程序中的设备类型

IT技术 java javascript websphere-portal
2021-02-27 15:47:30

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

这怎么可能?

6个回答

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

在 vanilla 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
  }
}
根据 Mozilla 的说法:“总而言之,我们建议在用户代理中的任何位置查找字符串“Mobi”以检测移动设备。” 参考:developer.mozilla.org/en-US/docs/Web/HTTP/...
2021-04-21 15:47:30
Mozilla 网站上最新更好的方式 - developer.mozilla.org/en-US/docs/...
2021-04-26 15:47:30
另一个不错的库是 bitwalker useragentutils:github.com/HaraldWalker/user-agent-utils,它提供浏览器类型、设备类型、操作系统、制造商、版本的枚举。它可以通过 Maven 安装,并且(也许是最重要的)得到维护。
2021-05-10 15:47:30
2021-05-13 15:47:30

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

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;
  }
有适用于 Chrome 和 Firefox 的插件,可能还有其他插件可以让您编写任何用户代理,甚至是预定义的“ipad”和“搜索机器人”用户代理……不值得信任,但有利于统计
2021-04-19 15:47:30
有人可以User-Agent在向服务器发送请求时伪造吗?说他们击中了curl命令但假装它来自Mobile
2021-04-21 15:47:30
@daydreamer 可以更改或“伪造”您的网络浏览器作为其用户代理发送的内容。某些移动网络浏览器允许您更改浏览器的标识(即“移动模式”或“桌面模式”),以便访问某些仅允许台式计算机访问的网站。如果您更改此设置,则用户代理会受到影响。
2021-04-25 15:47:30
你能给我提供更多关于这方面的信息吗?我试图通过 Http Header 提供的数据但没有找到所需的数据。
2021-05-09 15:47:30

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

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

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

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

https://github.com/nielsbasjes/yauaa