Cocos2d-x
接続する前に、まず接続前の準備をお読みください。
Cocos2d-x SDKはiOS、Android、Mac、Windowsプラットフォームで動作し、サイズは約6.8Mです
最新バージョン: v2.0.4
更新日: 2026-02-04
このドキュメントはv2.0.0以降のバージョンに適用されます。以前のバージョンについては、Cocos2d-x接続ガイド(V1)、SDKダウンロード(v1.3.5)を参照してください
1. SDKの統合
- Cocos2d-x SDKのリソースファイルをダウンロードして解凍し、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
)
endif()
- Android側の設定を追加します
- proj.androidのappディレクトリにlibsフォルダーを追加し、TDAnalytics.aar、TDCore.aar、TDThirdparty.aarをlibsフォルダーにコピーします
- proj.androidのapp/srcディレクトリに、cn/thinkingdata/analyticsフォルダーを階層ごとに作成し、TDAnalyticsCocosAPI.javaをcn/thinkingdata/analyticsフォルダーにコピーします
- proj.androidのappディレクトリにあるbuild.gradleに、次の設定を追加します
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}
- iOS側の設定を追加します
ios.toolchain.cmakeツールを使ってiOSプロジェクトをビルドします
CMakeLists.txtにiOS関連の設定を追加します
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(IOS)
# iOSの設定
list(APPEND GAME_HEADER
Classes/ThinkingAnalytics/iOS/TDAnalyticsCocosAPI.h
)
list(APPEND GAME_SOURCE
Classes/ThinkingAnalytics/iOS/TDAnalytics.mm
Classes/ThinkingAnalytics/iOS/TDAnalyticsCocosAPI.m
)
elseif(MACOSX)
list(APPEND GAME_HEADER
Classes/ThinkingAnalytics/Other/ThinkingSDKObject.h
)
list(APPEND GAME_SOURCE
Classes/ThinkingAnalytics/Other/TDAnalytics.cpp
)
endif()
if(IOS)
# iOSの設定
set(CMAKE_EXE_LINKER_FLAGS -ObjC)
endif()
- XcodeでiOSプロジェクトを開き、ThinkingAnalytics配下のiOSフォルダーにある
ThinkingSDK.frameworkとTAThirdParty.frameworkを、指定したXcodeプロジェクトのClasses/ThinkingAnalytics/iOSディレクトリにドラッグ&ドロップします(下図参照)
- 設定は完了です。バージョンが2.0.2未満の場合は、Classes/ThinkingAnalytics/iOS/TDAnalyticsCocosAPI.mのヘッダーファイルのインポートを手動で変更する必要があります
#import "ThinkingAnalyticsSDK.h"
//次のように変更
#import <ThinkingSDK/ThinkingSDK.h>
proj.ios_macにあるXcodeプロジェクトを直接開きます
- XcodeでiOSプロジェクトを開き、ThinkingAnalytics配下のCommonフォルダーとiOSフォルダーを、XcodeプロジェクトのClassesディレクトリにドラッグ&ドロップします(下図参照)
Build Setting->Other Linker Flagsに-ObjCを追加します
Build Setting-Framework Search Pathsに次を追加します
"$(SRCROOT)/../Classes/ThinkingAnalytics/iOS"
Build Phases-Link Binary With Libraries
WebKit.framework, GameController.framework, MediaPlayer.framework
- 設定は完了です。バージョンが2.0.2未満の場合は、Classes/ThinkingAnalytics/iOS/TDAnalyticsCocosAPI.mのヘッダーファイルのインポートを手動で変更する必要があります
#import "ThinkingAnalyticsSDK.h"
//次のように変更
#import <ThinkingSDK/ThinkingSDK.h>
2. 初期化
#include "./ThinkingAnalytics/Common/TDAnalytics.h"
using namespace thinkingdata::analytics;
// メインスレッドでSDKを初期化
//方法1
TDAnalytics::init(TA_APP_ID, TA_SERVER_URL);
//方法2
TDConfig config(TA_APP_ID, TA_SERVER_URL);
TDAnalytics::init(config);
パラメータの説明:
-
APPID: プロジェクトのAPPIDです。AEの「プロジェクト管理」ページで取得できます -
SERVER_URL: データの送信先URL- クラウドサービスをご利用の場合は、次を入力します: https://global-receiver-ta.thinkingdata.cn
- プライベートデプロイ版をご利用の場合は、データ収集アドレスにドメインをバインドし、HTTPS証明書を設定してください:https://データ収集アドレスにバインドしたドメイン
Android 9.0以降ではデフォルトでHTTPリクエストが制限されているため、必ずHTTPSプロトコルを使用してください
3. よく使う機能
よく使う機能を使用する前に、まずユーザー識別ルールを確認することをお勧めします。SDKはデフォルトで乱数を生成してゲストIDとし、ゲストIDをローカルに永続的に保存します。ユーザーがログインするまでは、ゲストIDが識別IDとして使われます。注意:ゲストIDは、ユーザーがAppを再インストールしたり、デバイスを変更したりすると変わります。
3.1 アカウントIDの設定
ユーザーがログインする際にLoginを呼び出してユーザーのアカウントIDを設定できます。AEプラットフォームはアカウントIDを識別IDとして使用し、設定したアカウントIDはLogoutを呼び出すまで保持されます。Loginを複数回呼び出すと、以前のアカウントIDが上書きされます。
// ユーザーのログイン時の一意の識別子。このデータは送信データの#account_idに対応し、この場合#account_idの値はTAになります
TDAnalytics::login("TA");
Loginは複数回呼び出せます。呼び出すたびに、渡されたアカウントIDが以前に保存したIDと一致するかどうかを判定し、一致する場合は呼び出しを無視し、一致しない場合は以前のIDを上書きします。
このメソッドはログインイベントを送信しません
3.2 共通イベントプロパティの設定
共通イベントプロパティとは、すべてのイベントに付与されるプロパティのことです。setSuperPropertiesを呼び出して共通イベントプロパティを設定できます。イベントを送信する前に、共通イベントプロパティを設定しておくことを推奨します。ユーザーの会員レベルや流入チャネルなどの重要なプロパティは、すべてのイベントに設定する必要があります。その場合は、これらのプロパティを共通イベントプロパティとして設定できます。
TDJSONObject superProperties;
superProperties.setString("channel", "ta");//文字列
superProperties.setNumber("age",1);//数値
superProperties.setBool("isSuccess",true);//ブール値
superProperties.setDateTime("birthday","2020-01-02 10:52:52.290");//時間
TDJSONObject object;
object.setString("key", "value");
superProperties.setJsonObject("object", object);// オブジェクト
TDJSONObject object1;
object1.setString("key", "value");
vector<TDJSONObject> arr;
arr.push_back(object1);
superProperties.setList("object_arr", arr); // オブジェクトグループ
vector<string> arr1;
arr1.push_back("value");
superProperties.setList("arr",arr1);//配列
TDAnalytics::setSuperProperties(superProperties);
共通イベントプロパティはキャッシュに保存されるため、Appを起動するたびに呼び出す必要はありません。setSuperPropertiesを呼び出して、以前に設定済みの共通イベントプロパティを送信した場合は、以前のプロパティが上書きされます。
- イベントプロパティは
TDJSONObject型で、各要素が1つのプロパティを表します - Keyはプロパティの名前で、文字列型です。英字で始まり、数字、英字、アンダースコア"_"のみを含めることができます。最大長は50文字です。英字の大文字と小文字は区別されず、AEではすべて小文字に変換されます
- Valueはプロパティの値で、文字列、数値、ブール値、時間、オブジェクト、オブジェクトグループ、配列に対応しています
イベントプロパティとユーザープロパティの要件は、共通イベントプロパティと同じです
3.3 自動収集の有効化
次のコード例では、インストール、起動、終了イベントを有効にしています。SDKの自動収集機能について詳しくは、自動収集機能の詳細を参照してください
// 自動収集を有効化
TDAnalytics::enableAutoTrack();
3.4 イベントの送信
Trackを呼び出してイベントを送信できます。事前に整理したトラッキングドキュメントに従って、イベントのプロパティと送信条件を設定することをお勧めします。ここでは、ユーザーが商品を購入する場合を例にします:
TDJSONObject eventProperties;
eventProperties.setString("product_name", "商品名");
TDAnalytics::track("product_buy", eventProperties);
イベント名は文字列型で、英字で始まり、数字、英字、アンダースコア"_"を含めることができます。最大長は50文字です。
3.5 ユーザープロパティの設定
一般的なユーザープロパティは、userSetを呼び出して設定できます。このインターフェースで送信したプロパティは、既存のプロパティ値を上書きします。そのユーザープロパティが以前に存在しない場合は新しく作成され、タイプは渡されたプロパティのタイプと同じになります。ここでは、ユーザー名の設定を例にします:
//この時点でusernameはTA
TDJSONObject properties;
properties.setString("username", "TA");
TDAnalytics::userSet(properties);
//この時点でuserNameはAE
TDJSONObject newProperties;
newProperties.setString("username", "TE");
TDAnalytics::userSet(newProperties);
プロパティの形式の要件は、イベントプロパティと同じです。
4. ベストプラクティス
次のサンプルコードには、上記のすべての操作が含まれています。次の手順で使用することをお勧めします:
#include "./ThinkingAnalytics/Common/TDAnalytics.h"
using namespace thinkingdata::analytics;
if (プライバシーポリシーに同意済み) {
//SDKを初期化
TDAnalytics::init(TA_APP_ID, TA_SERVER_URL);
//自動収集イベントを有効化
TDAnalytics::enableAutoTrack();
//ユーザーがログイン済みの場合は、ユーザーのアカウントIDを一意の識別子として設定できます
TDAnalytics::login("TA");
//共通イベントプロパティを設定すると、すべてのイベントに共通イベントプロパティが付与されます
TDJSONObject superProperties;
superProperties.setString("channel", "ta");//文字列
superProperties.setNumber("age",1);//数値
superProperties.setBool("isSuccess",true);//ブール値
superProperties.setDateTime("birthday","2020-01-02 10:52:52.290");//時間
TDJSONObject object;
object.setString("key", "value");
superProperties.setJsonObject("object", object);// オブジェクト
TDJSONObject object1;
object1.setString("key", "value");
vector<TDJSONObject> arr;
arr.push_back(object1);
superProperties.setList("object_arr", arr); // オブジェクトグループ
vector<string> arr1;
arr1.push_back("value");
superProperties.setList("arr",arr1);//配列
TDAnalytics::setSuperProperties(superProperties);
//イベントを送信
TDJSONObject eventProperties;
eventProperties.setString("product_name", "商品名");
TDAnalytics::track("product_buy",eventProperties);
//ユーザープロパティを設定
TDJSONObject userProperties;
userProperties.setString("username", "TE");
TDAnalytics::userSet(userProperties);
}

