首次聽到user-agent的概念,及時來惡補一下~
如使用場景在WebView內,即可關注下我那些關於WebView的回憶 ~ 包含入門使用、優化加載樣式、監聽加載狀態、各場景後退鍵處理、倆端交互流程、header、user-agent傳值、交互常見問題、較全API整合
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: 表示瀏覽器的版本號。