2015.12.31 11:50

게임 다 만들고, google play에 프로젝트 등록하고 로그인을 해봤는데 마지막 로그인에서 계속 fail뜸. 


원인을 찾던 중 로컬에 등록한 keystore의 값을 google play api 관리자에 등록을 안 해서 발생한 문제였음. 


아래 이미지 중 붉은 테두리 안에 keystore에 등록된 sha1 값을 등록해야 함.


(keytool -list -v -keystore "자신이 등록한 keystore 이름" 을 입력하면 sha1 값을 볼 수 있다.)



저작자 표시 비영리 동일 조건 변경 허락
신고
2015.11.11 06:56

신박한 넘들.. ^^




저작자 표시 비영리 동일 조건 변경 허락
신고
2015.07.22 18:23

구글의 App engine은 App Engine Hosting 과 Managed VMs Hosting 두 가지 중 한가지를 선택할 수 있습니다. 


이번에는 이 둘의 차이점과 앞으로 사용할 Managed VMs Hosting에 대해 상세히 정리해 보겠습니다. Managed VMs Hosting은 2015년 7월 현재 베타 서비스 중이며, 이곳에 기록되는 내용은 이후 계속 변화할 수 있음을 참고하세요. ..... 를 줄줄이 쓰려 했으나 사실 공식 페이지에 워낙 잘 나와있어서, 괜히 사족 안달고  간단히 정리합니다. 


둘은 차이점은 https://cloud.google.com/appengine/docs/managed-vms/ 의 중간 정도에 나와있는 표를 보시면 쉽게 이해하실 수 있습니다.


제가 생각하는 가장 큰 장점은 기존에 정해진 Java, Go, Python, PHP가 아닌 다른 언어로 제작된 어플리케이션을 올릴 수 있다는거죠. 끝!! 


이 아니고.. 기존에 쓰려던 글 중 둘의 차이를 설명한 내용만 아래 남겨두었습니다. 굳이 보실 필요는 없지만... 한번 간단히 읽어 보셔도 됩니다. ^^


=============================================================================


이전 세대에서는 게임 서비스를 위해 IDC와 회선을 임대하고 IBM과 같은 회사에서 서버 시스템을 구매하여 IDC에 설치해야 했으며, 규모가 클 경우 이를 관리하기 위한 인력을 IDC 센터 내에 직원을 두어야 했습니다. 유저가 급격히 증가할 경우를 대비해 시스템 공급업체와 협상하여 빠른 시간안에 시스템을 투입하기 위한 계약을 했어야 했죠. 해외에 서비스를 위해서는 더 복잡한 절차가 기다리고 있었습니다. 게다가 서비스를 위한 대부분의 기능을 직접 개발을 해야 했습니다. 보안 업데이트와 같은 중요한 OS 변경 때마다 개발자와 운영자들의 스트레스를 극도로 상승시키곤 했죠.


Google App Engine 은 Platform as a Service입니다. 

이제 우리는 서비스할 기능을 구현하고, Google의 인프라스트럭쳐에 올려 빌드하고 간단히 배포할 수 있습니다. Google Console을 이용해 원격으로 시스템의 상태를 실시간으로 확인할 수 있으며, 유저의 증감에 따라 GAE에 설정한 대로 어플리케이션을 실행하는 서버들이 자동으로 증가,감소가 진행됩니다. GAE의 메인터넌스는 이제 다운없이 진행이 됩니다.(이에 대해서는 이곳을 참고해 보세요. 아.. 나프다 애청하고 있습니다. 더 많은 개발자 분들이 들으시길 바랩니다. ^^)이전과는 비교할 수 없을 정도로 간편해 졌으며, 운영비용을 획기적으로 줄일 수 있게 되었습니다.


이를 통해 로컬의 작은 회사조차도 전세계에 자사의 서비스를 사용할 수 있게 되었습니다.


기존에 GAE를 활용하는 방법을 기술한 훌륭한 서적들과 아티클들이 많이 있지만 굳이 제 블로그에 다시 정리하는 이유는, 제 경험이 미천하여 기록하며 배우고자 함이며, 저와 같은 시도를 하시는 분들께 조금이나마 도움이 되었으면 하는 마음입니다.


서론이 길었네요. 이제 본론으로 들어가겠습니다.


(* 아래 단락의 참고/이미지출처 사이트: https://cloud.google.com/appengine/docs/managed-vms/)


GAE는 2015년 7월 현재, 두 가지 호스팅 옵션을 제공합니다. 하나는 기존의 App Engine Hosting 이며, 2014년경부터 지원하기 시작하여 아직 베타 서비스 중인, Managed VMs Hosting 입니다. 


이 둘의 차이를 아래의 이미지에서 간단히 이해할 수 있습니다.



위 참고 사이트의 중간쯤을 보시면 아래의 표를 보실 수 있는데, 위 그림과 같이 보시면 startup time이 왜 이렇게 차이가 나는지 알 수 있습니다.


Instance startup time을 언급한 이유는 App Engine sandbox와 비교해 이 요소 이외에 단점이 거의 없기 때문입니다.


.

.

.




연재 순서


 1. Node.js로 App Engine 사용하기 - 들어가며... 

 2. Node.js로 App Engine 사용하기 - App Engine Hosting과 Managed VMs Hosting

 3. Node.js로 App Engine 사용하기 - Hello World with Node.js

 4. Node.js로 App Engine 사용하기 - 데이터 다루기

 5. Node.js로 App Engine 사용하기 - 인증

 6. Node.js로 App Engine 사용하기 - 로깅

 7. Node.js로 App Engine 사용하기 - Cloud Pub/Sub 서비스 시용하기

 8. Node.js로 App Engine 사용하기 - Cloud 설정하기

 9. Node.js로 App Engine 사용하기 - 게임 릴리즈 절차 정리

10. Node.js로 App Engine 사용하기 - 마무리 하며...


그럼 다음 글에서 뵙겠습니다. 



저작자 표시 비영리 동일 조건 변경 허락
신고
2015.07.22 00:48

현재 구글 앱 엔진은 java, python, go,php 네 가지 언어를 사용한 어플리케이션을 지원합니다.


위 언어 이외의 언어들(nodejs, perl, runy 등등)은 앱 엔진의 runtime 옵션에 custom 이 추가되면서 사용이 가능해졌습니다. (app.yaml의 옵션에서 설정이 가능합니다.)


현재 베타로 운영되고 있으며, 서버는 베타 기간 동안은 오직 북미에서만 운영된다고 합니다. 


가격에 대해서는 사용한 만큼 측정한다고 되어 있는데, 얼마나 써야 유료가 되는지, 유료로 전환할 경우 대략적인 비용이 얼만지는 바로 다음 글에서 측정해 보겠습니다.


이를 위해 Docker를 같이 다룰텐데, Docker에 대해서는 상세히 언급하지는 않을 예정입니다. 


Node.js와 Docker에 대해서는 이미 알고 계시다고 가정하고 진행하겠습니다. Docker는 깊이 있게 다루지 않으니 모르셔도 일단 진행하시면서 익히셔도 되니 참고하세요.


=============================================================================


시작하기 전에 아래 내용에 대한 준비가 필요합니다. 


- gmail 생성

- https://cloud.google.com/appengine/ 에서 무료평가판 신청

- google app engine sdk를 설치. 이는 로컬에서 구글앱엔진의 가상환경을 구축합니다.

- nodejs 설치


=============================================================================


https://cloud.google.com/nodejs/getting-started

https://github.com/GoogleCloudPlatform/nodejs-getting-started


위 두 사이트를 지속적으로 참고하세요. 앞으로 길지 않은 글을 작성하는 동안 위 샘플 프로젝트와 공식 사이트를 많이 참고할 예정입니다.


제 블로그의 글들은 대부분 사전에 알고 있는 지식을 쓰는 경우보다는 스터디나 실제 업무를 진행하면서 부딪히거나 힘들었던 내용들을 실시간으로 올리면서 작성됩니다. 그래서 잘못된 내용이 올라가기도 하고, 글이 완료된 후 퇴고 혹은 내용을 수정하는 경우가 종종 있습니다. 참고해 주세요. ^^;


이 글의 연재 목표는 아래와 같습니다. 


Google App Engine을 활용하여 게임 서버를 구축하는 것이며, 이를 위해 아래 내용들을 직접 제작/설정해 볼 예정입니다. 

- 유저의 게임 진행 데이터 저장 , 리더보드 제공

- 게임 이벤트 로깅

- 클라우드 플렛폼 활용법 

샘플 게임 클라이언트는 html5 Canvas를 사용할 예정이며, 클라이언트에서 사용될 코드들은 javascript로 제작할 예정입니다.


앞으로 연재되는 내용의 순서는 아래와 같습니다. 진행하면서 상황에 따라 변경될 수 있으니 양해 바랍니다. 주 내용은 이곳을 참고하여 따라갈 예정이며, 기존 내용에 제가 테스트를 진행하면서 발생하는 추가 내용들을 기록할 예정입니다. 


연재 순서


 1. Node.js로 App Engine 사용하기 - 들어가며... 

 2. Node.js로 App Engine 사용하기 - App Engine Hosting과 Managed VMs Hosting

 3. Node.js로 App Engine 사용하기 - Hello World with Node.js

 4. Node.js로 App Engine 사용하기 - 데이터 다루기

 5. Node.js로 App Engine 사용하기 - 인증

 6. Node.js로 App Engine 사용하기 - 로깅

 7. Node.js로 App Engine 사용하기 - Cloud Pub/Sub 서비스 시용하기

 8. Node.js로 App Engine 사용하기 - Cloud 설정하기

 9. Node.js로 App Engine 사용하기 - 게임 릴리즈 절차 정리

10. Node.js로 App Engine 사용하기 - 마무리 하며...


그럼 다음 글에서 뵙겠습니다. 



저작자 표시 비영리 동일 조건 변경 허락
신고
2015.07.09 11:09

한 가지 핑계를 대고 넘어가야겠다. 어제 로깅 코드를 만들 때 모든 데이터를 event로 처리한 걸 기억하길 바란다. 사실 모든 게임의 로그를 이벤트로만 처리하는 것은 당연히 잘못된 방법이다. 하지만, 이 글은 Google Analytics와 Unity를 연동하는 과정을 설명하는데 목적을 두고 있다. 구글 애널리틱스에 적합하게 로깅하고 리포트를 분석하는 글이 아님을 밝힌다.(절대 몰라서 그런거... 맞음. --)


아마 대부분의 통계툴이 그렇겠지만, 데이터를 샘플링한다. 그래서 모든 데이터를 세세하게 보지는 못한다. 이번 테스트에서는 어제 게임 두 판만 했음. 팔이 아파서..데이터가 적기 때문에 추론하는 방법만 간단히 언급하겠다.


이제 본론 시작!!


데이터 조회는 보고서 속성에 설정한 시간대에 정리가 된다. 1일마다 리포트되며, 필요한 경우 아래 화면에서 변경 가능하다. 



금일 업데이트 되어 어제 테스트 한 내용을 검토해 볼 수 있게 되었다. 어제는 모든 데이터를 event로 처리했으니,  좌측 메뉴에서 "방문 형태" -> "이벤트" -> "인기 이벤트"로 먼저 가보자. 그럼 아래와 같은 결과를 볼 수 있다.



이전에 목표로 잡았던 총 세 가지 지표를 검토해 보자. 


1. 몇번째 스테이지에서 좌절하는가.

 : Category "game" -> Action "gameover" -> Label "last day" 로 설정했던 값을 검토해보자.

(* 순 이벤트 수란 : 한 세션 기준으로 첫 행동만 기록되는 이벤트의 합계. 즉, 어제 나 혼자, 게임을 두번 했는데, 하나의 세션이었으니, 그 중 첫번째 게임의 데이터를 말한다. 이벤트 값은 10. 두번째는 99판까지 갔다능...)


총 두번 플레이 되었으며,  순 이벤트 수 기준으로 이벤트 값은 10. 이를 통해 유저들은 평균 day 5 플레이 한다는 말도 안되는 결과를 알 수 있다. (모수가 많다면 우리 모두 공감할만한 결과를 얻을 수 있다. 지금은 그냥 패스 --a) 


2. Food의 획득, 이동 시 사용하는 량, 좀비에게 타격받아 소비되는 량

 : Category "food" -> Action "loss","get" -> Label "move","attacked","food","soda"  로 설정했던 값을 검토해보자.


Label 기준으로 본 화면이다. move, attacked는 loss, food, soda는 get action의 값이니 참고하자.


게임에서 이동 시 소비되는 food는 1이다. 평균값이 1인걸 확인할 수 있으며, 총 이벤트수는 90%에 육박하고 있는 걸 볼 수 있다. 그에 비해 attacked는 총 3.91%로 미비하다. (좀비가 우쉽나?)  좀비의 무서움을 더 알릴 필요가 있겠다. 


획득은 food가 soda의 획득 비율은 비슷하다. action "get"을 기준으로 food와 soda를 비교해보면 각각 56%와 44%임을 알 수 있었다. (몰랐는데 뭘 먹으나 food 증가량은 10이었네 --a 모양만 다르고 효율은 같았구나.)


3. 각 스테이지 별로 몇 번 정도의 이동으로 클리어 하는가

 : Category "day" -> Action "clear" -> Label "total move"로 설정했던 값을 검토해보자.

 위 분류는 사실 목적에 알맞지 않은 설정이었다. label을 day 1, day 2 등으로 분류하여 각 day별로 이동 횟수를 볼 수 있게 했어야 했다. 혹시 4번째 글에서 소스를 받은 분들은 이 부분을 개선해서 테스트 해보면 더 좋을 듯. 


day 별로 구분되지 않은 건 아쉽지만, 평균 약 20회 이동으로 스테이지를 클리어 하는 결과를 볼 수 있다.



이상. Unity + Google Analytics 연동에 대한 글을 마친다.


블로그 자체를 개인 저장소로 생각하며 글을 올리다보니 실수가 여기저기 보이네.


가끔 와서 보시는 분들께 심심한 사과의 말씀을 ^^a


다들 행복한 하루 하루 되세요. ~ 




저작자 표시 비영리 동일 조건 변경 허락
신고
2015.07.08 15:01


GameManager.zip

기반 준비는 다 되었다. 이제 실제 이벤트를 전송하고 그 결과를 어떻게 보는지 살펴보자.


이 전 글에서 공유했던 목표는 아래와 같다. 


1. 몇번째 스테이지에서 주로 좌절하는가

 : Game Over되는 시점의 Day 날짜를 전달하자.


2. Food의 획득, 이동 시 사용하는 량, 좀비에게 타격받아 소비되는 량

 : Food 나 Soda 획득시 획득량 전달

 : 이동할 때마다 1씩 소비됨. 이 정보 전달

 : 좀비에게 공격 당하면 10씩 소비된다. 이 정보 전달.


3. 각 스테이지 별로 몇 번 정도의 이동으로 클리어 하는가.

 : 각 스테이지가 클리어 될 때 총 이동 횟수 전달.


event parameter는 총 4개로 구성되며, string category, string action, string label, int value로 구성된다. 위 세 가지 이벤트를 위해 아래와 같은 분류를 만들자.


Category

"game" - 게임 전체에 대한 대분류

"day"   - 한 턴 끝날 때.

"food"  - 게임의 중요 요소, Food


Action

"clear" - 턴 클리어 시

"gameover" - 게임 종료 시

"get"   - 획득

"loss"  - 손실


Label

"total move" - 한 턴의 총 이동 횟수

"Last Day" - 마지막 day 

"food","soda" - 획득 시 구분되는 요소

"attacked","move" - 손실 시 구분되는 요소

 

관련된 코드는 첨부된 파일, GameManager.cs, Player.cs를 참고할 것!


테스트 한 실시간 그래프는 아래처럼 볼 수 있다.



Google Analytics에서는 이벤트 기록을 상세 분석하기 위해서는 하루가 지나야 가능하기 때문에 


리포트 상세보기는 내일 이어서 업데이트 할 예정


저작자 표시 비영리 동일 조건 변경 허락
신고
2015.07.07 16:43

샘플 제작을 위한 게임 샘플은 2D Roguelike를 사용했다. Android를 기준으로 설명한다. iOS에 대한 내용은 다음 글에서 세팅과 관련된 내용만 다루도록 한다. 그 이외의 내용이 다르진 않으니..





트래킹을 위한 1차 목표는 아래와 같다. 


- 몇번째 스테이지에서 주로 좌절하는가

- Food의 획득, 이동 시 사용하는 량, 좀비에게 타격받아 소비되는 량

- 각 스테이지 별로 몇 번 정도의 이동으로 클리어 하는가.


Google Analytics 설정 절차


1. google 계정을 생성 후(기존 계정 사용 가능) https://www.google.com/analytics/에 로그인한다.


2. 애널리틱스 계정이 없다면 계정을 생성하는 폼이 출력될 것이다. 그곳에 원하는 대표 계정명, 속성명(속성은 프로젝트명과 동일하다고 생각하면 된다.)을 입력하면 아래와 같은 기본 화면을 볼 수 있다. 테스트를 위해 속성명을 "LogTest"로 명명함.



이제 실제 프로젝트를 세팅해보자. 


1. 빈 프로젝트를 만들고, Roguelike, googleanalyticsv3.unitypackage를 생성한 프로젝트에 Import한다.


2. Assets/Plugins/GoogleAnalyticsV3에 GAv3.prefab을 클릭하고, Inspector view의 내용을 채워준다. 


아래 내용만 채우면 테스트가 가능하다.

 Android Tracking Code : 속성의 추적 ID를 입력한다.

 Product Name : 제품명을 입력한다. 여기서는 속성값과 같은 "LogTest"를 입력했다.

 Bundle Identifier : com.YourCompanyName.YourProductName 과 같은 포멧으로 입력하여야 한다.

 Bundle Version : 원하는 대로.. 여기서는 0.1로 입력했다.

나머지는 기본값을 사용하겠다.


3. Project View에서 GameManager.prefab을 찾고, GameManager.cs에 아래 코드를 삽입한다.

public GoogleAnalyticsV3 googleAnalytics;



4. Project View에서 GameManager.prefab을 클릭하고, Google Analytics에 세팅했던 GAv3를 Project View에서 찾아 연결한다.



5. GAv3를 활성화 하기 위해 GameManager.cs에 아래 코드를 삽입하자.


void Awake(){

  .   

  .

  // Start Google Analytics 

  Instantiate(googleAnalytics);

  googleAnalytics.StartSession();

  .   

  .

}


void OnApplicationQuit(){

  googleAnalytics.StopSession();

}  


이제 세팅이 완료되었다. 


위 세팅은 일반적이라고 할 수 없다. "Google Analytics 연동하기 - 1. "의 설명과는 조금 다른데, 이 프로젝트의 중심인 GameManager의 특성 문제이니 참고하기 바란다.


다음은 실제 로그를 남기고, 구글 애널리틱스 리포트에서 결과를 보도록 하자.

저작자 표시 비영리 동일 조건 변경 허락
신고
2015.07.07 10:31

(* 원문 : https://developers.google.com/analytics/devguides/collection/unity/v3/reference?hl=ko )

*역자주 : 원문을 그대로 변역하는게 아닌, 실무에 적용하면서 불필요하게 긴 내용은 빼고, 추가할 내용은 넣으면서 진행합니다. 번역이 아님을 알아주세요. ^^a


데이터를 보낼 때는 Basic 나 Builder method를 사용합니다. Builder method들은 보낼 정보들에 대한 수치, campaign 파라미터들을 추가하길 원할 때 사용됩니다. 


Dispatch Hits

네트웍 연결이 가능하다면 데이터를 전송한다.

public void DispatchHits();


Session Control

Session들은 스크린 뷰, 이벤트들 그리고 전사상거래 업무 등과 과 같은 의미있는 행동들을 포함한 유요한 커네이너들을 제공한다.


아래 메소드들은 강제로 세션을 시작하거나 종료할 수 있다.

// Start a new session.
public void StartSession();
// There should be no need to end a session explicitly. However, if you do
// need to indicate the end of session you can use the following method.
public void StopSession();

Screens


GA에서 Screens는 게임안에서 보이는 유저 컨텐츠를 대표한다. screen은 단일 문자열 필드로 구성되어 있으며, GA 리포트에서 screen name으로 구분되어진다.


basic 

public void LogScreen(string title);

Builder

public void LogScreen(AppViewHitBuilder builder);

Example

googleAnalytics.LogScreen("Main Menu");

//Builder Hit with all App View parameters (all parameters required):
googleAnalytics
.LogScreen(new AppViewHitBuilder()
   
.SetScreenName("Main Menu"));


Events

Events는 유저의 반응에 대한 데이터를 모으는데 유용한 방법이다. 네 개의 파라미터를 사용하며, 게임의 유저 반응을 묘사하는데 사용할 수 있다. 


Basic

public void LogEvent(string eventCategory,
   
string eventAction,
   
string eventLabel,
   
long value);

Builder

public void LogEvent(EventHitBuilder builder);

Example

googleAnalytics.LogEvent("Achievement", "Unlocked", "Slay 10 dragons", 5);

// Builder Hit with all Event parameters.
googleAnalytics
.LogEvent(new EventHitBuilder()
   
.SetEventCategory("Achievement")
   
.SetEventAction("Unlocked")
   
.SetEventLabel("Slay 10 dragons")
   
.SetEventValue(5));

// Builder Hit with minimum required Event parameters.
googleAnalytics
.LogEvent(new EventHitBuilder()
   
.SetEventCategory("Achievement")
   
.SetEventAction("Unlocked"));


Crashes & Exceptions

충돌과 예외에 대해 측정할 수 있다.


Basic

public void LogException(string exceptionDescription, bool isFatal);

Builder

public void LogException(ExceptionHitBuilder builder);

Example

googleAnalytics.LogException("Incorrect input exception", true);

// Builder Hit with all Exception parameters.
googleAnalytics
.LogException(new ExceptionHitBuilder()
   
.SetExceptionDescription("Incorrect input exception")
   
.SetFatal(true));

// Builder Hit with minimum required Exception parameters.
googleAnalytics
.LogException(new ExceptionHitBuilder());


User Timings

GA에서 시간의 간격을 측정하는 기본적인 방법을 제공한다. 예를들면, 리소스 로딩 시간을 측정하는데 유용할 수 있다.


Basic

public void LogTiming(string timingCategory,
   
long timingInterval,
   
string timingName,
   
string timingLabel);

Builder

public void LogTiming(TimingHitBuilder builder);

Example

googleAnalytics.LogTiming("Loading", 50L, "Main Menu", "First Load");

// Builder Hit with all Timing parameters.
googleAnalytics
.LogTiming(new TimingHitBuilder()
   
.SetTimingCategory("Loading")
   
.SetTimingInterval(50L)
   
.SetTimingName("Main Menu")
   
.SetTimingLabel("First load"));

// Builder Hit with minimum required Timing parameters.
googleAnalytics
.LogTiming(new TimingHitBuilder()
   
.SetTimingCategory("Loading"));

Social Interactions

컨텐츠 안에 내장된 여러 SNS, 추천 위젯 등에 대한 유저 반응을 측정할 수 있다.


Basic

public void LogSocial(string socialNetwork,
   
string socialAction,
   
string socialTarget);

Builder

public void LogSocial(SocialHitBuilder builder);

Example

googleAnalytics.LogSocial("twitter", "retweet", "twitter.com/googleanalytics/status/482210840234295296");

// Builder Hit with all Social parameters (all parameters required).
googleAnalytics
.LogSocial(new SocialHitBuilder()
   
.SetSocialNetwork("Twitter")
   
.SetSocialAction("Retweet")
   
.SetSocialTarget("twitter.com/googleanalytics/status/482210840234295296"));


E-Commerce

GA에 in-game 구매와 판매에 대한 정보를 전달한다.


* 참고 : 이 절차는 GA에서 "전자상거래 보고서"를 사용하기 위해 설정이 필요합니다. (https://support.google.com/analytics/answer/1009612?hl=ko#Enable)


Basic

public void LogTransaction(string transID,
   
string affiliation,
   
double revenue,
   
double tax,
   
double shipping);

public void LogTransaction(string transID,
   
string affiliation,
   
double revenue,
   
double tax,
   
double shipping,
   
string currencyCode);

Builder

public void LogTransaction(TransactionHitBuilder builder);

Example

googleAnalytics.LogTransaction("TRANS001", "Coin Store", 3.0, 0.0, 0.0);
googleAnalytics
.LogTransaction("TRANS001", "Coin Store", 3.0, 0.0, 0.0, "USD");

// Builder Hit with all Transaction parameters.
googleAnalytics
.LogTransaction(new TransactionHitBuilder()
   
.SetTransactionID("TRANS001")
   
.SetAffiliation("Coin Store")
   
.SetRevenue(3.0)
   
.SetTax(0)
   
.SetShipping(0.0)
   
.SetCurrencyCode("USD"));

// Builder Hit with minimum required Transaction parameters.
googleAnalytics
.LogTransaction(new TransactionHitBuilder()
   
.SetTransactionID("TRANS001")
   
.SetAffiliation("Coin Store"));


Items

Basic

public void LogItem(string transID,
   
string name,
   
string SKU,
   
string category,
   
double price,
   
long quantity);

public void LogItem(string transID,
   
string name,
   
string SKU,
   
string category,
   
double price,
   
long quantity,
   
string currencyCode);

Builder

public void LogItem(ItemHitBuilder builder);

Example

googleAnalytics.LogItem("TRANS001", "Sword", "SWORD1223", "Weapon", 3.0, 2);
googleAnalytics
.LogItem("TRANS001", "Sword", "SWORD1223", "Weapon", 3.0, 2, "USD");

// Builder Hit with all Item parameters.
googleAnalytics
.LogItem(new ItemHitBuilder()
   
.SetTransactionID("TRANS001")
   
.SetName("Sword")
   
.SetSKU("SWORD1223")
   
.SetCategory("Weapon")
   
.SetPrice(3.0)
   
.SetQuantity(2)
   
.SetCurrencyCode("USD"));

// Builder Hit with minimum required Item parameters.
googleAnalytics
.LogItem(new ItemHitBuilder()
   
.SetTransactionID("TRANS001")
   
.SetName("Sword")
   
.SetSKU("SWORD1223"));

Custom Dimensions & Metrics

Custom Dimemsions은 GA에서 hits, 유저들, 그리고 세션들을 가진 metadata의 묶음이다. Custom Metrics는 GA에서 당신 자신의 통계를 생성하고 증가시킬 수 있다.


사용전에 각각에 대해 생성과 설정이 필요하다. 설정 이후에는 Builder method를 통해 해당 부분으로 전송될 수 있다.


Builder

// Custom Dimension.
public T SetCustomDimension(int dimensionNumber, string value);
// Custom Metric.
public T SetCustomMetric(int metricNumber, string value);


Example

// Custom Dimension.
// An AppView hit example, but custom dimensions can be sent with all hit types.
googleAnalytics
.LogScreen(new AppViewHitBuilder()
   
.SetScreenName("Another screen")
   
.SetCustomDimension(1, "200"));

// Custom Metric.
// An Event hit example, but custom metrics can be sent with all hit types.
googleAnalytics
.LogEvent(new EventHitBuilder()
   
.SetEventCategory("Achievement")
   
.SetEventAction("Unlocked")
   
.SetEventLabel("Slay 10 dragons")
   
.SetEventValue(5)
   
.SetCustomMetric(3, "200"));

Campaigns

GA에서 Campaigns는 게임에서 유저가 활성화하는 campaigns와 통신 소스들의 속성을 활성화한다.

Campaign 파라미터들은 Builder method를 사용해 어떤 hit의 부분으로 보내질 수 있다.


Build

public T SetCampaignName(string campaignName);
public T SetCampaignSource(string campaignSource);
public T SetCampaignMedium(string campaignMedium);
public T SetCampaignKeyword(string campaignKeyword);
public T SetCampaignContent(string campaignContent);
public T SetCampaignID(string campaignID);

Example

googleAnalytics.LogTiming(new TimingHitBuilder()
   
.SetTimingCategory("Loading")
   
.SetTimingInterval(50L)
   
.SetTimingName("Main Menu")
   
.SetTimingLabel("First load")
   
.SetCampaignName("Summer Campaign")
   
.SetCampaignSource("google")
   
.SetCampaignMedium("cpc")
   
.SetCampaignKeyword("games")
   
.SetCampaignContent("Free power ups")
   
.SetCampaignId("Summer1"));

// Send campaign parameters with timing hit.
// Builder Hit with minimum required Campaign parameters.
googleAnalytics
.LogTiming(new TimingHitBuilder()
   
.SetTimingCategory("Loading")
   
.SetTimingInterval(50L)
   
.SetTimingName("Main Menu")
   
.SetTimingLabel("First load")
   
.SetCampaignSource("google");


Advanced

이 method는 오직 tracker concepts를 가진, GA의 파워유저가 사용하길 추천한다. 


SetOnTracker

다른 hits로 보내진 값을 추적하는 값을 세팅하는 것. (? 약간 이해가 안감. 테스트하면서 다시 봐야 할 듯.)

fieldName 파라미터를 위해 Assets/Plugins/Fields.cs 의 변수들을 사용해라. (예를들면,Fields.SCREEN_NAME 같은..)

public void SetOnTracker(Field fieldName, object value);

* 참고: 같은 값을 전달하면 중복됩니다.


Example

googleAnalytics.SetOnTracker(Fields.SCREEN_NAME, "Main Menu");


Dispose

관리중인 리소스들을 해제하고 tracker를 초기화 한다.


만약 dispose 이후에 어떤 tracking hit이 호출되면, 새로운 tracker가 생성된다. dispose는 실제로 모든 tracking이 완료된 이후에 호출할 것! 예를들면, 게임이 종료될 때.

public void Dispose();

Example

googleAnalytics.Dispose();


이상. 일단 기본 API 문서를 살펴보았다.


다음에는 Unity 테스트 프로젝트에 적용하고, 그 결과를 Google Analytics 보고서에서 보는 결과를 정리하겠다.


즐건 하루 ! 



저작자 표시 비영리 동일 조건 변경 허락
신고
2015.07.06 17:59

아래 주소에서 package를 다운로드 할 수 있다. 이 글 작성일 기준으로 아직 베타임.


https://github.com/googleanalytics/google-analytics-plugin-for-unity?hl=ko



이를 사용하기 위한 정책이 있다.(변경 될 수 있으니 , https://developers.google.com/analytics/devguides/collection/unity/policy?hl=ko 를 꼭 읽어볼 것!)


1. 당연하지만, Google Analytics Account가 필요하다.


2. End User에서 당신이 Analytics로 전송하는 데이터에 대한 동의를 얻어야 하며, 유저에게 보낼지 말지를 선택할 수 있는 옵션을 제공해야 한다.


3. 이메일, Social Security Numbers(주민등록번호 같은), 기기를 구별할 수 있는 특별한 정보 등의 개인 혹은 장비를 식별 할 수 있는 중요한 정보를 업로드하면 안된다. 


4. 개인을 식별할 수 있는 어떤 정보를 넘긴다면, 당신의 계정은 삭제될 것이며, 업로드된 데이터 또한 잃어버리게 될 것이다.



설정하는 과정은 아래와 같다.


Android 용


1. 빌드 타겟을 Android로 한 후 build를 하면 Temp/StagingArea 디렉토리(당신이 빌드를 선택한 디렉토리 아래에 생성될 것이다.)에서 AndroidManifest.xml 파일을 복사해서 <YOUR PROJECT ROOT>/Assets/Plugins/Android/ 폴더에 복사하라. 


2. AndroidManifest.xml 파일, <application> tag 위에 아래의 permissions를 추가하라. (이 어플리케이션이 네트웍에 접속을 허용한다는 권한임.)

  <uses-permission android:name="android.permission.INTERNET"/>

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


3. Campaign Tracking을 활성화 하길 원한다면, 아래 서비스를 추가하라.

<service android:name="com.google.analytics.tracking.android.CampaignTrackingService" />
<receiver android:name="com.google.analytics.tracking.android.CampaignTrackingReceiver"
         
android:exported="true" >
 
<intent-filter>
   
<action android:name="com.android.vending.INSTALL_REFERRER" />
 
</intent-filter>
</receiver>

IOS 용


1. XCode 프로젝트에 아래 라이브러리들을 추가해라.

  AdSupport,framework

  CoreData,framework

  SystemConfiguration.framework

  libz.dylib

  libsqlite3.dylib


2. 만약 빌드할 때 자동으로 추가되길 원한다면 iOS Extras 디렉토리에서 PostProcessBuildPlayer_GA 파일을 복사하여, <YOUR PROJECT ROOT>/Assets/Editor 디렉토리에 넣어라.


3. mod_pbxproj.py 스크립트를 다운로드해서 Editor 디렉토리에 복사해라. 라이브러리들은 빌드할 때 자동으로 추가될 것이다.


* 참고 : libsqlite3.dylib는 Xcode에서 -ObjC 링커 플래그를 사용할 때만 필요하며 만약 그 플래그를 사용하지 않는다면 PostProcessBuildPlayer_GA 파일에서 삭제해도 괜찮다.



GAv3 prefab 설정하기


1. GAv3.prefab을 클릭하라. Project View,  Assets/Plugins/GoogleAnalyticsV3안에서 찾을 수 있다.
2. Inspector view에서는 여러 정보들의 리스트를 볼 수 있으며, 당신의 프로젝트에 알맞은 값으로 설정해야 한다.
3. Object Hierarchy에 삽입하라.

* 참고 : 모든 플렛폼에 같은 값은 사용할 수 있다. 

오브젝트 트랙하기

GAv3 prefab을 설정 한 후, 아래 스탭들을 따라가면 특정 오브젝트를 추적할 준비가 완료된다.

1. 추적할 오브젝트를 클릭하고 해당 객체의 스크립트를 편집하자. 없다면 Add Component 버튼으로 새로운 스크립트를 만들자.

2. 해당 클래스에 아래처럼 GoogleAnalyticsV3 오브젝트를 생성하자.
public GoogleAnalyticsV3 googleAnalytics;

3. 스크립트를 저장하고 Unity 윈도우로 돌아가자.


4. 추적하고 싶은 객체의 Inspector view를 보자. 이제 googleAnalytics라고 명명된 필드를 볼 수 있고, 이곳에 Object Hierarchy view에서 GAv3 객체를 찾아 드래그 하여 넣어주자.


5. 이제 해당 객체를 추적할 준비가 되었다. 다른 객체들도 추척할 내용이 있다면 위의 과정을 반복하여 설정하면 된다.



이제 본격적으로 API 페이지를 읽어봐야겠다. +_+ GOGO !!!





저작자 표시 비영리 동일 조건 변경 허락
신고
2014.05.23 14:10

문서를 로컬 파일에 저장해서는 같이 수정하기 힘들었음. svn에 올려서 하기도 힘들도, 엑셀이나 doc 파일일 경우 머지도 힘들고.. 


그래서 구글 드라이브에서 문서 생성해서 공유하기로 결정. 


현재 서버 리펙토링에만 적용한 상태. 


잘 되는지 지켜봐야 할 듯. 

저작자 표시 비영리 동일 조건 변경 허락
신고