리액트 네이티브 - 웹뷰에 유저 에이전트 수정하기 (iOS, Android)

리액트 네이티브에서 웹뷰를 쓰려면 https://www.npmjs.com/package/react-native-webview 를 이용해서 웹뷰를 이용하게 되는데 하이브리드앱 만들 때 user agent 를 변경해서 같은 웹페이지를 열었더라도 일반 브라우저에서 열었을 때랑 하이브리드 앱에서 열었을 때랑 다르게 작동시켜야 할 때가 있다.

이럴 때 user agent 를 변경하는 방법을 찾아보던 중 https://stackoverflow.com/questions/36590207/set-user-agent-with-webview-with-react-native 를 보게 되어 사용했다.

하지만 iOS 경우 배포하려 xcode에서 Product - Archive 를 해서 진행했고 Apple Store Connect 에 해당 엡이 TestFlight 에 처리 중으로 보이고 있었지만 결국 아래 메시지와 함께 업로드 되지 못했다.

ITMS-90809: Deprecated API Usage - App updates that use UIWebView will no longer be accepted as of December 2020. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

UIwebView로는 2020년 12월부터 더 이상 허용되지 않는다는 뜻이다.

그래서 아래처럼 변경하여 만들었다.

iOS

프로젝트명.xcworkspace 실행하여 AppDelegate.m 을 열어준다.
상단에 아래 코드를 넣어 임포트 시킨다.

#import <WebKit/WebKit.h>

그리고 didFinishLaunchingWithOptions 영역 안에 아래 코드를 넣어준다.

NSString *deviceType = [UIDevice currentDevice].model;
WKWebView *webView = [WKWebView new];
NSString *oldAgent = [webView valueForKey:@"userAgent"];
NSString *newAgent = [oldAgent stringByAppendingString:@"-kwdApp-"];
newAgent = [newAgent stringByAppendingString:deviceType];
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];

어느 파일인지 어디에 써야할 지 모를까봐 직접 작업한 캡쳐 화면이다.

참고로 캡쳐 화면을 보면 알겠지만 나의 경우는 하이브리드앱으로 열 경우 기존 유저에이전트 정보에 -kwdApp- 이라는 스트링이 추가로 붙도록 한 것이다.


Android

안드로이드의 경우는 간단하다. 웹뷰를 사용한 곳에 속성으로 넣어주면 된다.

import { WebView } from 'react-native-webview';
import DeviceInfo from 'react-native-device-info';
...생략

<WebView ref={webViewRef}
                userAgent={ DeviceInfo.getUserAgent() + '-kwdApp-' }>
</WebView>

위 코드 처럼 userAgent 안에 넣고자하는 유저 에이전트 정보를 넣는다. 나의 경우는 기존 유저 에이전트 정보에 추가로 -kwdApp-을 붙이려고 react-native-device-info 의 DeviceInfo.getUserAgent() 를 이용하여 기존 유저 에이전트 정보를 가져와서 -kwdApp- 스트링을 붙이도록 설정한 것이다.

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

0 댓글
Inline Feedbacks
View all comments
TOP