2015-07-28 113 views
1

我已經寫了檢測客戶端的用戶代理服務器端腳本,然後做的三兩件事之一:哪些其他移動瀏覽器用戶代理假裝爲Android和/或iPhone?

  1. 如果是iOS設備,並將它們發送到蘋果App Store
  2. 如果它是一個機器人,並將它們發送到谷歌播放
  3. 否則,將其發送到我們的網站

這是工作正常,直到最近,當了Windows Phone 8.1的用戶來了 - 對此,有這個用戶代理IEMobile 11瀏覽器:

Mozilla/5.0(Mobile; Windows Phone 8.1; Android 4.0;臂;三叉戟/ 7.0;觸摸; RV:11.0; IEMobile/11.0;諾基亞;的Lumia 630),如iPhone OS 7_0_3的Mac OS X爲AppleWebKit/537(KHTML,例如Gecko)移動Safari瀏覽器/ 537

我現在所擁有的初始if條件照顧更新了我的腳本(見下文)這個Windows Phone 8.1 IEMobile 11瀏覽器,但我想知道是否有人知道在用戶中還包括「Android」或「iPhone」,「iPad」等的任何其他常見移動瀏覽器(非iOS和非Android)代理字符串(所以我可以相應地更新我的腳本)?

<?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; 
} 
?> 

回答

2

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的Android組建/ 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

我還發現this list這可能是有用的,但可以通過手工來實現:)

0

我們在我們的門戶網站中完全一樣(如果檢測到移動設備,將用戶重定向到移動頁面)。
我檢測到WP 8.1用戶代理字符串存在一些問題。 對於IE WP,集移動在互聯網,我也收到了 「有意義」 的UAS:

的Mozilla/5.0(手機,Windows手機8.1,Android 4.0的; ARM;三叉戟/ 7.0; Touch; rv:11.0; IEMobile/11。0;諾基亞;的Lumia 930)如iPhone OS 7_0_3 的Mac OS X爲AppleWebKit/537(KHTML,例如Gecko)移動Safari/537

。由此,如果IE移動被設定爲 「桌面」 或門戶被稱爲在內聯網,我收到:

的Mozilla/5.0(Windows NT的6.2; ARM;三叉戟/ 7.0;觸摸; RV:11.0; WPDesktop;的Lumia 930)像壁虎

所以..效果是,我們的門戶網站已經展示將移動頁面修改爲iOS,而不是將移動頁面修改爲WP。 解決方法是查詢UAS的「Windows Phone」,然後在之前查詢iPhone。 這似乎是MS試圖通過這種方式被檢測爲移動設備(如果一個頁面只查詢iOS和Android設備),那麼不好。

所以我的(實際)的代碼(VB.net)到如果:

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 

注:在返回位置OD的字符串(如果它被發現,否則爲0)。
然後,如果發生第二個,並且將客戶端重定向到到相關的移動頁面,如果設置了「iOS」或「Android」或「WP」。
否則,將爲加載標準瀏覽器的門戶。

相關問題