페이지 분석
페이지뷰, 페이지 체류시간 분석이 가능합니다.웹페이지가 로딩 완료된 시점에 SDK가 제공하는 함수를 호출하여 쉽게 수행할 수 있습니다.
페이지 분석을 위해서는 각 화면의 이동시에 호출되는 Callback 함수에 다음과 같은 코드의 적용이 필요합니다.
페이지 진입시
Java
kotlin
DOT.onStartPage(this);
DOT.onStartPage(this)
Hybrid App인 경우에만 적용하면 되는 설정으로, WebView로 표시한 웹페이지 내에서 발생하는 이벤트를 측정하기 위해 필요합니다. 웹뷰로 불러온 페이지를 감지할 수 있도록 다음과 같이
setWebView
함수를 호출해주세요.Java
Kotlin
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = findViewById(R.id.web_view);
...
// SDK 호출
DOT.setWebView(webView);
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val webView : WebView = findViewById(R.id.web_view)
...
// SDK 호출
DOT.setWebView(webView)
}
그리고
WebViewClient
의 각각의 콜백에 아래와 같이 적용해주세요.Java
Kotlin
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if( view.getProgress() == 100 ){
// SDK 호출
DOT.injectJavascript(view);
}
}
});
...
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
if (view.progress == 100) {
// SDK 호출
DOT.injectJavascript(view)
}
}
}
각 ViewController 이동 시에 호출되는 delegate 함수에 다음과 같이 기본적인 페이지 분석을 위한 코드를 적용합니다.
swift
objective-C
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DOT.onStartPage()
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[DOT onStartPage];
}
Hybrid 앱의 경우 앱 내에서 WebView 를 사용하여 웹 컨텐츠를 서비스 하기도 합니다. 이와 같이 Webview 에 의해서 보여지는 웹 컨텐츠의 경우에는 위에서 설명된 Native 화면과는 다른 방식으로 동작하기 때문에, 별도의 분석 코드 적용이 필요합니다. 분석 대상 앱이 만약 Hybrid 앱인 경우에는 아래의 코드를 참고하여
웹 컨텐츠도 분석
할 수 있도록 적용을 해야합니다.앱내에서 사용할
WKWebView
의 Delegate
함수에 아래와 같이 분석코드를 적용합니다.Swift
Objective-C
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
...
if (webView.isLoading) {
return;
}
DOT.setJavascriptInjectionIn(webView)
...
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
...
if let url = navigationAction.request.url{
let absoluteString = url.absoluteString
if (absoluteString.hasPrefix("jscall-dot")) {
let request: URLRequest? = navigationAction.request
DOT.setWkWebView(webView, reqeust: request)
decisionHandler(.cancel)
}
...
}
...
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
if(webView.isLoading) {
return;
}
[DOT setJavascriptInjectionInWkWebView:webView];
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if([@"jscall-dot" isEqualToString:navigationAction.request.URL.scheme]) {
NSURLRequest *request = navigationAction.request;
decisionHandler(WKNavigationActionPolicyAllow);
[DOT setWkWebView:webView reqeust:request];
}
}
모바일앱내 웹뷰와 PC 혹은 모바일웹뷰로 동시에 사용하는 화면인 경우 아래와 같은 웹킷뷰를 포함한 viewController의
viewWillApeear
에 아래와 같이 적용해주세요.Swift
Objective-C
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
webView.evaluateJavaScript("navigator.userAgent") { (userAgent, error) in
if let ua = userAgent {
self.webView.customUserAgent = ua as! String + " RW2SDK"
}
}
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.webView evaluateJavaScript:@“navigator.userAgent” completionHandler:^(NSString *aUserAgent, NSError *aError) {
NSString *sCustomUserAgent = @” RW2SDK”;
if (aUserAgent.length > 0 && aError == nil) {
sCustomUserAgent = [NSString stringWithFormat:@“%@ %@“, aUserAgent, sCustomUserAgent];
}
self.webView.customUserAgent = sCustomUserAgent;
}];
}
Navigator
를 사용하는 경우 앱 실행 후 처음 보이는 main 화면에 첫번째 탭 의 코드와 같이 적용합니다.앱 실행 후 첫 화면에 onStartPage 호출을 설정했다면,
NavigationService
파일 에서 Navigate()
와 , back()
에 대한 설정을 위해 두번째 탭 의 코드를 참고 해 주세요.JavaScript(main)
JavaScript(NavigationService)
const MainScreen = ({navigation}) => {
// 앱 실행후 메인 화면 처음 노출 될때, onStartPage 호출.
useEffect(()=>{
if( navigation.isFocused()){
if( NativeModules.DotReactBridge != null ) {
NativeModules.DotReactBridge.onStartPage();
}
}
},[]);
let _navigator;
function setTopLevelNavigator(navigatorRef) {
_navigator = navigatorRef;
}
function navigate(routeName, params) {
// 다른 화면으로 이동을 시작할때, onStartPage
if( NativeModules.DotReactBridge != null ) {
NativeModules.DotReactBridge.onStartPage();
}
_navigator.dispatch(
NavigationActions.navigate({
routeName,
params,
})
)
}
function back() {
// A 화면에서 메인 화면으로 되돌아 갈때, onStartPage
if( NativeModules.DotReactBridge != null ) {
NativeModules.DotReactBridge.onStartPage();
}
_navigator.dispatch(
NavigationActions.back()
);
}