# C++
TIP
GitHub (opens new window)でC++SDKのソースコードを取得できます。
C++SDKはMac、Windowsに対応しており、C++11パージョン必要で、サイズは約144KBとなります。
最新バージョン: 1.4.1
更新時間: 2024-01-04
ダウンロード:SDK Source Code (opens new window)
# 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 独自でコンパイル
windowプラットフォームを例として:
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 フォルダーをプロジェクトに追加します。
# 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の場合はプロジェクト管理→データアクセスURLにて確認してください
- プライベート構築の場合は、データ送信URLを指定することが可能
# メイン機能
メイン機能を利用する前に、ユーザー識別ルールを確認してくだ;
SDKはゲストIDを自動で作成し、ローカルで保存される;ユーザーがログインする前に、ゲストIDを身分識別IDとして使われます。
注意:ゲストIDはユーザーがアプリを再インストール時にリセットされます。
# 3.1 アカウントIDを設置
ユーザーがログインする時に、login
を呼び出して、ユーザーのアカウントIDを設定できます。TEプラットフォームはアカウントIDを身分識別IDとしてlogout
を呼び出しする前までに保留します。login
を数回呼び出すと、前のアカウントIDが上書きされます。
// The login unique identifier of the user, corresponding to the #account_id in data tracking. #Account_id now is TE
ThinkingAnalyticsAPI::Login("TE");
Login
複数回呼び出すことができ、呼び出しごとに、着信したアカウント ID が以前に保存された ID と一致するかどうかが判断されます。一致する場合、呼び出しは無視され、一致しない場合は、以前の ID が上書きされます。
この方法ではログインイベントを送信されません
# 3.2 イベント送信
track
を呼び出してイベントの送信を行います。事前にデータ収集プランをご用意の上、送信してください。以下はモデルコードとなります。例:アイテム購入
TDJSONObject event_properties;
event_properties.SetString("name1", "name1"); //string
event_properties.SetNumber("test_number_int", 3); //number
event_properties.SetBool("test_bool", true); //boolean
event_properties.SetDateTime("test_time1", time(NULL), 0); //time
std::vector<std::string> test_list;
test_list.push_back("item11");
test_list.push_back("item21");
event_properties.SetList("test_list1", test_list); //array
ThinkingAnalyticsAPI::Track("CPP_event", event_properties);
- イベント名称はstringタイプで、英文字と数字、 "_"を含め、最大50文字
- イベントプロパティは
TDJSONObject
タイプで、エレメントごとでプロパティを示されます。- Key は当プロパティの名称でstringタイプで、英文字と数字、 "_"を含め、最大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);
# コード例のまとめ
以下のコード例で全ての操作が含まれます、以下の順で利用推奨しております。
#include "ta_analytics_sdk.h"
using namespace thinkingdata;
//Initialize SDK
ThinkingAnalyticsAPI::Init(SERVER_URL, APPID);
//If the user has logged in, you can set the user's account ID as the unique identifier for their identity.
ThinkingAnalyticsAPI::Login("TA");
//Send event
TDJSONObject event_properties;
event_properties.SetString("name1", "name1");//String
event_properties.SetNumber("test_number_int", 3);//Numbers
event_properties.SetBool("test_bool", true);//bool
event_properties.SetDateTime("test_time1", time(NULL), 0);//time
std::vector<std::string> test_list;
test_list.push_back("item11");
test_list.push_back("item21");
event_properties.SetList("test_list1", test_list);//list
ThinkingAnalyticsAPI::Track("CPP_event", event_properties);;
//Set user Properties
TDJSONObject userProperties;
userProperties1.SetString("user_name", "TA");
ThinkingAnalyticsAPI::UserSet(userProperties);