menu
Is this helpful?

# C++

::: 팁

GitHub (opens new window)에서 C++ SDK의 소스 코드를 얻을 수 있습니다.

C++ SDK는 Mac, Windows를 지원하며, C++11 버전이 필요하고, 크기는 약 144KB입니다.

:::

최신 버전: 1.3.9

업데이트 시간: 2023-11-01

다운로드: SDK Source Code (opens new window)

# 1. SDK 구현

# 1.1 SDK 다운로드

SDK Source Code (opens new window)를 다운로드하고 압축을 풀고 나서 cpp-client/cpp 폴더로 들어갑니다.

include는 SDK의 헤더 파일이고, src는 SDK의 소스 코드 파일이며, thirdparty는 의존하는 서드 파티 라이브러리입니다.

# 1.2 의존 추가

C++ SDK가 의존하는 sqlite, curl, zlib 라이브러리는 플랫폼의 차이로 인해 라이브러리의 형식이 다릅니다. TE에서 컴파일한 라이브러리를 사용할 수 있지만, 자체적으로 컴파일한 라이브러리를 사용할 수도 있습니다.

# 1.2.1 TE에서 컴파일한 라이브러리 사용

라이브러리는 Windows의 x64 플랫폼에서 MGWin 컴파일러로 생성되며, 서드 파티 폴더 내의 컴파일된 라이브러리가 프로젝트에 구성됩니다.

(.dll은 동적 라이브러리, .lib은 정적 라이브러리)

# 1.2.2 자체 컴파일

Windows 플랫폼을 예로 들면:

curl (opens new window) 라이브러리를 다운로드하고, 압축을 풀고 난 후 winbuild 디렉토리로 변경합니다. 컴파일 명령은 다음과 같습니다. 컴파일 결과는 curl 디렉토리 builds 아래에 있습니다.

nmake /f Makefile.vc mode=static ENABLE_IDN=no

zlib (opens new window) 라이브러리를 다운로드하고, 압축을 풀고 난 후, 컴파일 명령을 실행하면, 컴파일 결과가 zlib 디렉토리에 있습니다.

nmake -f win32/Makefile.msc

sqlite (opens new window) 라이브러리를 다운로드하고, 지정된 플랫폼의 라이브러리를 선택합니다.

WARNING

커맨드 라인뿐만 아니라, Visual Studio, Clion 등의 IDE(통합 개발 환경)을 사용하여, 해당 플랫폼용 라이브러리를 생성할 수도 있습니다.

# 1.3 SDK 구현 작업

# 1.3.1 CMake를 사용한 구현

CMake를 사용하여 C++ SDK를 구현하고, cpp 폴더를 프로젝트에 복사한 후, Windows 및 Mac용 다음 구성을 CMakeLists.txt 파일에 추가합니다.

C++ 버전 설정:

set(CMAKE_CXX_STANDARD 11)

헤더 파일 임포트:

include_directories(cpp/include)

Windows 플랫폼 구성 추가:

if(WIN32)
    if(CMAKE_SIZEOF_VOID_P EQUAL 8) 
        include_directories(cpp/thirdparty/x64/curl/include cpp/thirdparty/x64/zlib/include cpp/thirdparty/x64/sqlite/include cpp/thirdparty/x64/openssl/include)
        link_directories(cpp/thirdparty/x64/curl/lib cpp/thirdparty/x64/zlib/lib cpp/thirdparty/x64/sqlite/lib cpp/thirdparty/x64/openssl/lib)
    else() 
        include_directories(cpp/thirdparty/x86/curl/include cpp/thirdparty/x86/zlib/include cpp/thirdparty/x86/sqlite/include cpp/thirdparty/x86/openssl/include)
        link_directories(cpp/thirdparty/x86/curl/lib cpp/thirdparty/x86/zlib/lib cpp/thirdparty/x86/sqlite/lib cpp/thirdparty/x86/openssl/lib)
    endif()
    add_library(thinkingdata SHARED cpp/src/ta_analytics_sdk.cpp cpp/src/ta_cpp_helper.cpp cpp/src/ta_cpp_network.cpp cpp/src/ta_cpp_utils.cpp cpp/src/ta_sqlite.cpp cpp/src/ta_timer.cpp cpp/src/ta_event_task.cpp cpp/src/ta_cpp_send.cpp cpp/src/ta_json_object.cpp cpp/src/ta_cJSON.c cpp/src/ta_encrypt.cpp cpp/src/ta_calibrated_time.cpp cpp/src/ta_flush_task.cpp)
    target_link_libraries(thinkingdata libcurl sqlite3 zlibwapi libssl libcrypto)
endif()

Mac 플랫폼 구성 추가:

if (CMAKE_HOST_APPLE)
    find_library(COCOA Cocoa)
    find_library(IOKIT IOKit)
    find_package(OpenSSL REQUIRED)
    include_directories(${OPENSSL_INCLUDE_DIR})
    link_directories(${OPENSSL_LIBRARIES})
    add_library(thinkingdata SHARED cpp/src/ta_analytics_sdk.cpp cpp/src/ta_cpp_helper.cpp cpp/src/ta_cpp_network.cpp cpp/src/ta_cpp_utils.cpp cpp/src/ta_sqlite.cpp cpp/src/ta_timer.cpp cpp/src/ta_event_task.cpp cpp/src/ta_cpp_send.cpp cpp/src/ta_json_object.cpp cpp/src/ta_cJSON.c cpp/src/ta_mac_tool.mm cpp/src/ta_encrypt.cpp cpp/src/ta_calibrated_time.cpp cpp/src/ta_flush_task.cpp)
    target_link_libraries(thinkingdata curl z sqlite3 ${OPENSSL_LIBRARIES} ${COCOA} ${IOKIT})
endif()

# 1.3.2 자체 컴파일

IDE(통합 개발 환경)를 사용하여 TE 라이브러리를 스스로 컴파일할 수 있습니다. Clion을 사용하여 cpp-client를 열 경우, 프로젝트를 실행한 후 cmake-build-release 디렉토리에서 libthinkingdata라는 이름의 라이브러리를 찾을 수 있습니다. libthinkingdata 라이브러리를 프로젝트에 구성합니다.

# 1.3.3 소스 코드 사용으로 구현

1.2의 서드 파티 의존성 검사를 설정한 후, include 폴더와 src 폴더를 프로젝트에 추가합니다.

# 2. SDK 초기 설정

#include "ta_analytics_sdk.h"
#include "ta_json_object.h"

using namespace thinkingdata;

ThinkingAnalyticsAPI::Init(SERVER_URL, APPID);

파라미터 설명:

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

# 3. 메인 기능

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

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

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

# 3.1 계정 ID 설정

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

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

Login을 여러 번 호출할 수 있으며, 호출할 때마다 들어오는 계정 ID가 이전에 저장된 ID와 일치하는지 여부가 결정됩니다. 일치하는 경우 호출은 무시되고, 일치하지 않는 경우 이전 ID가 덮어씌워집니다.

이 방법에서는 로그인 이벤트가 전송되지 않습니다.

# 3.2 이벤트 전송

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

TDJSONObject 이벤트_속성;
이벤트_속성.SetString("name1", "name1"); //문자열
이벤트_속성.SetNumber("test_number_int", 3); //숫자
이벤트_속성.SetBool("test_bool", true); //불린
이벤트_속성.SetDateTime("test_time1", time(NULL), 0); //시간
std::vectorstd::string test_list;
test_list.push_back("item11");
test_list.push_back("item21");
이벤트_속성.SetList("test_list1", test_list); //배열
ThinkingAnalyticsAPI::Track("CPP_event", 이벤트_속성);
  • 이벤트 이름은 문자열 타입이며, 영문자와 숫자, "_"를 포함하며, 최대 50자입니다.
  • 이벤트 속성은 TDJSONObject 타입이며, 각 요소별로 속성을 나타냅니다.
    • Key는 해당 속성의 이름이며 문자열 타입이고, 영문자와 숫자, "_"를 포함하며, 최대 50자입니다. TE시스템은 일괄적으로 소문자로 통일됩니다.
    • Value는 해당 속성의 값이며, String, Number, Bloon, Time, object, array, list object를 지원합니다.

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

# 3.3 유저 속성 설정

일반적인 유저 속성에 대해서는, UserSet을 사용하여 설정할 수 있으며, UserSet은 원래 값이 덮어씌워집니다. 처음에 해당 속성에 값이 없는 경우, 속성이 새로 생성됩니다. 다음은 코드 예시입니다.

TDJSONObject userProperties;
userProperties.SetString("user_name", "TA");
ThinkingAnalyticsAPI::UserSet(userProperties);

# 4. 코드 예시 요약

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

#include "ta_analytics_sdk.h"
using namespace thinkingdata;
//SDK 초기화
ThinkingAnalyticsAPI::Init(SERVER_URL, APPID);
//유저가 로그인한 경우, 유저의 계정 ID를 신분 식별자로 설정할 수 있습니다.
ThinkingAnalyticsAPI::Login("TA");
//이벤트 전송
TDJSONObject 이벤트_속성;
이벤트_속성.SetString("name1", "name1");//문자열
이벤트_속성.SetNumber("test_number_int", 3);//숫자
이벤트_속성.SetBool("test_bool", true);//불린
이벤트_속성.SetDateTime("test_time1", time(NULL), 0);//시간
std::vectorstd::string test_list;
test_list.push_back("item11");
test_list.push_back("item21");
이벤트_속성.SetList("test_list1", test_list);//리스트
ThinkingAnalyticsAPI::Track("CPP_event", 이벤트_속성);;
//유저 속성 설정
TDJSONObject userProperties;
userProperties.SetString("user_name", "TA");
ThinkingAnalyticsAPI::UserSet(userProperties);