Erlang
このガイドでは、Erlang SDKを使用してプロジェクトに接続する方法を説明します。
接続する前に、まず接続前の準備をお読みください。
最新バージョン:v2.0.0
更新日:2023-10-08
リソースのダウンロード:ソースコード
このドキュメントはv2.0.0以降のバージョンに適用されます。以前のバージョンについては、Erlang SDK接続ガイド(V1)を参照してください
1. SDKの統合
- プロジェクトにrebar3環境が導入されている必要があります。
rebar.configファイルを編集し、thinkingdata_analytics SDKへの参照を追加します。
{erl_opts, [debug_info,
%% lagerライブラリを使用するために必要なパラメーター
{parse_transform, lager_transform},
%% ここで拡張sinkを宣言する必要があります。sinkが複数ある場合は次のように記述してください:[ta_logger, ta_logger_xxxx]
{lager_extra_sinks, [ta_logger]}
]}.
{deps, [
%% ThinkingData SDKを追加
{thinkingdata_analytics, {git, "https://github.com/ThinkingDataAnalytics/erlang-sdk.git", {tag, "v2.0.0"}}}
]}.
{shell, [
%% 設定ファイルを有効化
{config, "config/example_sys.config"},
{apps, [app_name]}
]}.
ヒント:SDKディレクトリにサンプルファイル
example_sys.configがあるので、設定例として参考にできます。
- 次のコマンドを実行します:
rebar3 compile
- プロジェクトの設定ファイル(例:example_sys.config)を編集します。設定ファイルにlagerライブラリの設定を追加します。主な内容は、ThinkingData SDK専用のsink:
ta_logger_lager_eventの追加です。マルチインスタンスで異なるログファイルに書き込む場合は、ほかのsinkも追加する必要があります。
[
%% lagerログライブラリの設定
{lager, [
{colored, true},
{log_root, "./log"}, %% システムの実行中に生成されるログの保存パス
%% ここでThinkingData SDK専用のsinkを1つ追加します。名前はta_logger_lager_eventで固定です
{extra_sinks,
[
{ta_logger_lager_event,
[{handlers, [
{lager_file_backend, [
{file, "LOG_DIRECTORY"}, %% 収集データのファイルパスと名前を設定
{level, info},
{formatter, lager_default_formatter},
{formatter_config, [message, "\n"]},
{size, 10485760}, %% 1ファイルあたりの分割サイズ10Mb
{rotator, td_lager_rotator} %% カスタムログローテーション
]}]},
{async_threshold, 500},
{async_threshold_window, 50}
]
}]
}
]
}
].
LOG_DIRECTORYは、ローカルに書き込むフォルダーのパスです。LogBusの監視フォルダーのパスをここで指定したパスに設定するだけで、LogBusでデータを監視して送信できます。
- アプリプロジェクトの設定ファイルで起動パラメーターを設定します。
xxxx.app.srcファイルに必要な起動項目を追加します。
{application, app_name,
[{description, "An OTP application"},
{vsn, "0.1.0"},
{registered, []},
{mod, {app_name_app, []}},
{applications,
[kernel,
stdlib,
jsone, %% ここに起動項目を追加
lager %% ここに起動項目を追加
]},
{env,[]},
{modules, []},
{licenses, ["Apache-2.0"]},
{links, []}
]}.
- SDKを使用します:
%% A lager sink is provided by default: 'ta_logger'. You could add your own sink
Consumer = td_log_consumer:init_with_logger(fun(E) -> ta_logger:info(E) end),
%% init SDK with consumer
TE_SDK = td_analytics:init_with_consumer(Consumer),
Windowsプラットフォームでの注意事項:管理者権限でコマンドラインターミナルを開いてプロジェクトを実行する必要があります。そうしないと、データの書き込みエラーが発生します。
SDK+LogBusの形式でサーバー側のデータの収集と送信を行うことをお勧めします。次のドキュメントを参考に、Logbusをインストールしてください:LogBus使用ガイド
2. 初期化
SDKの初期化のサンプルコードは次のとおりです:
%% A lager sink is provided by default: 'ta_logger'. You could add your own sink
Consumer = td_log_consumer:init_with_logger(fun(E) -> ta_logger:info(E) end),
%% init SDK with consumer
TE_SDK = td_analytics:init_with_consumer(Consumer),
3. よく使う機能
ゲストIDとアカウントIDを正しく紐付けるため、ゲーム内でゲストIDとアカウントIDの両方を使用する場合は、この2つのIDを同時に送信することを強くお勧めします。そうしないと、アカウントが一致せず、ユーザーが重複してカウントされる可能性があります。具体的なIDの紐付けルールについては、ユーザー識別ルールの章を参照してください。
3.1 イベントの送信
trackを呼び出してイベントを送信できます。事前に整理したドキュメントに従って、イベントのプロパティと送信条件を設定することをお勧めします。イベントを送信するサンプルコードは次のとおりです:
%% 注意:account_idとdistinct_idの少なくとも一方を設定する必要があります
%% ユーザーのIPアドレスを設定。AEシステムはIPアドレスからユーザーの地理位置情報を解析します。設定しない場合、デフォルトでは送信されません
%% イベントの発生時刻を設定。設定しない場合、デフォルトで現在の時刻が使用されます。注意:#timeのタイプはtimestamp()タイプである必要があります
%% イベントを送信
td_analytics:track_instance(TE_SDK, "account_id_Erlang", "distinct_logbus", "ViewProduct", #{"#ip" => "192.168.1.1", "#time" => os:timestamp(), "key_1" => "🚓🦽🦼🚲🚜🚜🦽", "key_2" => 2.2, "key_array" => ["🚌", "🏍", "😚😊"]}),
- イベント名は文字列型で、英字で始まり、数字、英字、アンダースコア"_"を含めることができます。最大長は50文字です。
- Keyはそのプロパティの名前で、文字列型です。英字で始まり、数字、英字、アンダースコア "_" を含めることができます。最大長は50文字で、英字の大文字と小文字は区別されません。AEはすべて小文字に変換します
- Valueはプロパティの値で、文字列、数値、ブール値、時間、オブジェクト、オブジェクトグループ、配列に対応しています
ユーザープロパティの要件は、イベントプロパティと同じです
3.2 ユーザープロパティの設定
一般的なユーザープロパティは、user_set_instanceを呼び出して設定できます。このインターフェースで送信したプロパティは、既存のプロパティ値を上書きします。そのユーザープロパティが以前に存在しない場合は新しく作成され、タイプは渡されたプロパティのタイプと同じになります。ここでは、ユーザー名の設定を例にします:
%% user properties
td_analytics:user_set_instance(TE_SDK, "account_id_Erlang", "distinct_id", #{"id" => 12, "key_1" => [1,1,1,1], "key_2" => ["a", "b"], "key_3" => ["中", "文"], "key_4" => ["中文", "list"], "key_5" => "中文字符串", "amount" => 7.123}),
3.3 データの送信
td_analytics:consumer_type_log()を使用する場合、SDKは収集したデータをリアルタイムでディスクに書き込むため、flush()メソッドを呼び出す必要はありません。
3.4 SDKの終了
%% SDKを終了するときに呼び出す必要があります
td_analytics:close_instance(TE_SDK),
SDKを終了します。キャッシュ内のデータが失われないよう、サーバーをシャットダウンする前にこのインターフェースを呼び出してください
4. ベストプラクティス
次のサンプルコードには、上記のすべての操作が含まれています。次の手順で使用することをお勧めします:
%% A lager sink is provided by default: 'ta_logger'. You could add your own sink
Consumer = td_log_consumer:init_with_logger(fun(E) -> ta_logger:info(E) end),
%% init SDK with consumer
TE_SDK = td_analytics:init_with_consumer(Consumer),
%% ordinary event
td_analytics:track_instance(TE_SDK, "account_id_Erlang", "distinct_logbus", "ViewProduct", #{"key_1" => "🚓🦽🦼🚲🚜🚜🦽", "key_2" => 2.2, "key_array" => ["🚌", "🏍", "😚😊"]}),
td_analytics:close_instance(TE_SDK),

