我编写了一个服务器端脚本,用于检测客户端的用户代理,然后执行以下三件事之一:
它工作得很好,直到最近,当 Windows Phone 8.1 用户出现时 - IEMobile 11 浏览器有这个用户代理:
Mozilla/5.0(移动设备;Windows Phone 8.1;Android 4.0;ARM;Trident/7.0;Touch;rv:11.0;IEMobile/11.0;NOKIA;Lumia 630),例如 iPhone OS 7_0_3 Mac OS X AppleWebKit/537( KHTML,如 Gecko)移动野生动物园/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;移动 Safari/537.3
新兴的 Firefox OS 似乎也做到了这一点
Mozilla/5.0(Linux;U;Android 4.4 Andro-id Build/KRT16S;X11;FxOS armv7I rv:29.0) MyWebkit/537.51.1(KHTML,如 Gecko)Gecko/29.0 Firefox/29.0 Mozilla/5.0(Macintosh;U;Intel Mac OS X 10_9_1;en-ID) MyWebKit/537.51.1(KHTML,如 Gecko)Chrome/34.0.17
我还发现了这个列表,它可能有用,但手动查看很费力:)
我们在门户中执行完全相同的操作(如果检测到移动设备,则将用户重定向到移动页面)。
我检测到 WP 8.1 用户代理字符串存在一些问题。
对于带有 IE 的 WP,设置为通过互联网移动,我还收到“有意义的”UAS:
Mozilla/5.0(移动;Windows Phone 8.1;Android 4.0;ARM;Trident/7.0; 触碰;房车:11.0; IEMobile/11.0;诺基亚; Lumia 930) 类似于 iPhone OS 7_0_3 Mac OS X AppleWebKit/537(KHTML,如 Gecko)Mobile Safari/537
其中,如果 IE 移动设备设置为“桌面”或通过 Intranet 调用门户,我会收到:
Mozilla/5.0(Windows NT 6.2;ARM;Trident/7.0;触摸;rv:11.0; WP桌面; Lumia 930)像 Gecko
所以..效果是,我们的门户向iOS显示了移动页面,而不是向WP显示移动页面。 解决方法是在查询 iPhone 之前先查询 UAS 中的“Windows Phone”。 看来 MS 试图以这种方式被检测为移动设备(如果页面仅查询 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)。然后,如果设置了“iOS”或“Android”或“WP”,则发生第二个 if 并
重定向
客户端到相关的移动页面。
否则,将为标准浏览器加载门户。