menu
Is this helpful?

# C++

最新バージョン:v2.0.0-beta.1

更新時間:2023-10-08

ダウンロード:Source Code (opens new window)

# SDK実装

  1. ソースコードをコンパイルして、libthinkingdata.aファイルを取得します。
  2. TE SDKはrapidjson (opens new window)解析ライブラリに依存していますので、ローカルにrapidjsonライブラリをダウンロードする必要があります。
  3. C++ SDKのソースコードをダウンロードし、SDK内のCMakeLists.txtファイルを変更して、必要なデータコンシューマーを選択してパッケージ化します(詳細はSDKのソースコード内のCMakeLists.txtファイルを参照してください)。ここでは最も一般的なlogconsumerを例に挙げます:
cmake_minimum_required(VERSION 3.12)
project(ThinkingData)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 11)

message(STATUS "[${PROJECT_NAME}] current cmake version: ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
message(STATUS "[${PROJECT_NAME}] CMAKE_HOST_SYSTEM: ${CMAKE_HOST_SYSTEM} ")

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE release CACHE STRING "Build Type" FORCE)
endif()

message(STATUS "[${PROJECT_NAME}] Build type:${CMAKE_BUILD_TYPE}")

message(STATUS "[${PROJECT_NAME}] Debug configuration:${CMAKE_CXX_FLAGS_DEBUG}")

message(STATUS "[${PROJECT_NAME}] release configuration:${CMAKE_CXX_FLAGS_RELEASE}")

message(STATUS "[${PROJECT_NAME}] release configuration with debug info:${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")

message(STATUS "[${PROJECT_NAME}] minimal release configuration:${CMAKE_CXX_FLAGS_MINSIZEREL}")

include_directories(include)

 #
 # log consumer. Recommended for production environments
 #
 set(TE_LIB_NAME thinkingdata)
 add_library(${TE_LIB_NAME} src/ThinkingAnalyticsAPI.cpp src/TAUtils.cpp src/TALoggerConsumer.cpp src/TDConsumer.cpp)
 if(UNIX)
   find_package(Threads REQUIRED)
   target_link_libraries(${TE_LIB_NAME} Threads::Threads)
 endif()
  1. rapidjsonライブラリは純粋な .h ライブラリであり、そのためプロジェクトにヘッダーファイルとしてインポートされます。

  2. もしもあなたのプロジェクトがrapidjsonライブラリをインポートしていない場合は、以下のヘッダーファイルをインポートしてください:

  3. rapidjson ライブラリがすでにプロジェクトに導入されている場合は、TE SDK のヘッダーファイルのみをインポートしてください。次に、TDJsonParse.h ファイルの内容を変更し、rapidjson ライブラリのパスが正しいかどうかを確認してください。

  4. Logbusをインストール

TEシステムにより迅速かつ正確なデータを転送するために、SDK+LogBusの併用でサーバデータのデータレポートを推奨しております。

# 初期設定

SDKの初期設定のコード例:

#include "../include/TDAnalytics.h"
#include "../include/TDLoggerConsumer.h"
#include "../include/TDDebugConsumer.h"
#include "../include/TDBatchConsumer.h"

using namespace thinkingDataAnalytics;

SDKの初期化の例です:

TDLoggerConsumer::Config config = TDLoggerConsumer::Config("LOG_DIRECTORY", 20, 500, TDLoggerConsumer::HOURLY);
config.fileNamePrefix = "te";
config.rotateMode = TDLoggerConsumer::HOURLY;

TDConsumer *consumer = new TDLoggerConsumer(config);
TDAnalytics te(*consumer, false);

LOG_DIRECTORYはローカルに書き込まれるフォルダのアドレスです。LogBusの監視フォルダのアドレスをここに設定するだけで、LogBusを使用してデータを監視およびアップロードできます。

# メイン機能

ゲストIDとアカウントIDをうまく紐付けるために、もしゲーム内でゲストIDとアカウントID両方を使われる場合は、それらのIDを同時にアップロードするのを推奨しております。同時にアップロードしない場合は、ユーザーを重複にカウントされてしまう可能性があります。

# 3.1 イベント送信

trackを利用してイベントの送信を行います。事前にデータプランをご用意の上、送信してください。以下はモデルコードとなります。

TDPropertiesNode event_properties;
event_properties.SetString("name1", "XZ_debug");
event_properties.SetString("name2", "logbugs");
event_properties.SetString("name3", "name3");
event_properties.SetString("#uuid", "1234567890");
event_properties.SetNumber("test_number_int", 3);
event_properties.SetNumber("test_number_double", 3.14);
event_properties.SetBool("test_bool", true);
std::string test_string = "test_string";
event_properties.SetString("test_stl_string1", test_string);
event_properties.SetDateTime("test_time1", time(nullptr), 0);
timeb t = {};
ftime(&t);
event_properties.SetDateTime("#time", t.time, t.millitm);
std::vector<std::string> test_list;
test_list.push_back("item11");
test_list.push_back("item21");
event_properties.SetList("test_list1", test_list);

// track event
te.track(accountId, distincId, eventName, event_properties);
  • イベント名称はstringタイプで、英文字と数字、 "_"を含め、最大50文字
  • Key は当プロパティの名称でstringタイプで、英文字と数字、 "_"を含め、最大50文字。TEシステムは一律で小英文字に統一されます
  • Value は当プロパティの値で、String, Number, Bloon, Time, object, array, list objectを対応しております。

ユーザープロパティはイベントプロパティと一致する必要があります

# 3.2 ユーザープロパティを設定

一般のユーザープロパティに関しては、user_setを利用して設定することができますが、 UserSetは元の値を上書きされます。本来該当プロパティに値がない場合は、プロパティが新規作成されます。以下はコード例となります。

// user_set
TDPropertiesNode userSet_properties;
userSet_properties.SetString("userName", "test");
//上传用户属性
te.user_set(accountId, distincId, userSet_properties);

# コード例のまとめ

以下のコード例で全ての操作が含まれます、以下の順で利用推奨しております。

// Import header files (the path varies for each platform and IDE, please adjust accordingly)
#include "../include/TDAnalytics.h"
#include "../include/TDLoggerConsumer.h"

using namespace thinkingDataAnalytics;

TDLoggerConsumer::Config config = TDLoggerConsumer::Config("LOG_DIRECTORY", 20, 500, TDLoggerConsumer::HOURLY);
config.fileNamePrefix = "te";
config.rotateMode = TDLoggerConsumer::HOURLY;

TDConsumer *consumer = new TDLoggerConsumer(config);
TDAnalytics te(*consumer, false);

//Upload event
TDPropertiesNode event_properties;
event_properties.SetString("name1", "XZ_debug");;
event_properties.SetNumber("test_number_int", 3);
event_properties.SetBool("test_bool", true);
te.track(accountId, distincId, eventName, event_properties);

//Upload user properties
TDPropertiesNode userSet_properties;
userSet_properties.SetString("userName", "test");
te.user_set(accountId, distincId, userSet_properties);

// Calling the flush interface will immediately write data to the file. In a production environment, be careful to avoid frequent calls to flush that may cause IO or network overhead issues.
// In general, there is no need to call manually.
te.flush();