Unreal
接続する前に、まず接続前の準備をお読みください。
TDAnalyticsはUnreal Engine組み込みのAnalyticsサービスを実装しており、C++コードからインターフェースを直接呼び出してデータを送信することもできます。現在、Android、iOS、Windows、macOSプラットフォームに対応しています。対応するUnreal Engineのバージョンは4.26+および5.+です。
最新バージョン: v3.0.3
更新日: 2025-10-11
このドキュメントはv2.0.0以降のバージョンに適用されます。以前のバージョンについては、Unreal接続ガイド(V1)、SDKダウンロード(v1.6.0)を参照してください
1. SDKの統合
1.1 TDAnalyticsプラグインの統合
Unreal SDKをダウンロードして解凍し、TDAnalyticsをプロジェクトのPluginsディレクトリに配置します。Pluginsディレクトリが存在しない場合は、まずプロジェクトのルートディレクトリにPluginsディレクトリを作成し、次にTDAnalyticsディレクトリをその中に配置します。
1.2 TDAnalyticsプラグインの有効化
TDAnalyticsプラグインを有効にするには、次の手順を実行します:
-
Unreal Editorを再起動します
-
「編集」>「プラグイン」を開き、プロジェクトの
AnalyticsカテゴリでTDAnalyticsを有効にします -
Blueprintを使用する場合は、組み込みの
AnalyticsカテゴリにあるAnalytics Blueprint Libraryを有効にします -
Unreal Editorをもう一度再起動します
-
「編集」>「プロジェクト設定」を開き、「プラグイン」カテゴリでTDAnalyticsのパラメータを設定します:
- Server Url: 必須。受信側のURLです。httpsのURLを使用する必要があります
- App ID: 必須。プロジェクトのAPP IDです。AE管理画面の「プロジェクト管理」ページで確認できます
- TimeZone: 任意。タイムゾーンを揃える必要がある場合は、正しい形式のTimeZone ID(例:"UTC01:00")を入力します。タイムゾーンを揃える必要がない場合は、入力する必要はありません
- Enable Encrypt: データの暗号化を有効にするかどうか。デフォルトはfalseです。有効にすると、データは暗号化されてからAEにアップロードされます
- EncryptPublicKey: 任意。入力しない場合はデフォルト設定を使用します。暗号化用の公開鍵です
- EncryptVersion: 任意。入力しない場合はデフォルト設定を使用します。鍵のバージョンです
- SymmetricEncryption: 任意。入力しない場合はデフォルト設定を使用します。対称鍵です
- AsymmetricEncryption: 任意。入力しない場合はデフォルト設定を使用します。非対称鍵です
注意:Windows/MacOSでは、現在タイムゾーンを揃える機能に対応していません。
ConfigディレクトリにあるDefaultEngine.iniファイルに、次の内容を追加します:
[Analytics]
ProviderModuleName=TDAnalytics
- C++コードで
TDAnalyticsインターフェースを直接使用する場合は、プロジェクトの*.Build.csファイルに次の内容を追加する必要があります:
PrivateDependencyModuleNames.AddRange(new string[] { "TDAnalytics" });
PrivateIncludePathModuleNames.AddRange(new string[] { "TDAnalytics" });
さらに、SDKを使用するファイルでTDAnalytics.hヘッダーファイルをインクルードします:
#include "TDAnalytics.h"
2. 初期化
SDKの初期化のサンプルコードは次のとおりです:
// SDKを初期化
UTDAnalytics::Initialize();
初期化が完了すると、SDKを使用してイベントを送信できるようになります。
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になります
UTDAnalytics::Login("TA");
Loginは複数回呼び出せます。呼び出すたびに、渡されたアカウントIDが以前に保存したIDと一致するかどうかを判定し、一致する場合は呼び出しを無視し、一致しない場合は以前のIDを上書きします。
このメソッドはログインイベントを送信しません
3.2 共通イベントプロパティの設定
共通イベントプロパティとは、すべてのイベントに付与されるプロパティのことです。SetSuperPropertiesを呼び出して共通イベントプロパティを設定できます。イベントを送信する前に、共通イベントプロパティを設定しておくことを推奨します。ユーザーの会員レベルや流入チャネルなどの重要なプロパティは、すべてのイベントに設定する必要があります。その場合は、これらのプロパティを共通イベントプロパティとして設定できます。
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("channel", "ta");//文字列
Properties->SetNumberField("age", 1);//数値
Properties->SetBoolField("isSuccess", true);//ブール値
FDateTime DateTime = FDateTime::Now();
Properties->SetStringField("birthday", FDateTime::FromUnixTimestamp(DateTime.ToUnixTimestamp()).ToString(TEXT("%Y-%m-%d %H:%M:%S.")) += *FString::Printf(TEXT("%03d"), DateTime.GetMillisecond()));//時間
TSharedPtr<FJsonObject> ItemProperties = MakeShareable(new FJsonObject);
ItemProperties->SetStringField("itemChannel", "item");
Properties->SetObjectField("object", ItemProperties);//オブジェクト
TArray< TSharedPtr<FJsonValue> > DataObjectArray;
TSharedPtr<FJsonObject> ArrayItemProperties = MakeShareable(new FJsonObject);
ArrayItemProperties->SetStringField("arrayItemChannel", "array_item");
TSharedPtr<FJsonValueObject> DataObjectValue = MakeShareable(new FJsonValueObject(ArrayItemProperties));
DataObjectArray.Add(DataObjectValue);
Properties->SetArrayField("object_arr", DataObjectArray);//オブジェクトグループ
TArray< TSharedPtr<FJsonValue> > DataArray;
TSharedPtr<FJsonValueString> DataValue = MakeShareable(new FJsonValueString("data_value"));
DataArray.Add(DataValue);
Properties->SetArrayField("arr", DataArray);//配列
UTDAnalytics::SetSuperProperties(Properties, AppID);
- Keyはプロパティの名前で、文字列型です。英字で始まり、数字、英字、アンダースコア"_"のみを含めることができます。最大長は50文字です。英字の大文字と小文字は区別されず、AEではすべて小文字に変換されます
- Valueはプロパティの値で、文字列、数値、ブール値、時間、オブジェクト、オブジェクトグループ、配列に対応しています
イベントプロパティとユーザープロパティの要件は、共通イベントプロパティと同じです
3.3 自動収集の有効化
次のコード例では、インストール、起動、終了イベントを有効にしています(PCでは自動収集に対応していません)。SDKの自動収集機能について詳しくは、自動収集機能の詳細を参照してください
// 自動収集を有効化
UTDAnalytics::EnableAutoTrack();
3.4 イベントの送信
Trackを呼び出してイベントを送信できます。事前に整理したトラッキングドキュメントに従って、イベントのプロパティと送信条件を設定することをお勧めします。ここでは、ユーザーが商品を購入する場合を例にします:
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("product_name", "商品名");//文字列
// プロパティ付きのイベントを送信
UTDAnalytics::Track("product_buy", Properties);
イベント名は文字列型で、英字で始まり、数字、英字、アンダースコア"_"を含めることができます。最大長は50文字です。
3.5 ユーザープロパティの設定
一般的なユーザープロパティは、UserSetを呼び出して設定できます。このインターフェースでアップロードしたプロパティは既存のプロパティ値を上書きします。そのユーザープロパティが存在しない場合は新規作成され、タイプは渡したプロパティのタイプと同じになります。ここでは、ユーザー名を設定する場合を例にします。
//この時点で"username"は"TA"
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("username", "TA");//文字列
UTDAnalytics::UserSet(Properties);
//この時点で"username"は"AE"
TSharedPtr<FJsonObject> NewProperties = MakeShareable(new FJsonObject);
NewProperties->SetStringField("username", "AE");//文字列
UTDAnalytics::UserSet(NewProperties);
4. ベストプラクティス
次のサンプルコードには、上記のすべての操作が含まれています。次の手順で使用することをお勧めします:
#include "TDAnalytics.h"
if (isPrivacyPolicyAccepted) { // ユーザーが「プライバシーポリシー」に同意済み
//SDKを初期化
UTDAnalytics::Initialize();
// 自動収集イベントを有効化
UTDAnalytics::EnableAutoTrack();
//ユーザーがログイン済みの場合は、ユーザーのアカウントIDを一意の識別子として設定できます
UTDAnalytics::Login("TA");
//共通イベントプロパティを設定
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("channel", "ta");//文字列
Properties->SetNumberField("age", 1);//数値
Properties->SetBoolField("isSuccess", true);//ブール値
FDateTime DateTime = FDateTime::Now();
Properties->SetStringField("birthday", FDateTime::FromUnixTimestamp(DateTime.ToUnixTimestamp()).ToString(TEXT("%Y-%m-%d %H:%M:%S.")) += *FString::Printf(TEXT("%03d"), DateTime.GetMillisecond()));//時間
TSharedPtr<FJsonObject> ItemProperties = MakeShareable(new FJsonObject);
ItemProperties->SetStringField("itemChannel", "item");
Properties->SetObjectField("object", ItemProperties);//オブジェクト
TArray< TSharedPtr<FJsonValue> > DataObjectArray;
TSharedPtr<FJsonObject> ArrayItemProperties = MakeShareable(new FJsonObject);
ArrayItemProperties->SetStringField("arrayItemChannel", "array_item");
TSharedPtr<FJsonValueObject> DataObjectValue = MakeShareable(new FJsonValueObject(ArrayItemProperties));
DataObjectArray.Add(DataObjectValue);
Properties->SetArrayField("object_arr", DataObjectArray);//オブジェクトグループ
TArray< TSharedPtr<FJsonValue> > DataArray;
TSharedPtr<FJsonValueString> DataValue = MakeShareable(new FJsonValueString("data_value"));
DataArray.Add(DataValue);
Properties->SetArrayField("arr", DataArray);//配列
UTDAnalytics::SetSuperProperties(Properties, AppID);
//イベントを送信
TSharedPtr<FJsonObject> EventProperties = MakeShareable(new FJsonObject);
EventProperties->SetStringField("product_name", "商品名");//文字列
UTDAnalytics::Track("product_buy", EventProperties);
//ユーザープロパティを設定
TSharedPtr<FJsonObject> UserProperties = MakeShareable(new FJsonObject);
UserProperties->SetStringField("username", "TA");//文字列
UTDAnalytics::UserSet(UserProperties);
}

