前言
在開發(fā)項目當(dāng)中,由于有第三方SDK的需求又或者是項目服務(wù)端要求需要更改系統(tǒng)User-Agent的情況,應(yīng)用中,對于一些H5需要使用添加個性化信息后的User-Agent,而另一些H5不希望使用更改后的User-Agent,所以本文將從H5應(yīng)用中簡單介紹一下。
通過本文你將了解到:
1.什么是User-Agent
2.如何獲取User-Agent
3.如何添加自定義信息和修改User-Agent
4.項目中使用User-Agent總結(jié)
1.什么是User-Agent
User-Agent中文名為用戶代理,簡稱UA,它是一個特殊的字符串頭,是的服務(wù)器能夠識別客戶使用的操作系統(tǒng)及版本,CPU類型,瀏覽器及版本,瀏覽器語言等。
這里我貼一下我自己手機的User-Agent:
Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
2.如何獲取User-Agent
蘋果即將在2020年12月31號全面禁止使用UIWebView,所以本文僅對UIWebView獲取User-Agent做簡單介紹.
2.1 UIWebVeiw獲取
UIWebView為同步的方式,可以直接獲取到User-Agent。
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
self.userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"] ?:@"";
2.2WKWebView獲取
WKWebView獲取User-Agent為異步方式,所以如果需要在應(yīng)用啟動就要使用User-Agent的話,需要做好相應(yīng)的處理。
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
if (@available(iOS 13.0, *)) {
config.defaultWebpagePreferences.preferredContentMode = WKContentModeMobile;
}
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
[webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable response, NSError *_Nullable error) {
self.userAgent = (NSString *)response;
}];
3.如何添加自定義信息和修改User-Agent
獲取到系統(tǒng)的User-Agent(通過上述方法獲取到的UA都是系統(tǒng)最新的,假如在某一個刻修改過,這里獲取到的也是修改過的UA,除非重新啟動程序),進(jìn)行字符串操作添加上自定義信息然后重新寫進(jìn)系統(tǒng),這樣就達(dá)到了更改默認(rèn)UA的目的。
- (NSString *)addExtraMsgForUserAgent:(NSString *)userAgent{
NSString *userAgent_old = self.userAgent;
NSString *userAgent_new = userAgent_old;
if ([userAgent_old rangeOfString:@"app_version"].location == NSNotFound) {
userAgent_new = [userAgent_old stringByAppendingFormat:@" app_version/iOS/%@",[NSString getAppVersion]];
}
return userAgent_new;
}
3.1修改全局系統(tǒng)User-Agent
修改全局系統(tǒng)User-Agent的生命周期會隨著程序的生命周期,程序一旦殺死更改的User-Agent也會隨即消失,如果希望保持更改User-Agent,則需要在每次應(yīng)用啟動時重新更改系統(tǒng)User-Agent
- (void)updateSystemUserAgent:(NSString *)userAgent{
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":userAgent}];
[[NSUserDefaults standardUserDefaults] synchronize];
}
3.2修改局部User-Agent
修改局部User-Agent的生命周期僅限在當(dāng)前的WebView的生命周期內(nèi),一旦WebView銷毀,更改的User-Agent信息就會隨機消失。
- (void)updateCustomUserAgent:(NSString *)userAgent{
[self.wkWebView setCustomUserAgent:userAgent];
}
4.項目中使用User-Agent總結(jié)
由于蘋果即將全面廢棄UIWebView,以下總結(jié)僅針對WKWebView。
1.WKWebView獲取系統(tǒng)UA為異步方式,如果遇到多個SDK以及App自己修改UA,需要有序進(jìn)行修改,并且在之前更新過的UA中添加新的信息,而不是直接更改。
2.當(dāng)系統(tǒng)僅需修改某一個h5頁面的UA時,修改UA一定要在WKWebView初始化后,在發(fā)出請求前設(shè)置好,否則會導(dǎo)致修改失敗。
寫在最后
頭一次寫文章,就問你簡單干練不,少點啰嗦,多點干貨,是我們不懈努力奮斗的目標(biāo),同時如有疏漏或錯誤,歡迎指正,也歡迎大家點贊鼓勵,我將會繼續(xù)分享更多iOS 開發(fā)相關(guān)干貨。