iOS 正確的修改User-Agent

前言

在開發(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)干貨。

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

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