A colossal Dreamer: GR鐵塔-天生我材

[Objective-C] 철탑만 몰랐던 iOS #3 - (UIWebView UserAgent User-Agent 조작하기) 본문

Development/아이폰

[Objective-C] 철탑만 몰랐던 iOS #3 - (UIWebView UserAgent User-Agent 조작하기)

江多林 2014. 5. 21. 23:30

iOS UIWebView 의 UserAgent 조작하기. 
 NSURLRequest 의 HTTPHeaderFields 만 손 보면 될 줄 알았는데... 
 loadRequest 하고, shouldStartLoadWithRequest 에 들어오면 다른 값으로... 

Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D167

해결책 

[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent": @"APP/0.0.4"}];

단 한 줄로 해결됩니다. OTL 

여기서 동료의 이슈제기 
일반적인 WebSite 에서 iPhone UserAgent 를 참조하여 동작한다면, 오동작을 유발할 것이다.!! 
그럼 UIWebView의 기본 UserAgent 값은 어떻게 얻을 것인가.? 
해결책 

UIWebView *webView = [[UIWebView alloc] init];
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];


최종코드 

UIWebView *webView = [[UIWebView alloc] init];
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
userAgent = [userAgent stringByAppendingString:@"APP/0.0.4"];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent": userAgent}];



User-Agent 는 아래 URL 에 기술되어 있다.

Product/version 형식을 갖춰야 하고, Product의 수준 순서대로 기술하도록 제안되어 있으므로, iOS 앱의 경우에 "모질라 애플웹킷 모발 {앱}" 순서를 맞춰줘야할 듯.

그리고, (comments) 안에 기술되는 부분은 해당 User-Agent의 Comments(세부기술?) 이고,

comments 기술에 대한 명시적인 정의가 없어서 그런지 facebook 앱에서는 [comments] 를 사용한다고 한다.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 14.43 User-Agent