淺談iOS中的userAgent

User-Agent(用戶代理)字符串是Web瀏覽器用于聲明自身型號版本并隨HTTP請求發(fā)送給Web服務(wù)器的字符串则奥,在Web服務(wù)器上可以獲取到該字符串。

在公司產(chǎn)品中狭园,在userAgent中增加了NetType字段读处,用于標(biāo)識客戶端當(dāng)前的網(wǎng)絡(luò)環(huán)境。

  • NetType/WIFI
  • NetType/3G

web服務(wù)器端根據(jù)NetType類型加載不同分辨率的商品圖片唱矛。我們只有兩種罚舱,WIFI下高清圖,非WIFI低分辨率圖绎谦。

<h3>獲取WebView的userAgent</h3>

iOS客戶端中獲取webView的userAgent的方法:

NSMutableString *userAgent = [NSMutableString stringWithString:[[UIWebView new] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]];

根據(jù)需要添加不同的標(biāo)識到新的userAgent中,這里添加一個WMall標(biāo)識管闷。

NSString *newUagent = [NSString stringWithFormat:@"%@ WMall/%@", userAgent, [SystemInfo appShortVersion]];
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newUagent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];

newUagent 為Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E230 WMall/3.0

<h3>根據(jù)網(wǎng)絡(luò)類型設(shè)置不同的NetType標(biāo)識</h3>

iOS中判斷網(wǎng)絡(luò)狀態(tài)一般用AFNetWorking中的方法:
在appDelegate的application didFinishLaunchingWithOptions方法中啟動網(wǎng)絡(luò)狀態(tài)監(jiān)聽:

[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];

然后在基類BaseViewController中監(jiān)聽網(wǎng)絡(luò)更新通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkReachabilityStatusDidChange:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
- (void)networkReachabilityStatusDidChange:(NSNotification *)notify{
    NSLog(@"網(wǎng)絡(luò)變化通知:%@",notify.userInfo[AFNetworkingReachabilityNotificationStatusItem]);
    AFNetworkReachabilityStatus status = [notify.userInfo[AFNetworkingReachabilityNotificationStatusItem] integerValue];
    NSString *net = nil;
    switch (status) {
        case AFNetworkReachabilityStatusNotReachable:
            net = @"無網(wǎng)絡(luò)";
            break;
        case AFNetworkReachabilityStatusReachableViaWiFi:
            net = @"WIFI";
            [self changeUserAgentWithType:@"WIFI"];
            break;
        case AFNetworkReachabilityStatusReachableViaWWAN:
            net = @"2G/3G/4G";
            [self changeUserAgentWithType:@"3G"];
            break;
        default:
            net = @"xxx";
            break;
    }
    [Error showError:[NSString stringWithFormat:@"當(dāng)前網(wǎng)絡(luò)狀態(tài)%@",net]];
}

注意先判斷userAgent中是否存在NetType

//更新NetType
- (void)changeUserAgentWithType:(NSString *)type{
    NSMutableString *userAgent = [NSMutableString stringWithString:[[UIWebView new] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]];
    NSString *newUagent = nil;
    NSString *temp = nil;
    if ([userAgent containsString:@"NetType"]) {
        if ([userAgent containsString:@"WIFI"]) {
            temp = @"WIFI";
        }else if([userAgent containsString:@"3G"]){
            temp = @"3G";
        }
        newUagent = [userAgent stringByReplacingOccurrencesOfString:temp withString:type];

    }else{
        newUagent = [NSString stringWithFormat:@"%@ NetType/%@", userAgent, type];
    }

    NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newUagent, @"UserAgent", nil];

    NSLog(@"new useragent:%@",newUagent);
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
}

newUagent 為Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E230 WMall/3.0 NetType/WIFI

參考
微信6.0內(nèi)嵌瀏覽器User-Agent字符串增加了NetType字段
獲取 UIWebview 的 Useragent,以及附加自定義字段到 Useragent

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窃肠,一起剝皮案震驚了整個濱河市包个,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冤留,老刑警劉巖碧囊,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纤怒,居然都是意外死亡糯而,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門泊窘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熄驼,“玉大人像寒,你說我怎么就攤上這事∶涨ⅲ” “怎么了萝映?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阐虚。 經(jīng)常有香客問我序臂,道長,這世上最難降的妖魔是什么实束? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任奥秆,我火速辦了婚禮,結(jié)果婚禮上咸灿,老公的妹妹穿的比我還像新娘构订。我一直安慰自己,他們只是感情好避矢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布悼瘾。 她就那樣靜靜地躺著,像睡著了一般审胸。 火紅的嫁衣襯著肌膚如雪亥宿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天砂沛,我揣著相機(jī)與錄音烫扼,去河邊找鬼。 笑死碍庵,一個胖子當(dāng)著我的面吹牛映企,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播静浴,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼堰氓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了苹享?” 一聲冷哼從身側(cè)響起双絮,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎富稻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體白胀,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椭赋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了或杠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哪怔。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出认境,到底是詐尸還是另有隱情胚委,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布叉信,位于F島的核電站亩冬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏硼身。R本人自食惡果不足惜硅急,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佳遂。 院中可真熱鬧营袜,春花似錦、人聲如沸丑罪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吩屹。三九已至跪另,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祟峦,已是汗流浹背罚斗。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宅楞,地道東北人针姿。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像厌衙,于是被迫代替她去往敵國和親距淫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容