首次听到user-agent的概念,及时来恶补一下~
如使用场景在WebView内,即可关注下我那些关于WebView的回忆 ~ 包含入门使用、优化加载样式、监听加载状态、各场景后退键处理、俩端交互流程、header、user-agent传值、交互常见问题、较全API整合
Baby当你老了,我们都在干嘛呢?
user-agent介绍
User-Agent简称UA,中文名为用户代理,是Http请求协议中请求头的一部分,这里的请求包括GET请求和POST请求
user-agent作用
-
在手机端/pc端,可以通过user-agent来判断不同的设备,从而可以显示不同的排版,进而给用户提供更好的体验
例如:用手机访问百度和pc端访问的页面排版是不一样的,这些就是百度根据访问者的UA来判断的 -
通过user-agent,进行信息统计,主要是用于渠道统计
例如:在之前的工作中碰到过类似情况,在app中接入广告的sdk,当用户点击广告图片时就需要通过webview进行详细广告页面的跳转,这时候就需要在webview中进行UA的自定义设置了,这样后台广告平台的人员就可以通过UA判断是哪个客户端(安卓/苹果),哪个浏览器的客户,进而进行客户端的统计
常规网络请求
一般移动端的网络请求,在头部都默认添加了user-agent,如果我们要在网络请求中修改user-agent的参数,那么我们就需要在自我封装的网络框架基层内重写user-agent!
下面我们以okhttp、Retrofit为例 ~
okhttp初始化
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.removeHeader("User-Agent")//移除旧的
//WebSettings.getDefaultUserAgent(mContext) 是获取原来的User-Agent
.addHeader("User-Agent",“上面得到的User-Agent” )
.build();
return chain.proceed(request);
}
})
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES)
.readTimeout(2, TimeUnit.MINUTES)
.build();
Retrofit初始化
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.removeHeader("User-Agent")//移除旧的
.addHeader("User-Agent", WebSettings.getDefaultUserAgent(mContext))
.build();
return chain.proceed(request);
}
})
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES)
.readTimeout(2, TimeUnit.MINUTES)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("/BaseUrl")
.client(okHttpClient)//采用okhttpclient
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
WebView网络请求
user-agent的获取和设置
- webView获取user-agent
WebView webView = findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
String userAgentString = webSettings.getUserAgentString();
LogUtil.e("userAgentString=",userAgentString);
- 重设user-agent
场景1.尾部添加字段
webSettings.setUserAgentString(userAgentString + "自定义内容");
场景2.替换原来的user-agent (可选自己喜欢的方式)
//replace替换方式
webSettingssetUserAgentString(userAgentString .replace("Android","HFWSH_USER Android"));
//覆盖重设方式
webSettings.setUserAgentString("自定义内容");
user-agent数据分析
- user-agent 完整数据
Mozilla/5.0 (Linux; Android 8.1.0; PACM00 Build/O11019; wv) AppleWebKit/537.36
(KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36
- user-agent → 四个分段 → 参数介绍
1)Mozilla/5.0 :表示兼容Mozilla, 几乎所有的浏览器都有这个字符;
2) (Linux; Android 8.1.0; PACM00 Build/O11019; wv): 表示设备的操作系统版本,以及CPU信息;
3)AppleWebKit/537.36 (KHTML, like Gecko):表示浏览器的内核;
4) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36: 表示浏览器的版本号。