哪些其他移动浏览器用户代理假装是Android和/或iPhone



我编写了一个服务器端脚本,用于检测客户机的用户代理,然后执行以下三种操作之一:

  1. 如果是iOS设备,将它们发送到Apple App Store
  2. 如果是Android,请将它们发送到Google Play
  3. 否则,请发送到我们的网站

它一直工作得很好,直到最近,当一个Windows Phone 8.1用户出现时——IEMobile 11浏览器有这个用户代理:

Mozilla/5.0(移动;Windows Phone 8.1;Android 4.0;臂;三叉戟/7.0;触摸;房车:11.0;IEMobile/11.0;诺基亚;Lumia 630) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537

我现在已经更新了我的脚本(见下文)与最初的if条件照顾这个Windows Phone 8.1 IEMobile 11浏览器,但我想知道是否有人知道任何其他常见的移动浏览器(非ios和非Android),也包括"Android"或"iPhone","iPad"等在他们的用户代理字符串(所以我可以更新我的脚本相应)?

<?php
$web_page_url = "http://example.com/";
$google_play_url = "http://play.google.com/store/apps/details?id=com.example.myapp";
$app_store_url = "https://itunes.apple.com/gb/app/my-app/id1234567890?mt=8";
/*
 * Detect the requesting user-agent.
 * If it's Windows Phone, send them to our website.
 * If it's Android, send them to Google Play.
 * If it's iOS, send them to Apple App Store.
 * Otherwise, send them to our website.
 */
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if (stripos($ua, 'windows phone') !== false) {
    /*
     * It's a Windows Phone (the user agent of which may also include "Android" and "iPhone")
     */
    header("Location: $web_page_url");
    exit;
}
else if (stripos($ua, 'android') !== false) {
    /*
     * It's an Android device, send them to Google Play
     */
    header("Location: $google_play_url");
    exit;
}
else if (stripos($ua, 'iphone') !== false || stripos($ua, 'ipod') !== false || stripos($ua, 'ipad') !== false) {
    /*
     * It's an iOS device, send them to Apple App Store
     */
    header("Location: $app_store_url");
    exit;
}
else {
    /*
     * It's not an Android or iPhone, so send them to the web page
     */
    header("Location: $web_page_url");
    exit;
}
?>

有Tizen,一个基于Linux的移动操作系统,使用

Mozilla/5.0 (Linux;Tizen 2.2;三星SM-Z9005) AppleWebKit/537.3(KHTML,像Gecko)版本/2.2像Android 4.1;Mobile Safari/537.3

新兴的Firefox OS似乎也这样做

Mozilla/5.0 (Linux;U;Android 4.4 Android Build/KRT16S;X11;FxOSMyWebkit/537.51.1 (KHTML, like Gecko) Gecko/29.0Mozilla/5.0 (Macintosh;U;英特尔Mac OS X 10_9_1;en-ID)MyWebKit/537.51.1 (KHTML, like Gecko) Chrome/34.0.17

我还发现这个列表可能很有用,但手动浏览很费力:)

我们在门户中做了完全相同的操作(如果检测到移动设备,则将用户重定向到移动页面)。
我发现了一些问题与WP 8.1用户代理字符串。对于带有IE的WP, 设置为通过Internet移动,我也收到了"有意义的"UAS:

Mozilla/5.0(移动;Windows Phone 8.1;Android 4.0;臂;三叉戟/7.0;触摸;房车:11.0;IEMobile/11.0;诺基亚;Lumia 930)和iPhone OS 7_0_3一样Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537

其中,如果IE mobile设置为"Desktop"或通过Intranet调用门户,我收到:

Mozilla/5.0 (Windows NT 6.2;臂;三叉戟/7.0;触摸;房车:11.0;WPDesktop;Lumia 930) like Gecko

. .结果是,我们的门户网站向iOS展示了移动页面,而不是向WP展示了移动页面。解决方法是在查询iPhone之前查询UAS中的"Windows Phone"。似乎微软试图通过这种方式被检测为移动设备(如果一个页面只查询iOS和android设备),这是不太好的。

所以我的(实际)代码(VB.net)到If:

If AT("Windows Phone", cProtUserAgent) > 0 Then
    cMobilePlattform = "WP"
 ElseIf AT("WPDesktop", cProtUserAgent) > 0 Then
    cMobilePlattform = "WP"
 ElseIf AT("IEMobile", cProtUserAgent) > 0 Then
    cMobilePlattform = "WP"
 ElseIf AT("ZuneWP7", cProtUserAgent) > 0 Then
    cMobilePlattform = "WP"
 ElseIf AT("iPhone", cProtUserAgent) > 0 Then
    cMobilePlattform = "iOS"
 ElseIf AT("iPad", cProtUserAgent) > 0 Then 
    cMobilePlattform = "iOS"
 ElseIf AT("Android", cProtUserAgent) > 0 Then ' Android:
     cMobilePlattform = "Android" 
 End If

注意:At返回字符串的位置(如果找到,则为0)。
然后,第二个if发生,如果设置了"iOS"或"Android"或"WP",客户端重定向到相关的移动页面。
否则,将为标准浏览器加载门户。

相关内容

最新更新