# Cocos2d-x
最新バージョン: v2.0.1
更新時間: 2023-11-23
ソースコード:Source Code (opens new window)、SDKダウンロード (opens new window)
# SDK実装
- Cocos2d-x SDK (opens new window)リソースファイルをダウンロード&解凍して、ThinkingAnalytics フォルダーを Classes フォルダーに配置します
CMakeLists.txt
以下の設定を入れます
list(APPEND GAME_SOURCE
Classes/ThinkingAnalytics/Common/TDJSONObject.cpp
)
list(APPEND GAME_HEADER
Classes/ThinkingAnalytics/Common/TDJSONObject.h
Classes/ThinkingAnalytics/Common/TDAnalytics.h
)
if(ANDROID)
list(APPEND GAME_SOURCE
Classes/ThinkingAnalytics/Android/TDAnalytics.cpp
)
elseif(WINDOWS)
list(APPEND GAME_HEADER
Classes/ThinkingAnalytics/Other/ThinkingSDKObject.h
)
list(APPEND GAME_SOURCE
Classes/ThinkingAnalytics/Other/TDAnalytics.cpp
)
elseif(MACOSX)
list(APPEND GAME_HEADER
Classes/ThinkingAnalytics/Other/ThinkingSDKObject.h
)
list(APPEND GAME_SOURCE
Classes/ThinkingAnalytics/Other/TDAnalytics.cpp
)
- Androidの構成設定
- proj.android の app ディレクトリの下に libs フォルダーを追加し、libs フォルダーに thinkingsdk.aar を配置します
- proj.android の app ディレクトリの下にある build.gradle に次の構成を追加します。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}
- iOSの構成設定
XCode を使用して iOS プロジェクトを開き、ThinkingAnalytics の下の iOS フォルダーを Classes/ThinkingAnalytics ディレクトリに直接ドラッグ アンド ドロップします。
Build Setting->Other Linker Flags
デバッグとリリースをそれぞれ-all_load
追加します
Build Phases->Compile Sources
中のTDAnalytics.mm-fobjc-arc
を追加します
Build Setting - Header Search Paths
に追加してください。
"$(SRCROOT)/../Classes/ThinkingAnalytics/iOS/ThinkingSDK.framework/Headers"
Build Setting
-Framework Search Paths
に追加してください。
"$(SRCROOT)/../Classes/ThinkingAnalytics/iOS"
Build Phases
-Link Binary With Libraries
WebKit.framework, GameController.framework, MediaPlayer.framework
# 初期設定
#include "./ThinkingAnalytics/Common/TDAnalytics.h"
using namespace thinkingdata::analytics;
//Initialize SDK in the main thread
//Method 1
TDAnalytics::init(TE_APP_ID, TE_SERVER_URL);
//Method 2
Config config(TE_APP_ID, TE_SERVER_URL);
TDAnalytics::init(config);
パラメータ説明:
APPID
: プロジェクトのAPPID、TEプロジェクト管理画面にて取得可能SERVER_URL
: データ送信URL- SaaSの場合はプロジェクト管理→データアクセスURLにて確認してください
- プライベート構築の場合は、データ送信URLを指定することが可能
Android 9.0 以降ではデフォルトで HTTP リクエストが制限されるため、必ず HTTPS プロトコルを使用してください。
# メイン機能
メイン機能を利用する前に、ユーザー識別ルールを確認してくだ;
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
TDAnalytics::login("TE");
Login
複数回呼び出すことができます。アカウント ID が以前に保存された ID と一致するかどうかを判断します。一致する場合、呼び出しは無視され、一致しない場合は以前の ID が上書きされます。
この方法ではログインイベントを送信されません
# 3.2 共通イベントプロパティ設定
共通イベントプロパティは全てのイベントに含まれるプロパティとなります。setSuperProperties
を呼び出しして設定することできます。イベント送信する前に、共通イベントプロパティを設定しておいてください。
例えば:プレイヤーのレベル、戦闘力、所持資源などのプロパティ
TDJSONObject superProperties;
superProperties.setString("channel", "TE");//string
superProperties.setNumber("age",1);//number
superProperties.setBool("isSuccess",true);//boolean
superProperties.setDateTime("birthday","2020-01-02 10:52:52.290");//time
TDJSONObject object;
object.setString("key", "value");
superProperties.setJsonObject("object", object);// object
TDJSONObject object1;
object1.setString("key", "value");
vector<TDJSONObject> arr;
arr.push_back(object1);
superProperties.setList("object_arr", arr); // array object
vector<string> arr1;
arr1.push_back("value");
superProperties.setList("arr",arr1);//array
TDAnalytics::setSuperProperties(superProperties);
共通イベントプロパティはキャッシュに保存され、Appを起動する度に呼び出す必要はありません。もし呼び出す場合はsetSuperProperties
:以前設定した共通イベントプロパティは上書きされます。
- イベントプロパティは
TDJSONObject
タイプの場合は、エレメントごとにプロパティとして切り分けられます - Key は当プロパティの名称でstringタイプで、英文字と数字、 "_"を含め、最大50文字。TEシステムは一律で小英文字に統一されます
- Value は当プロパティの値で、String, Number, Bloon, Time, object, array, list objectを対応しております。
イベントプロパティ、ユーザープロパティは共通イベントプロパティと一致する必要があります。
# 3.3 自動収集イベントのOn/Off
クライアント SDKは一部イベントを自動収集することが可能で、実際業務状況に応じてon/offにしてください。以下は参考となります。
TDAnalytics::enableAutoTrack();
# 3.4 イベント送信
track
を呼び出してイベントの送信を行います。事前にデータプランをご用意の上、送信してください。以下はモデルコードとなります。例:アイテム購入
TDJSONObject eventProperties;
eventProperties.setString("product_name", "アイテム名");
TDAnalytics::track("product_buy",eventProperties);
イベント名はstringタイプで、英文字と数字、 "_"を含め、最大50文字まで入力可能です。
# 3.5 ユーザープロパティ設定
一般のユーザープロパティに関しては、userSet
を利用して設定することができますが、 userSet
は元の値を上書きされます。本来該当プロパティに値がない場合は、プロパティが新規作成されます。以下はコード例となります。
//the username now is TA
TDJSONObject properties;
properties.setString("username", "TA");
TDAnalytics::userSet(properties);
//the username now is TE
TDJSONObject newProperties;
newProperties.setString("username", "TE");
TDAnalytics::userSet(newProperties);
プロパティ形式の要件は、イベントプロパティと一致しています。
# コード例のまとめ
以下のコード例で全ての操作が含まれます、以下の順で利用推奨しております:
#include "./ThinkingAnalytics/Common/TDAnalytics.h"
using namespace thinkingdata;
if (privacy policy is authorized) {
TDAnalytics::init(TE_APP_ID, TE_SERVER_URL);
//if the user has logged in, the account ID of the user could be set as the unique identifier
TDAnalytics::login("TE");
//After setting super properties, each event would have super properties
TDJSONObject superProperties;
superProperties.setString("channel", "TE");//string
superProperties.setNumber("age",1);//number
superProperties.setBool("isSuccess",true);//boolean
superProperties.setDateTime("birthday","2020-01-02 10:52:52.290");//time
TDJSONObject object;
object.setString("key", "value");
superProperties.setJsonObject("object", object);// object
TDJSONObject object1;
object1.setString("key", "value");
vector<TDJSONObject> arr;
arr.push_back(object1);
superProperties.setList("object_arr", arr); // array object
vector<string> arr1;
arr1.push_back("value");
superProperties.setList("arr",arr1);//array
//set super properties
TDAnalytics::setSuperProperties(superProperties);
//Enable auto-tracking
TDAnalytics::enableAutoTrack();
//upload events
TDJSONObject eventProperties;
eventProperties.setString("product_name", "product name");
TDAnalytics::track("product_buy",eventProperties);
//Set user properties
TDJSONObject userProperties;
userProperties.setString("username", "TE");
TDAnalytics::user_set(userProperties);
}