menu
Is this helpful?

# 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);