도래울

[iOS] User-Agent 기본 값 바꾸기 본문

개발/iOS

[iOS] User-Agent 기본 값 바꾸기

도래울 2017. 2. 15. 09:20

  개발하면서, UIWebView를 통해 방문하는 사이트에 대해 User-Agent 값을 다른 것으로 바꿔서 보내고 싶은 경우가 있었다.


- 방문하는 사이트를 모바일 버전으로만 보고 싶을 때.

- 아이패드지만 모바일 버전으로 방문하고 싶을 때.

- 아이폰이지만 PC 버전으로 방문하고 싶을 때.


  처음에는 UIWebView의 'loadRequest:'로 페이지를 요청할 때 User-Agent 값을 수정한 NSMutableURLRequest를 사용하면 될 것이라 생각하고 사용해 보았으나 'loadRequest:'에 별도로 User-Agent를 다시 기본값으로 돌려주는지 원하는 데로 동작하지 못했다.


  다른 방도가 없나 싶어 구글링을 해보니 프로그램이 시작되는 시점에서 User-Agent의 기본값이 설정되고 이후에는 수정할 수 없다고 한다. 그래서 추가 구글링 통해 아래와 같이 AppDelegate(NSObject)의 initialize를 구현하였다.


// AppDelegate.m

+ (void)initialize

{

      NSDictionary *dic = @{@"UserAgent" : [NSString stringWithFormat:@"UserAgent 값"]};

      [[NSUserDefaults standardUserDefaultsregisterDefaults:dic];

}


  주로 사용한 User-Agent는 아래와 같고 $ 부분만 'iPad' 또는 'iPhone'으로 매핑하여 원하는 데로 모바일/PC 모드로 접근할 수 있었다.


Mozilla/5.0 ($; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (XHTML, like Gecko) Version/5.1 Mobile/9B176


접기

  User-Agent 값은 Safari의 상단 메뉴에서 '개발자용 > 사용자 에이전트'에 들어가면 찾을 수 있다. (타 브라우저도 비슷한 식이다)


접기


User-Agent 값 얻기 2



  이대로 끝내자니 뭔가 아쉽지 않은가? User-Agent를 NSUserDefaults의 'registerDefaults:'으로 수정하였는데 다른 값도 수정할 수 있을 것 같지 않나?

  그래서 한 번 기본값들이 뭐 뭐 있는지 로그를 찍어봤다.


// AppDelegate.m

+ (void)initialize

{

      NSLog(@"%@"[[NSUserDefaults standardUserDefaultsdictionaryRepresentation]);

}


  결과는 아래와 같았다. (XCode5, iPhone 7.0.3 기준)


결과보기



  키보드 설정이나 운영체제 지원언어 목록, 앱 기본 언어 등 값들이 보인다.

  UIWebView를 사용 중인 경우에는 WebKit 설정 값을 찾아볼 수 있었다. (XCode5, iPhone 7.0.3 기준)


결과보기



  호오! 점점 흥미로워진다. 그러면, User-Agent 값을 수정하듯이 수정할 수 있을까?

  만만해 보이는 'WebKitJavaScriptEnabled' 값을 NO로 바꿔보자.


// AppDelegate.m

+ (void)initialize

{

      NSDictionary *dic = @{@"WebKitJavaScriptEnabled" : @NO};

      [[NSUserDefaults standardUserDefaultsregisterDefaults:dic];

}



  실행해보니 자바스크립트가 정상적으로 동작한다(?).

  의문이 들어 값이 잘 바뀌는지 확인하기 위해 UIWebViewDelegate에서 값을 확인했고 확인 결과 요청되는 페이지마다 WebKit 관련 설정들이 변하는 것을 확인할 수 있었다.

  그래서 요청이 시작되기 전에 WebKitJavaScriptEnabled 값을 NO로 바꿔 보기로 했다.


// ViewController.m

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

{

      NSDictionary *dic = @{@"WebKitJavaScriptEnabled" : @NO};

      [[NSUserDefaults standardUserDefaultsregisterDefaults:dic];


      return YES;

}



  이렇게 하니 네이버(www.naver.com)를 로드했을때 페이지 내 자바스크립트가 실행되지 못하는 것을 확인할 수 있었다.


  그 외 다른 값들도 시도해본 결과 로드되는 페이지에 상관없이 처음에 초기화된 값을 유지하는 것도 있었고 페이지 로드할 때마다 새롭게 갱신되는 것도 있었다. 나중에 재미진 일을 해볼 수 있겠다 :)


출처 : http://padgom.tistory.com/entry/UserAgent-%EA%B8%B0%EB%B3%B8-%EA%B0%92-%EB%B0%94%EA%BE%B8%EA%B8%B0


'개발 > iOS' 카테고리의 다른 글

맥(xcode)에서 SVN, GIT 연결 끊기  (0) 2017.06.15
hide suggestion list above keyboard  (0) 2017.02.17
Swift performSelector: withObject: afterDelay  (0) 2017.02.07
iOS BitCode 란?  (0) 2017.02.01
iOS ATS(App Transport Security) 란?  (0) 2017.02.01
Comments