【问题标题】:Which other mobile browser user agents pretend to be Android and/or iPhone?还有哪些其他移动浏览器用户代理伪装成 Android 和/或 iPhone?
【发布时间】:2015-07-28 12:36:16
【问题描述】:

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

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

直到最近,当一个 Windows Phone 8.1 用户出现时它工作正常 - IEMobile 11 浏览器具有此用户代理:

Mozilla/5.0 (Mobile; 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, 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;
}
?>

【问题讨论】:

    标签: android ios mobile windows-phone-8.1 user-agent


    【解决方案1】:

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

    Mozilla/5.0 (Linux; Tizen 2.2; SAMSUNG 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, like 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, like Gecko) Chrome/34.0.17

    我还发现了this list,它可能很有用,但手动操作很费力:)

    【讨论】:

      【解决方案2】:

      我们在门户中执行完全相同的操作(如果检测到移动设备,则将用户重定向到移动页面)。
      我检测到 WP 8.1 用户代理字符串存在一些问题。 对于带有 IE 的 WP,设置为通过 Internet 移动,我还收到了“有意义的”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, like Gecko) Mobile Safari/537

      其中,如果 IE 移动设置为“桌面”或通过 Intranet 调用门户,我会收到:

      Mozilla/5.0(Windows NT 6.2;ARM;Trident/7.0;Touch;rv:11.0; WP桌面; Lumia 930) 像壁虎

      所以.. 效果是,我们的门户网站向 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 并将客户端重定向到相关的移动页面。
      否则为标准浏览器加载门户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-16
        • 2020-12-11
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        相关资源
        最近更新 更多