目录
此内容是否有帮助?

# C

::: Tips

実装する前にデータアクセスの準備を確認しておいてください。

:::

最新バージョン:1.3.6

更新時間:2022-06-22

ダウンロードSource Code (opens new window)

# SDK実装

  1. C SDK (opens new window)をダウンロードし、解凍後には以下のファイルをプロジェクトに引用します。
./c-sdk_version/include/thinkingdata.h
./c-sdk_version/lib/libthinkingdata.a
  1. Logbusをインストール

TEシステムにより迅速かつ正確なデータを転送するために、SDK+LogBusの併用でサーバデータのデータレポートを推奨しております。

# 初期設定

SDK初期設定のコード例:

TAConfig *config = ta_init_config();
TA_ASSERT(TA_OK == ta_add_string("file_path", "LOG_DIRECTORY", strlen("LOG_DIRECTORY"), config));

struct TAConsumer *consumer = NULL;
if (TA_OK != ta_init_logging_consumer(&consumer, config)) {
     fprintf(stderr, "Failed to initialize the consumer.");
     return 1;
 }
ta_free_properties(config);
ThinkingdataAnalytics *ta = NULL;
if (TA_OK != ta_init(consumer, &ta)) {
     fprintf(stderr, "Failed to initialize the SDK.");
     return 1;
}

LOG_DIRECTORYはローカルアクセスファイルのアドレスとなります。LogBusのモニターアドレスをこのアドレスに設定すれば自動でアップロードされます。

# メイン機能

ゲストIDとアカウントIDをうまく紐付けるために、もしゲーム内でゲストIDとアカウントID両方を使われる場合は、それらのIDを同時にアップロードするのを推奨しております。同時にアップロードしない場合は、ユーザーを重複にカウントされてしまう可能性があります。

# 3.1 イベント送信

trackを利用してイベントの送信を行います。事前にデータプランをご用意の上、送信してください。以下はモデルコードとなります。

TAProperties *properties = ta_init_properties();

TA_ASSERT(TA_OK == ta_add_string("#ip", "192.168.1.1", strlen("192.168.1.1"), properties));

TA_ASSERT(TA_OK == ta_add_string("channel", "ta", strlen("ta"), properties));//string
TA_ASSERT(TA_OK == ta_add_int("age", 1, properties)); //number
TA_ASSERT(TA_OK == ta_add_bool("is_success", true, properties));//bool
TA_ASSERT(TA_OK == ta_add_date("birthday", time(NULL), 0, properties));//time
// array
TA_ASSERT(TA_OK == ta_append_array("arr", "value", strlen("value"), properties));
TA_ASSERT(TA_OK == ta_append_array("arr", "value1", strlen("value1"), properties));
// object
TAProperties *object = ta_init_custom_properties("object");
TA_ASSERT(TA_OK == ta_add_string("key", "value", strlen("value"), object));
TA_ASSERT(TA_OK == ta_add_property(object, properties));
// array object
TAProperties *object1 = ta_init_custom_properties("object1");
TA_ASSERT(TA_OK == ta_add_string("key", "value", strlen("value"), object1));
TA_ASSERT(TA_OK == ta_append_properties("object_arr", object1, properties));

TA_ASSERT(TA_OK == ta_track("account_id", "distinct_id", "payment", properties, ta));
ta_free_properties(properties);
  • イベント名称はstringタイプで、英文字と数字、 "_"を含め、最大50文字
  • Key は当プロパティの名称でstringタイプで、英文字と数字、 "_"を含め、最大50文字。TEシステムは一律で小英文字に統一されます
  • Value は当プロパティの値で、String, Number, Bloon, Time, object, array, list objectを対応しております。

ユーザープロパティはイベントプロパティと一致する必要があります

# 3.2 ユーザープロパティを設定

一般のユーザープロパティに関しては、user_setを利用して設定することができますが、 UserSetは元の値を上書きされます。本来該当プロパティに値がない場合は、プロパティが新規作成されます。以下はコード例となります。

//UserName is TA
TAProperties *user_properties = ta_init_properties();
TA_ASSERT(TA_OK == ta_add_string("user_name", "TA", strlen("TA"), user_properties));
TA_ASSERT(TA_OK == ta_user_set(account_id, distinct_id, user_properties,ta));
ta_free_properties(user_properties);

//UserName is TE
TAProperties *user_properties2 = ta_init_properties();
TA_ASSERT(TA_OK == ta_add_string("user_name", "TE", strlen("TE"), user_properties2));
TA_ASSERT(TA_OK == ta_user_set(account_id, distinct_id, user_properties2,ta));
ta_free_properties(user_properties2);

# コード例のまとめ

以下のコード例で全ての操作が含まれます、以下の順で利用推奨しております。

TAConfig *config = ta_init_config();
//LOG_DIRECTORY is the local folder address
TA_ASSERT(TA_OK == ta_add_string("file_path", "LOG_DIRECTORY", strlen("LOG_DIRECTORY"), config));

struct TAConsumer *consumer = NULL;
if (TA_OK != ta_init_logging_consumer(&consumer, config)) {
     fprintf(stderr, "Failed to initialize the consumer.");
     return 1;
 }
ta_free_properties(config);
ThinkingdataAnalytics *ta = NULL;
if (TA_OK != ta_init(consumer, &ta)) {
       fprintf(stderr, "Failed to initialize the SDK.");
       return 1;
 }
 
TAProperties *properties = ta_init_properties();
//Set the user's ip address, and TE will analyze the user's geographical location information according to the IP address
TA_ASSERT(TA_OK == ta_add_string("#ip", "192.168.1.1", strlen("192.168.1.1"), properties));
TA_ASSERT(TA_OK == ta_add_string("channel", "ta", strlen("ta"), properties));//string
TA_ASSERT(TA_OK == ta_add_int("age", 1, properties)); //number
TA_ASSERT(TA_OK == ta_add_bool("is_success", true, properties));//bool
TA_ASSERT(TA_OK == ta_add_date("birthday", time(NULL), 0, properties));//datetime
//array
TA_ASSERT(TA_OK == ta_append_array("arr", "value", strlen("value"), properties));
TA_ASSERT(TA_OK == ta_append_array("arr", "value1", strlen("value1"), properties));
//object
TAProperties *object = ta_init_custom_properties("object");
TA_ASSERT(TA_OK == ta_add_string("key", "value", strlen("value"), object));
TA_ASSERT(TA_OK == ta_add_property(object, properties));
//array object
TAProperties *object1 = ta_init_custom_properties("object1");
TA_ASSERT(TA_OK == ta_add_string("key", "value", strlen("value"), object1));
TA_ASSERT(TA_OK == ta_append_properties("object_arr", object1, properties));
TA_ASSERT(TA_OK == ta_track("account_id", "distinct_id", "payment", properties, ta));
ta_free_properties(properties);

//set user properties
TAProperties *user_properties = ta_init_properties();
TA_ASSERT(TA_OK == ta_add_string("user_name", "TA", strlen("TA"), user_properties));
TA_ASSERT(TA_OK == ta_user_set(account_id, distinct_id, user_properties,ta));
ta_free_properties(user_properties);

//Calling the flush API will immediately write the data to the file. 
//In the production environment, pay attention to avoid IO or network overhead caused by frequent calls to flush
ta_flush(ta);