SDK 삽입
웹뷰를 통해 서비스를 제공하는 하이브리드앱은 기본적으로 Android 및 iOS 앱에 종속됩니다. 따라서 기본적으로 Android 및 iOS SDK가 해당 앱에 설치된 상태에서 구글 플레이스토어와 애플 앱스토어에 배포되어야 정확한 웹뷰 데이터 측정이 가능합니다.
필수 설정이란 SDK가 동작하기 위해서 반드시 앱에 추가되어야 하는 최소한의 설정을 말합니다. 하이브리드앱 환경에서의 필수 설정이란,
- 1.Android 및 iOS용 앱 SDK가 설치
- 2.웹뷰의 각 페이지에 트래킹 스크립트 삽입
이 완료되는 것을 의미합니다.
HibridApp 으로 개발된 모바일 앱에서, WebView 에 로딩되는 페이지가 일반 데스크탑 브라우저 환경에서도 동일하게 사용하는 경우가 있습니다.
이러한 경우, 해당 웹 페이지에는
- 1.웹 사이트 분석을 위한 SDK 와 분석 코드 셋트와
- 2.모바일 앱 분석을 위한 분석 코드 셋트가 동시에 존재하게 됩니다.
이때 사용자가 모바일 앱으로 접근하여, 해당 페이지를 웹뷰에서 렌더링 시키게되면, 해당 페이지에 적용된 웹 사이트 분석 SDK와 분석 코드 셋트가 실행되어, 데이터가 더블 카운팅되는 현상이 나타날 수 있습니다.
이러한 현상을 방지하기 위한 방법으로 아래의 내용을 참고하시기 바랍니다.
- 앱에서 웹뷰에 페이지를 렌더링 하기 전에, 아래의 코드 예시와 같이 웹뷰의 navigator.userAgent 문자열에 "RW2SDK" 문자열을 추가합니다.
Android
iOS
StringBuilder _userAgent = new StringBuilder();
_userAgent.append(webView.getSettings().getUserAgentString());
_userAgent.append("RW2SDK");
webView.getSettings().setUserAgentString(_userAgent.toString());
webView.evaluateJavaScript("navigator.userAgent", completionHandler: { result, error in
if error != nil {
// error : Error occured to get userAgent
return
}
if let unwrappedUserAgent = result as? String {
self.mainWebView.customUserAgent = "\(unwrappedUserAgent) RW2SDK"
} else {
// error : Failed to get userAgent
}
})
- 웹 사이트 분석 SDK는 아래와 같이 navigator.userAgent 에 "RW2SDK" 문자열이 존재할 경우, SDK의 초기화 요청을 무시하게 되며, 아래와 같은 console 메시지를 출력하도록 구현되어 있습니다.
export class WDOTInitialization {
/** * Website SDK Initialzation ***/
static setConfig(config){
let _ua = window.navigator.userAgent;
if ( _ua.indexOf("RW2SDK") >= 0 ){
console.log("WDOT is disabled with RW Native SDK. ( WDOTInitialization ) ");
}
else{
window.DOP_SDK_CONF = config;
console.log("Set window.DOP_SDK_CONF ", window.DOP_SDK_CONF );
}
}
.... 중략 ...
}
- 위와 같이 모바일 앱에서 사용하는 웹뷰의 userAgent 에 예약된 문자열 (RW2SDK) 를 추가하여, 위의 현상을 방지할 수 있습니다.

모바일 웹뷰에서 로딩된 페이지에 웹 사이트 분석 SDK가 존재하지만, 초기화 되지 않은 경우 출력 메시지
- 추가적으로, 웹 페이지에 적용되는 분석 코드에 대하여 DOT, WDOT 객체에 대한 Null 체크는 반드시 추가하도록 합니다.
Website SDK
Mobile SDK
if (typeof WDOT != 'undefined') {
WDOT.logEvent(event);
}
if (typeof DOT != 'undefined') {
DOT.logEvent(event);
}
Last modified 27d ago