初探android中webview的UA(User-Agent)

??對(duì)于很多初步接觸webview的朋友來說,不管你是自己代碼中寫webview,還是接入第三方sdk,經(jīng)常會(huì)在需求中看到這么一句話:

如APP使用內(nèi)置瀏覽器需在 webview中設(shè)置獨(dú)立 UA 標(biāo)識(shí),并告知平臺(tái)聯(lián)系人

??那么,到底什么是UA?UA在代碼里又是怎么設(shè)置的?

1.什么是UA?

??UA的全稱是User-Agent,中文名為用戶代理,是Http請(qǐng)求協(xié)議中請(qǐng)求頭的一部分,這里的請(qǐng)求包括GET請(qǐng)求和POST請(qǐng)求。
??下面我們來看,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

??這個(gè)字符串的組成如下:

字符串 說明
Mozilla/5.0 偽裝成Mozilla排版引擎的瀏覽器以達(dá)到兼容
(iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) 瀏覽器所運(yùn)行的系統(tǒng)的詳細(xì)信息
AppleWebKit/531.21.10 瀏覽器所使用的平臺(tái)
(KHTML, like Gecko) 瀏覽器平臺(tái)的細(xì)節(jié)
Mobile/7B405 被瀏覽器用于指示特定的直接由瀏覽器提供或者通過第三方提供的可用的增強(qiáng)功能。這方面的一個(gè)實(shí)例是Microsoft Live Meeting(它注冊(cè)了一個(gè)擴(kuò)展以使Live Meeting服務(wù)知道該軟件是否已經(jīng)安裝上,這意味著它可以為加入會(huì)議提供一個(gè)簡(jiǎn)化的體驗(yàn)。)

2.UA有什么作用?

1) 在手機(jī)端/pc端,可以通過UA來判斷不同的設(shè)備,從而可以顯示不同的排版,進(jìn)而給用戶提供更好的體驗(yàn)
??例如:用手機(jī)訪問百度和pc端訪問的頁面排版是不一樣的,這些就是百度根據(jù)訪問者的UA來判斷的。

2) 通過UA,進(jìn)行信息統(tǒng)計(jì),主要是用于渠道統(tǒng)計(jì)
??例如:在之前的工作中碰到過類似情況,在app中接入廣告的sdk,當(dāng)用戶點(diǎn)擊廣告圖片時(shí)就需要通過webview進(jìn)行詳細(xì)廣告頁面的跳轉(zhuǎn),這時(shí)候就需要在webview中進(jìn)行UA的自定義設(shè)置了,這樣后臺(tái)廣告平臺(tái)的人員就可以通過UA判斷是哪個(gè)客戶端(安卓/蘋果),哪個(gè)瀏覽器的客戶,進(jìn)而進(jìn)行客戶端的統(tǒng)計(jì)。

3.android中的UA長(zhǎng)什么樣?

??例子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

??因?yàn)檫@個(gè)UA字符串中沒有mobile,猜測(cè)可能是平板,驗(yàn)證發(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

??這個(gè)UA包含了mobile和android,所以這臺(tái)應(yīng)該是Nexus One手機(jī)。

??做個(gè)總結(jié),大家可以參照下圖來對(duì)應(yīng)查找判斷android設(shè)備:


android_UA.jpeg

4.android中怎么獲取和設(shè)置UA?

1. 獲取UA
??獲取UA的方式非常簡(jiǎn)單,只要在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。


參考文章:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、基礎(chǔ)知識(shí)篇:Http Header之User-AgentUser Agent中文名為用戶代理,是Http協(xié)議中...
    iPhone閱讀 16,300評(píng)論 0 13
  • 一、基礎(chǔ)知識(shí)篇:Http Header之User-AgentUser Agent中文名為用戶代理,是Http協(xié)議中...
    大牧莫邪閱讀 66,600評(píng)論 3 21
  • 瀏覽器User-Agent的詳細(xì)信息 PC端: safari5.1–MAC User-Agent:Mozilla/...
    b2e16cc43137閱讀 781評(píng)論 0 0
  • 在開發(fā)時(shí)我們可能遇到這樣一個(gè)問題:如何使WebView打開網(wǎng)頁時(shí)以平板或者電腦模式打開,而不是以手機(jī)模式。其實(shí)We...
    coder小黃人閱讀 6,119評(píng)論 0 2
  • 所有的黑暗都會(huì)天明 所有的不快都會(huì)過去 絕望不會(huì)是遙遙無期 頭破血流的故事 無語凝成詩 累了就睡大覺 醒來就加油搞...
    復(fù)興火炬書友會(huì)閱讀 200評(píng)論 0 0

友情鏈接更多精彩內(nèi)容