还有哪些移动浏览器用户代理冒充 Android 和/或 iPhone?

问题描述 投票:0回答:3

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

  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;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;
}
?>
android ios mobile windows-phone-8.1 user-agent
3个回答
2
投票

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

我还发现了这个列表,它可能有用,但手动查看很费力:)


0
投票

我们在门户中执行完全相同的操作(如果检测到移动设备,则将用户重定向到移动页面)。
我检测到 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 并

重定向
客户端到相关的移动页面。 否则,将为标准浏览器加载门户。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.