2013-02-01 37 views
14

服務器檢測Android的明顯方法是從User-Agent HTTP標頭中搜索「Android」字符串。但是 - 我有抱怨說這在某些設備上不起作用(例如在我的HTC Evo中),但它們不會被檢測爲Android。 whatsmyuseragent.com爲我的HTC Evo 3D網頁瀏覽器提供:Mozilla/5.0(X11; Linux x86_64)AppleWebKit/534.24(KHTML,如Gecko)Chrome/11.0.696.34 Safari/534.24。沒有Android字符串或版本。它可能是設備上的一個安全軟件,它可以改變它,或HTC特定的問題,但不確定。 Chrome瀏覽器/ 18.0 AppleWebKit/535.19(KHTML,像Gecko)Chrome/18.0顯然,Android Chrome瀏覽器在同一設備上具有另一個更好的UA:Mozilla/5.0(Linux; Android 4.0.3; HTC EVO 3D X515m Build/IML74K) 1025.166 Mobile Safari/535.19,但我不能只希望eg QR碼閱讀器應用程序打開Chrome瀏覽器,而不是內置的Android瀏覽器,它具有無效的UA。在Web服務器中無法檢測到Android

是否有一個很好的技巧(JavaScript調用?)來跨設備和瀏覽器可靠地檢測Android?

編輯: 看起來像銀河S III,相同的用戶代理字符串同一個問題:Android Phone Browser Detection

+0

它沒有解決您的問題,但也許你可以尋找與用戶代理一起的瀏覽器解析? – RMalke

+1

也許它會給出額外的信息,但我想使用一些現成的或多或少的防彈解決方案,而不是使用不同的用戶ID /分辨率/一些另外的頭組合來開始管理設備數據庫。 – JaakL

回答

8

看起來我在Android Web瀏覽器設置中選擇了「顯示桌面版本」。一旦關閉,用戶代理就在Android內部。這似乎是ICS的一個特點,HTC不會被責怪:谷歌爲我提供的錯誤的用戶代理看到它發生在許多不同的手機上。

2

對於這個特殊的任務,我可能會建議使用wurfl服務器端。

你可以做一些非常簡單的檢測機器人:

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER); 
if ($requestingDevice->getCapability("device_os") == "Android") { 
    //the magic 
} 
+1

如果wurfl使用比User-Agent更好的東西,我真的很懷疑,所以它不可能工作。我用t.wurfl進行了測試。com並沒有透露device_os – JaakL

+0

我明白你的意思 - 我的研究表明,如果'定位'的定義和'ontouchstart'一樣 - 它不是來自用戶代理的iphone,blackberry或windows phone,它可以假設它可能是一個機器人 - 但不幸的是,如果他們沒有發送適當的UA,那麼它就像你可以得到的一樣準確:( –

0

我從你的問題,瞭解什麼是你的設備上獲取用戶代理和一些設備拒絕給那個的。所以我假設你在android設備上有一個應用程序,它通過一些webservice調用你的服務器,並且你試圖提取用戶代理。還等什麼解決方案,我可以在這裏看到在Android應用程序中添加用戶代理參數從代碼,所以它會在HTTP標頭髮布,並從服務器,你可以提取,可以輕鬆地

HttpClient httpclient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android"); 

我有同樣的問題,但我以這種方式解決。

+0

他在問題中多次聲明他想在瀏覽器中檢測Android設備,而不是耗費一個網絡服務 – crazylpfan

+0

然後用webview編寫一個小實用程序,它會調用android原生版本,確認它是android設備Android.os.Build.VERSION。 –

+1

用例實際上是用於QR碼下載的應用程序:原始問題是QR瀏覽器沒有正確檢測到,任何額外的實用工具都是毫無意義的 – JaakL

1

檢查用戶代理一直是可靠地確定用戶設備的推薦方式(至少默認設置)。也許你可以嘗試讓你的搜索更健壯? Mozilla建議搜索字符串而不是「Mobi」

+2

我給了一個用戶代理的樣本:「Mozilla/5.0(X11; Linux x86_64)AppleWebKit/534.24(KHTML,像Gecko)Chrome/11.0.696.34 Safari/534.24」。沒有Mobi,Android等 – JaakL