안드로이드 구글 분석툴(Google Analytics for Android)을 살펴보자.

안드로이드 구글 분석 툴(Google Analytics for Android)은 안드로이드 앱에서 발생하는 페이지 뷰, 액션등의 데이터를 수집하고 분석해 주는 서비스이다. 이 툴은  Analytics SDK for Android V3 에서 다운로드 받을 수 있다. 다운로드 받은 파일에서 libGoogleAnalytics.jar 파일을 프로젝트의 lib 폴더에 복사하고, 빌드 패스(Build Path)에 추가한 뒤에 사용하면 된다.

위 사이트에서 예제 코드를 보면, 버튼의 클릭은 trackEvent() 메서드, 액티비티(Activity)를 로딩해서 데이터를 가져오는 형태는 trackPageView() 메소드를 호출해서 데이터를 수집하는 것을 볼 수 있다. 그리고 코드는 일정시간이 지나면 크론(Cron) 잡처럼 디스패칭해서 수집된 데이터를 서버(Google Analytics)로 전송할 수 있다는 것도 알 수 있다.

그래서 이 라이브러리의 소스가 궁금해서 간략해서 분석해 봤다.

1. GoogleAnalyticsTracker는 static 인스턴스로 전형적인 싱클톤 패턴의 형태를 띠고 있다.
2. 예제의 startSession 메소드를 호출하게 되면
2.1 이벤트를 저장할 데이터베이스를 생성한다
2.2 네트웍으로 처리할 디스패처를 생성한다..
2.3 디스패처의 콜백을 받을넘을 생성한다..
2.4 네트웍 연결관리하는 매니저를 생성하고..
2.5 안드로이드의 Handler를 하나 생성한다.. 이넘의 용도는 Timer의 schedule메소드와 비슷하게 일정시간 뒤에 등록한 Handler의 메소드를 실행한다..
3. 예제의 trackEvent() 메서드를 호출하면..
3.1 이벤트 객체를 만들어서, 위 Handler객체의 postDelayed() 메소드를 사용해서 디스패처를 실행한다.
4. 예제의 stopSession을 호출하면..
4.1 디스패처를 종료한다. 디스패처가 종료되면 서버에 리포팅하는 스레드를 종료시킨다.

위 과정이 안드로이드 구글 분석 툴이 수집한 데이터를 서버에 전달하는 기본 과정이다. 이 과정에서 데이터를 서버로 전송하는 디스패처로 NetworkDispater 클래스(내부에서 아파치 HTTP 라이브러리 사용)를 사용하고 있고, 간단한 형태는 아래와 같다.

class NetworkDispatcher implements Dispatcher
{
	private static final String GOOGLE_ANALYTICS_HOST_NAME = "www.google-analytics.com";
	private static final int GOOGLE_ANALYTICS_HOST_PORT = 80;
	private static final int MAX_GET_LENGTH = 2036; // 2048도 아닌 2036의 사이즈는 왜?? 흠.. 궁금하다.. 
	private static final int MAX_POST_LENGTH = 8192;
	private static final String USER_AGENT_TEMPLATE = "%s/%s (Linux; U; Android %s; %s-%s; %s Build/%s)";
	private final String userAgent;
	private static final int MAX_EVENTS_PER_PIPELINE = 30;
	private static final int MAX_SEQUENTIAL_REQUESTS = 5;
	private static final long MIN_RETRY_INTERVAL = 2L;
	private final HttpHost googleAnalyticsHost;
	private DispatcherThread dispatcherThread;
	private boolean dryRun = false;  

	public NetworkDispatcher() {
		this("GoogleAnalytics", "1.4.2");
	}

	public NetworkDispatcher(String paramString1, String paramString2) {
		this(paramString1, paramString2, "www.google-analytics.com", 80);
	}

	NetworkDispatcher(String paramString1, String paramString2, String paramString3, int paramInt) {
		this.googleAnalyticsHost = new HttpHost(paramString3, paramInt);
		Locale localLocale = Locale.getDefault();
		this.userAgent = String.format("%s/%s (Linux; U; Android %s; %s-%s; %s Build/%s)", new Object[] { paramString1, paramString2, Build.VERSION.RELEASE, localLocale.getLanguage() != null ? localLocale.getLanguage().toLowerCase() : "en", localLocale.getCountry() != null ? localLocale.getCountry().toLowerCase() : "", Build.MODEL, Build.ID });
	}
}

 

이제 구글 분석 툴(Google Analytics for Android)에 대해서 간략하게 살펴봤다. 이런 라이브러리를 사용하기전에 혹시 성능이슈가 발생하지 않을까? 또는 네트웍이 안 되면 문제가 생기지 않을까? 하는 의문은 역시 소스가 답을 해 준다.

한마디 더 덧붙이자면, 소스 코드 좋쿠나 ^^

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.