??對于很多初步接觸webview的朋友來說,不管你是自己代碼中寫webview,還是接入第三方sdk,經(jīng)常會在需求中看到這么一句話:
如APP使用內(nèi)置瀏覽器需在 webview中設(shè)置獨立 UA 標(biāo)識痪寻,并告知平臺聯(lián)系人
??那么,到底什么是UA?UA在代碼里又是怎么設(shè)置的?
1.什么是UA?
??UA的全稱是User-Agent,中文名為用戶代理填物,是Http請求協(xié)議中請求頭的一部分,這里的請求包括GET請求和POST請求撇叁。
??下面我們來看,UA到底是由什么組成的?他的組成部分是什么?
??先說結(jié)論,絕大多數(shù)網(wǎng)頁瀏覽器使用的User-Agent值如下:
Mozilla/[version]([system and browser information])[platform]([platform details])[extensions]得湘。
??例如,iPad上的Safari使用的UA如下:
Mozilla/5.0(iPad; U; CPU OS 3_2_1 like Mac OS X; en-us)AppleWebKit/531.21.10(KHTML, like Gecko)Mobile/7B405
??這個字符串的組成如下:
字符串 | 說明 |
---|---|
Mozilla/5.0 | 偽裝成Mozilla排版引擎的瀏覽器以達(dá)到兼容 |
(iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) | 瀏覽器所運行的系統(tǒng)的詳細(xì)信息 |
AppleWebKit/531.21.10 | 瀏覽器所使用的平臺 |
(KHTML, like Gecko) | 瀏覽器平臺的細(xì)節(jié) |
Mobile/7B405 | 被瀏覽器用于指示特定的直接由瀏覽器提供或者通過第三方提供的可用的增強(qiáng)功能沟蔑。這方面的一個實例是Microsoft Live Meeting(它注冊了一個擴(kuò)展以使Live Meeting服務(wù)知道該軟件是否已經(jīng)安裝上待秃,這意味著它可以為加入會議提供一個簡化的體驗嘹吨。) |
2.UA有什么作用遗遵?
1) 在手機(jī)端/pc端,可以通過UA來判斷不同的設(shè)備,從而可以顯示不同的排版萍恕,進(jìn)而給用戶提供更好的體驗
??例如:用手機(jī)訪問百度和pc端訪問的頁面排版是不一樣的,這些就是百度根據(jù)訪問者的UA來判斷的瓮恭。
2) 通過UA雄坪,進(jìn)行信息統(tǒng)計,主要是用于渠道統(tǒng)計
??例如:在之前的工作中碰到過類似情況厘熟,在app中接入廣告的sdk屯蹦,當(dāng)用戶點擊廣告圖片時就需要通過webview進(jìn)行詳細(xì)廣告頁面的跳轉(zhuǎn),這時候就需要在webview中進(jìn)行UA的自定義設(shè)置了,這樣后臺廣告平臺的人員就可以通過UA判斷是哪個客戶端(安卓/蘋果),哪個瀏覽器的客戶,進(jìn)而進(jìn)行客戶端的統(tǒng)計。
3.android中的UA長什么樣?
??例子1:
Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
??因為這個UA字符串中沒有mobile绳姨,猜測可能是平板,驗證發(fā)現(xiàn)是摩托羅拉的XOOM平板登澜。
??例子2:
Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
??這個UA包含了mobile和android,所以這臺應(yīng)該是Nexus One手機(jī)。
??做個總結(jié),大家可以參照下圖來對應(yīng)查找判斷android設(shè)備:
4.android中怎么獲取和設(shè)置UA?
1. 獲取UA
??獲取UA的方式非常簡單,只要在webview控件的settings上獲取即可:
WebSettings settings = mWebView.getSettings();
String userAgentString = settings.getUserAgentString();
2. 自定義設(shè)置UA
設(shè)置UA一般有兩種方法:
1)尾部添加字段
String ua = mWebView.getSettings().getUserAgentString();//原來獲取的UA
mWebView.getSettings().setUserAgentString(ua+ "自定義內(nèi)容");
??自定義內(nèi)容可以一般填入客戶端或appversion ,
??例如 +" \ platform: android; \appversion: 2.1.3 ;"
2)替換原來的UA
String ua = mWebView.getSettings().getUserAgentString();//原來獲取的UA
mWebView.getSettings().setUserAgentString(ua.replace("Android","HFWSH_USER Android"));
??這樣寫,可以將原來的ua替換為新的ua飘庄。
參考文章: