对于很多初步接触webview的朋友来说,不管你是自己代码中写webview,还是接入第三方sdk,经常会在需求中看到这么一句话:
如APP使用内置浏览器需在 webview中设置独立 UA 标识,并告知平台联系人
那么,到底什么是UA?UA在代码里又是怎么设置的?
1.什么是UA?
UA的全称是User-Agent,中文名为用户代理,是Http请求协议中请求头的一部分,这里的请求包括GET请求和POST请求。
下面我们来看,UA到底是由什么组成的?他的组成部分是什么?
先说结论,绝大多数网页浏览器使用的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排版引擎的浏览器以达到兼容 |
(iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) | 浏览器所运行的系统的详细信息 |
AppleWebKit/531.21.10 | 浏览器所使用的平台 |
(KHTML, like Gecko) | 浏览器平台的细节 |
Mobile/7B405 | 被浏览器用于指示特定的直接由浏览器提供或者通过第三方提供的可用的增强功能。这方面的一个实例是Microsoft Live Meeting(它注册了一个扩展以使Live Meeting服务知道该软件是否已经安装上,这意味着它可以为加入会议提供一个简化的体验。) |
2.UA有什么作用?
1) 在手机端/pc端,可以通过UA来判断不同的设备,从而可以显示不同的排版,进而给用户提供更好的体验
例如:用手机访问百度和pc端访问的页面排版是不一样的,这些就是百度根据访问者的UA来判断的。
2) 通过UA,进行信息统计,主要是用于渠道统计
例如:在之前的工作中碰到过类似情况,在app中接入广告的sdk,当用户点击广告图片时就需要通过webview进行详细广告页面的跳转,这时候就需要在webview中进行UA的自定义设置了,这样后台广告平台的人员就可以通过UA判断是哪个客户端(安卓/苹果),哪个浏览器的客户,进而进行客户端的统计。
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,猜测可能是平板,验证发现是摩托罗拉的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,所以这台应该是Nexus One手机。
做个总结,大家可以参照下图来对应查找判断android设备:
4.android中怎么获取和设置UA?
1. 获取UA
获取UA的方式非常简单,只要在webview控件的settings上获取即可:
WebSettings settings = mWebView.getSettings();
String userAgentString = settings.getUserAgentString();
2. 自定义设置UA
设置UA一般有两种方法:
1)尾部添加字段
String ua = mWebView.getSettings().getUserAgentString();//原来获取的UA
mWebView.getSettings().setUserAgentString(ua+ "自定义内容");
自定义内容可以一般填入客户端或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。
参考文章: