# C++
最新バージョン:v2.0.0
更新時間:2023-11-30
ダウンロード:Source Code (opens new window)
# SDK実装
- ソースコードをコンパイルして、
libthinkingdata.a
ファイルを取得します。- TE SDKはrapidjson (opens new window)解析ライブラリに依存していますので、ローカルにrapidjsonライブラリをダウンロードする必要があります。
- 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()
rapidjsonライブラリは純粋な
.h
ライブラリであり、そのためプロジェクトにヘッダーファイルとしてインポートされます。- もしもあなたのプロジェクトがrapidjsonライブラリをインポートしていない場合は、以下のヘッダーファイルをインポートしてください:
rapidjson ライブラリがすでにプロジェクトに導入されている場合は、TE SDK のヘッダーファイルのみをインポートしてください。次に、TDJsonParse.h ファイルの内容を変更し、rapidjson ライブラリのパスが正しいかどうかを確認してください。
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();