【问题标题】:How to know a user-agent string for specific android devices?如何知道特定 Android 设备的用户代理字符串?
【发布时间】:2012-12-25 16:04:02
【问题描述】:

任务是在网络服务器端获取一些设备的一些统计数据。为此,我想知道特定 Android 设备上默认浏览器的用户代理字符串,例如:


  • 宏达电:
    • HTC Jetstream
    • HTC 传单
    • HTC Evo View 4G

  • 联系:
    • Nexus 7
    • Nexus 10

  • 三星:
    • 银河标签
    • 银河标签 2
    • 银河笔记

  • 摩托罗拉:
    • 摩托罗拉 Xyboard 8"
    • Droid Xyboard
    • 摩托罗拉 Xyboard 10"

有没有简单的方法知道它?是否有一个众所周知的列表将设备名称映射到用户代理字符串?另外,如果我应该采取不同的方法 - 请提出建议。

【问题讨论】:

  • 用户代理不是设备独有的
  • 请解释一下。无论如何,我们的任务是从网络服务器端获取一些上述设备(和其他一些设备)的统计数据。对此的任何建议都会有所帮助。
  • 不同的设备可以有相同的用户代理。他们甚至可以报告虚假的用户代理。这完全取决于发出请求的应用程序。您在寻找什么统计数据?
  • @RaghavSood 我有一个用户代理字符串数据库,需要从中提取统计信息(假设设备没有故意修改其用户代理字符串)
  • 是的,但统计数据是什么?

标签: android browser


【解决方案1】:

在我看来,要计算基于 Android 设备的各种用户代理的命中,您应该创建一个指向服务器的 URL。在应用程序启动时获取用户代理并发送到您的服务器。

我运行这段代码来获取用户代理

        WebView mes = new WebView(this);
        String str = mes.getSettings().getUserAgentString();
        Log.i("My User Agent", str);

在三星平板 10.1 英寸模拟器上我得到了用户代理

Mozilla/5.0 (Linux; U; Android 3.0; en-us; sdk Build/HONEYCOMB) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

在 Nexus 模拟器上我得到了

Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; google_sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

【讨论】:

  • 完美!这正是我想要的:)
【解决方案2】:

虽然这不是一个直接的答案,但我想提出这个问题:

请注意,客户端的用户代理可以轻松修改。 例如在编程方面:

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUserAgent(params, "WAHAHAHA");
HttpConnectionParams.setConnectionTimeout(params, HTTP_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, HTTP_READ_TIMEOUT);
HttpClient newHttpClient = new DefaultHttpClient(params);

当使用此HttpClient 访问您的网站时,用户代理将是“哇哈哈”

此外,市场上的一些网络浏览器,如海豚浏览器,允许用户输入他们想要的任何用户代理组合。

因此我认为从用户代理收集的命中计数统计信息不会那么可靠,我建议找到另一个标准来收集命中计数信息 =]

【讨论】:

  • 是的,所有 HTTP 请求标头都是由(可能不受信任的)客户端生成的。但是,只有极少数用户修改了他们的用户代理字符串,因此出于实际目的,这些统计异常值不会对 OP 正在寻求的结果产生明显影响。
【解决方案3】:

我建议您修改现有的解决方案,例如用 perl 编写的 Apache Mobile Filter。它使用51Degrees XML 文件和大约 70k 用户代理。您只需找到有趣的脚本并修改 AMF 脚本,以便收集有趣的数据。更重要的是 51Degrees 和 AMF 也可以用来识别用户的设备是否是移动的,它的屏幕尺寸等。

【讨论】:

    【解决方案4】:

    您可以找到用户代理列表here

    并在服务器上检查它们

    【讨论】:

    • 太棒了!例如,我如何知道Galaxy Tab 2 的用户代理字符串?
    • 这取决于您的服务器端语言。因此,您可以搜索如何获取用户代理并针对该特定语言对其进行解析。
    • 我应该搜索哪个字符串Galaxy Tab 2(例如)?
    【解决方案5】:

    结帐UserAgentString.com。它还有一个Android Webkit Browser User Agent Strings 列表。

    他们还 have an API 解析 UA 字符串并返回键值对或 JSON 列表。

    【讨论】:

      【解决方案6】:

      创建一个 Webview 并使用http://developer.android.com/reference/android/webkit/WebSettings.html#getDefaultUserAgent%28android.content.Context%29,没有将设备名称映射到用户代理的列表,我建议通过运行您的应用程序的移动设备将设备类型和用户代理发送到服务器。

      【讨论】:

      • 我在服务器端有一组用户代理字符串。现在我想计算来自不同设备的点击次数。
      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 2011-04-12
      相关资源
      最近更新 更多