# SDK 삽입

## 필수 설정&#x20;

필수 설정이란 SDK가 동작하기 위해서 반드시 앱에 추가되어야 하는 최소한의 설정을 말합니다. 하이브리드앱 환경에서의 필수 설정이란,

1. Android 및 iOS용 앱 SDK가 설치&#x20;
2. 웹뷰의 각 페이지에 트래킹 스크립트 삽입&#x20;

이 완료되는 것을 의미합니다.&#x20;

### 앱에 SDK 추가 및 초기화&#x20;

* Android 앱에 대한 SDK 설치는 [<mark style="color:blue;">여기</mark>](https://document.wisetracker.co.kr/v2-developer/sdk/android/integration)를 참고하여 설치를 완료하십시오.&#x20;
* iOS 앱에 대한 SDK 설치는 [<mark style="color:blue;">여기</mark>](https://document.wisetracker.co.kr/v2-developer/sdk/ios/integration)를 참고하여 설치를 완료하십시오.

### 웹,앱 분석을 동시에 해야 하는 경우 예외 처리

HibridApp 으로 개발된 모바일 앱에서, WebView 에 로딩되는 페이지가 일반 데스크탑 브라우저 환경에서도 동일하게 사용하는 경우가 있습니다.

이러한 경우, 해당 웹 페이지에는

1. 웹 사이트 분석을 위한 SDK 와 분석 코드 셋트와
2. 모바일 앱 분석을 위한 분석 코드 셋트가 동시에 존재하게 됩니다.

이때 사용자가 모바일 앱으로 접근하여, 해당 페이지를 웹뷰에서 렌더링 시키게되면, 해당 페이지에 적용된 웹 사이트 분석 SDK와 분석 코드 셋트가 실행되어, 데이터가 더블 카운팅되는 현상이 나타날 수 있습니다. \
이러한 현상을 방지하기 위한 방법으로 아래의 내용을 참고하시기 바랍니다.

* 앱에서 웹뷰에 페이지를 렌더링 하기 전에, 아래의 코드 예시와 같이 웹뷰의 navigator.userAgent 문자열에 "<mark style="color:red;">RW2SDK</mark>" 문자열을 추가합니다.

{% tabs %}
{% tab title="Android" %}

```java
StringBuilder _userAgent = new StringBuilder();
_userAgent.append(webView.getSettings().getUserAgentString());
_userAgent.append("RW2SDK");
webView.getSettings().setUserAgentString(_userAgent.toString());
```

{% endtab %}

{% tab title="iOS" %}

```swift
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
  }
})
```

{% endtab %}
{% endtabs %}

* 웹 사이트 분석 SDK는 아래와 같이 navigator.userAgent 에 "RW2SDK" 문자열이 존재할 경우, SDK의 초기화 요청을 무시하게 되며, 아래와 같은 console 메시지를 출력하도록 구현되어 있습니다.

```javascript
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) 를 추가하면, 사용자가 브라우저로 접속하면 웹 사이트 스크립트가 동작할 것이고, 사용자가 모바일 앱을 통해서 웹페이지를 접근하면 User-Agent때문에, 웹사이트 스크립트는 disabled 됩니다.

![모바일 웹뷰에서 로딩된 페이지에 웹 사이트 분석 SDK가 존재하지만, 초기화 되지 않은 경우 출력 메시지](https://423922975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_ZKcnBFmefw9Yfed6b-3102695190%2Fuploads%2FcpNT4CHK9aM9FgNKXPRQ%2Fimage.png?alt=media\&token=d2f09ef1-c4ef-4ecf-9a57-659eb1ef61d2)

* 웹페이지에는 WDOT 로 태깅된 웹사이트 분석코드와, DOT 로 태깅된 모바일 웹뷰 분석코드가 모두 동시에 존재 가능하며, 추가적으로 웹 페이지에 적용되는 분석 코드에 대하여 DOT, WDOT 객체에 대한 Null 체크가 반드시 이루어져야 합니다.  각각의 환경에서 사용되는 SDK Referrence Object가 다르기 때문에 다음과 같이 if 처리를 진행 해 주세요.

{% tabs %}
{% tab title="환경에 따른 SDK 호출 예외처리" %}

```javascript

// 화면분석을 위한 logScreen 처리 logScreen 처리 ( 모바일 웹뷰에서 로딩시 ) 
if (typeof DOT != 'undefined') {
  DOT.logScreen(screen);
}
else if (typeof WDOT != 'undefined') {       // ( 브라우져로 로딩시 ) 
  WDOT.onStartPage(window.WDOTParam || {});
}

// 앱내 동작 분석을 위한 logEvent
if (typeof DOT != 'undefined') {
  DOT.logEvent(event);
}
else if (typeof WDOT != 'undefined') {
  WDOT.logEvent(event);
}
```

{% endtab %}
{% endtabs %}
