menu
Is this helpful?

# Cocos2d-x

::: 팁

데이터 액세스를 구현하기 전에 준비사항을 확인하세요.

실행 계획을 액세스하기 전에 데이터 엑세스 준비를 확인해 주세요.

Cocos2d-x SDK는 iOS, Android, Mac, Windows를 지원하며, 크기는 약 6.8M입니다.

:::

최신 버전: v2.0.1 다운로드 (opens new window)

업데이트 날짜: 2023-11-23

소스 코드: Source Code (opens new window)

# 1. SDK 구현

  1. Cocos2d-x SDK (opens new window) 리소스 파일을 다운로드 & 압축 해제하고, ThinkingAnalytics 폴더를 Classes 폴더에 위치시킵니다.
  2. CMakeLists.txt에 다음 설정을 추가합니다.
list(APPEND GAME_SOURCE
     Classes/ThinkingAnalytics/Common/TDJSONObject.cpp
     )
list(APPEND GAME_HEADER
     Classes/ThinkingAnalytics/Common/TDJSONObject.h
     Classes/ThinkingAnalytics/Common/TDAnalytics.h
     )
if(ANDROID)
    list(APPEND GAME_SOURCE
         Classes/ThinkingAnalytics/Android/TDAnalytics.cpp
         )
elseif(WINDOWS)
    list(APPEND GAME_HEADER
         Classes/ThinkingAnalytics/Other/ThinkingSDKObject.h
         )
    list(APPEND GAME_SOURCE
         Classes/ThinkingAnalytics/Other/TDAnalytics.cpp
         )
elseif(MACOSX)
        list(APPEND GAME_HEADER
            Classes/ThinkingAnalytics/Other/ThinkingSDKObject.h
            )
        list(APPEND GAME_SOURCE
            Classes/ThinkingAnalytics/Other/TDAnalytics.cpp
            )
  1. Android 구성 설정
  • proj.android의 app 디렉토리 아래에 libs 폴더를 추가하고, libs 폴더에 thinkingsdk.aar를 배치합니다.
  • proj.android의 app 디렉토리 아래에 있는 build.gradle에 다음 구성을 추가합니다.
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}

  1. iOS 구성 설정
  • XCode를 사용하여 iOS 프로젝트를 열고, ThinkingAnalytics의 아래에 있는 iOS 폴더를 Classes/ThinkingAnalytics 디렉토리에 직접 드래그 앤 드롭합니다.

  • Build Setting->Other Linker Flags에서 디버그와 릴리즈 각각에 -all_load를 추가합니다.

  • Build Phases->Compile Sources에서 TDAnalytics.mm에 -fobjc-arc를 추가합니다.

# 2. 초기 설정

#include "./ThinkingAnalytics/Common/TDAnalytics.h"
using namespace thinkingdata::analytics;
//메인 스레드에서 SDK 초기화
//방법 1
TDAnalytics::init(TE_APP_ID, TE_SERVER_URL);
//방법 2
Config config(TE_APP_ID, TE_SERVER_URL);
TDAnalytics::init(config);

파라미터 설명:

  • APPID: 프로젝트의 APPID, TE 프로젝트 관리 화면에서 획득 가능
  • SERVER_URL: 데이터 전송 주소
    • SaaS의 경우 프로젝트 관리 → 데이터 전송 주소에서 확인해주세요
    • 프라이빗 서버 구축의 경우, 데이터 전송 주소를 지정할 수 있습니다.

Android 9.0 이상에서는 기본적으로 HTTP 요청이 제한되므로 반드시 HTTPS 프로토콜을 사용해야 합니다.

# 3. 주요 기능

주요 기능을 사용하기 전에, 유저 식별 규칙을 확인하세요;

SDK는 게스트ID를 자동으로 생성하고, 로컬에 저장됩니다; 유저가 로그인하기 전에, 게스트ID를 신분 식별 ID로 사용합니다.

주의: 게스트 ID는 유저가 앱을 재설치할 때 리셋됩니다.

# 3.1 계정ID 설정

유저가 로그인할 때, login을 호출하여 유저의 계정ID를 설정할 수 있습니다. TE 플랫폼은 계정ID를 신분 식별 ID로 logout을 호출할 때까지 유지합니다. login을 여러 번 호출하면, 이전 계정ID가 덮어씌워집니다.

// 유저의 로그인 고유 식별자, 데이터 추적에서 #account_id에 해당합니다. #Account_id는 현재 TE입니다
TDAnalytics::login("TE");

Login을 여러 번 호출할 수 있습니다. 저장된 계정 ID와 일치하는지 판단합니다. 일치하는 경우, 호출은 무시되고 일치하지 않는 경우 이전 ID가 덮어씌워집니다.

이 방법으로 로그인 이벤트는 전송되지 않습니다

# 3.2 공통 이벤트 속성 설정

공통 이벤트 속성은 모든 이벤트에 포함되는 속성입니다. setSuperProperties를 호출하여 설정할 수 있습니다. 이벤트를 전송하기 전에, 공통 이벤트 속성을 설정하세요.

예: 플레이어의 레벨, 전투력, 소유 자원 등의 속성

TDJSONObject superProperties;
superProperties.setString("channel", "TE");//string
superProperties.setNumber("age",1);//number
superProperties.setBool("isSuccess",true);//boolean
superProperties.setDateTime("birthday","2020-01-02 10:52:52.290");//time

TDJSONObject object;
object.setString("key", "value");
superProperties.setJsonObject("object", object);// object

TDJSONObject object1;
object1.setString("key", "value");
vector<TDJSONObject> arr;  
arr.push_back(object1);
superProperties.setList("object_arr", arr); // array object

vector<string> arr1;
arr1.push_back("value");
superProperties.setList("arr",arr1);//array

TDAnalytics::setSuperProperties(superProperties);

공통 이벤트 속성은 캐시에 저장되며, 앱을 시작할 때마다 호출할 필요가 없습니다. 호출하는 경우 setSuperProperties를 사용하면, 이전에 설정한 공통 이벤트 속성은 덮어씌워집니다.

  • 이벤트 속성이 TDJSONObject 타입인 경우, 각 요소별로 속성으로 분리됩니다.
  • Key는 해당 속성의 이름으로 string 타입이며, 영문자와 숫자, "_"를 포함할 수 있으며 최대 50자까지 가능합니다. TE시스템은 모두 소문자로 통일됩니다.
  • Value는 해당 속성의 값으로, String, Number, Boolean, Time, object, array, list object를 지원합니다.

이벤트 속성, 유저 속성은 공통 이벤트 속성과 일치해야 합니다.

# 3.3 자동 수집 이벤트의 On/Off

클라이언트 SDK는 일부 이벤트를 자동으로 수집할 수 있으며, 실제 업무 상황에 따라 on/off할 수 있습니다. 아래는 참고 사항입니다.

TDAnalytics::enableAutoTrack();

# 3.4 이벤트 전송

track을 호출하여 이벤트를 전송합니다. 전송 전에 데이터 트래킹 정책을 준비하세요. 아래는 모델 코드입니다. 예: 아이템 구매

TDJSONObject eventProperties;
eventProperties.setString("product_name", "아이템명");
TDAnalytics::track("product_buy",eventProperties);

이벤트 이름은 string 타입으로, 영문자와 숫자, "_"를 포함할 수 있으며 최대 50자까지 입력 가능합니다.

# 3.5 유저 속성 설정

일반적인 유저 속성에 대해서는 userSet을 사용하여 설정할 수 있으며, userSet은 기존 값을 덮어씁니다. 해당 속성에 값이 없는 경우 새로운 속성이 생성됩니다. 아래는 코드 예시입니다.

//유저 이름이 현재 TA입니다.
TDJSONObject properties;
properties.setString("username", "TA");
TDAnalytics::userSet(properties);

//유저 이름이 현재 TE입니다.
TDJSONObject newProperties;
newProperties.setString("username", "TE");
TDAnalytics::userSet(newProperties);

속성 형식 요구사항은 이벤트 속성과 일치합니다.

# 4. 코드 예시 (Example Code)

아래의 코드 예시에 모든 작업이 포함되어 있으며, 아래 순서대로 사용하는 것을 권장합니다:

#include "./ThinkingAnalytics/Common/TDAnalytics.h"
using namespace thinkingdata;
if (개인정보 보호 정책이 승인되었다면) {
      TDAnalytics::init(TE_APP_ID, TE_SERVER_URL);
      //유저가 로그인했다면, 유저의 계정 ID를 고유 식별자로 설정할 수 있습니다.
      TDAnalytics::login("TE");
      
      
      //슈퍼 속성을 설정한 후, 각 이벤트는 슈퍼 속성을 가지게 됩니다.
      TDJSONObject superProperties;
      superProperties.setString("channel", "TE");//문자열
      superProperties.setNumber("age",1);//숫자
      superProperties.setBool("isSuccess",true);//불린
      superProperties.setDateTime("birthday","2020-01-02 10:52:52.290");//시간

      TDJSONObject object;
      object.setString("key", "value");
      superProperties.setJsonObject("object", object);// 객체

      TDJSONObject object1;
      object1.setString("key", "value");
      vector<TDJSONObject> arr;  
      arr.push_back(object1);
      superProperties.setList("object_arr", arr); // 배열 객체

      vector<string> arr1;
      arr1.push_back("value");
      superProperties.setList("arr",arr1);//배열 
      //슈퍼 속성 설정
      TDAnalytics::setSuperProperties(superProperties);
      
      //자동 추적 활성화
      TDAnalytics::enableAutoTrack();
      
      //이벤트 업로드
      TDJSONObject eventProperties;
      eventProperties.setString("product_name", "product name");
      TDAnalytics::track("product_buy",eventProperties);
      
      //유저 속성 설정
      TDJSONObject userProperties;
      userProperties.setString("username", "TE");
      TDAnalytics::user_set(userProperties);
}