12

通过服务器检测 Android 的明显方法是从 User-Agent HTTP 标头中搜索“Android”字符串。但是 - 我抱怨这在某些设备上不起作用(例如在我的 HTC Evo 中),它们没有被检测为 Android。whatsmyuseragent.com 为我的 HTC Evo 3D 网络浏览器提供:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24。没有 Android 字符串或版本。可能是设备上的安全软件对其进行了更改,或者是 HTC 特定的问题,不确定。

显然,同一设备上的 Android Chrome 有另一个更好的 UA:Mozilla/5.0 (Linux; Android 4.0.3; HTC EVO 3D X515m Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19,但我不能只希望例如 QR 码阅读器应用程序打开 Chrome 而不是内置的 Android 浏览器,它具有无效的 UA。

是否有一个好技巧(javascript 调用?)可以跨设备和浏览器可靠地检测 Android?

编辑:看起来与 Galaxy S III 相同的问题,相同的用户代理字符串:Android 手机浏览器检测

4

4 回答 4

6

看起来我在 Android 网络浏览器设置中选择了“显示桌面版本”。一旦关闭,用户代理就在里面带有 Android。这似乎是 ICS 的一个功能,HTC 不应该受到责备:谷歌搜索错误的用户代理,我已经看到它发生在许多不同的手机上。

于 2013-03-12T13:39:58.113 回答
1

对于这个特定的任务,我可能会建议使用wurfl服务器端。

您可以通过执行非常简单的操作来检测 android:

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER);
if ($requestingDevice->getCapability("device_os") == "Android") {
    //the magic
}
于 2013-03-09T02:04:01.590 回答
1

检查用户代理一直是可靠地确定用户设备的推荐方法(至少在默认设置下)。也许您可以尝试使您的搜索更加健壮?Mozilla建议改为搜索字符串“Mobi” 。

于 2013-03-12T05:38:58.043 回答
0

我从您的问题中了解到的是,您在某些设备上获得了用户代理,而在少数设备上拒绝提供用户代理。所以我假设你在 android 设备上有一个应用程序,它通过一些 web 服务调用你的服务器,并且你试图从中提取用户代理。所以我在这里看到的解决方案是在android应用程序中添加用户代理参数作为代码,这样它将被发布在HTTP标头中,你可以从服务器中轻松提取

HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android");

我有同样的问题,但我以这种方式解决了。

于 2013-03-12T05:25:03.857 回答