Send Events
Game Telemetry は、AGS Starter ティアでは利用できません。
概要
Game Telemetry サービスでは、イベントを送信することで、ゲーム内でのプレイヤーのアクションを追跡、記録できます。このイベントは、ゲームのストリーミングパイプラインまで追跡されます。これらのアクションを追跡するには、プレイヤーセッションが必要です。そのため、この機能を使用する前に、プレイヤーがゲーム内でアカウントを作成できるようにする必要があります。
イベントを送信する前の準備
デフォルトでは、テレメトリイベントは一定時間後にバッチとしてゲームのストリーミングパイプラインに送信されます。この時間は、テレメトリイベントを送信する前に設定する必要があります。即時に送信されるイベントをすべて、即時イベントリストに追加する必要もあります。テレメトリイベントを設定する方法の例を次に示します。
TArray < FString > ImmediateEventList = {
"ITEM_SOURCE",
"ITEM_SINK",
"SPECIALISED_ABILITY"
};
FTimespan Interval = FTimespan::FromSeconds(30);
// set for game client
FRegistry::GameTelemetry.SetImmediateEventList(ImmediateEventList);
FRegistry::GameTelemetry.SetBatchFrequency(Interval);
// set for game server
FRegistry::ServerGameTelemetry.SetImmediateEventList(ImmediateEventList);
FRegistry::ServerGameTelemetry.SetBatchFrequency(Interval);
Client SDK を使用したイベントの送信
次の関数シグネチャを使用してイベントを送信することもできます。返されたデータはデータウェアハウスに表示されます。データウェアハウスではデータの視覚化の方法をカスタマイズできます。
FJsonObject Payload;
Payload.SetStringField("someString", "someString");
Payload.SetNumberField("someInt", i);
Payload.SetBoolField("someBool", true);
FAccelByteModelsTelemetryBody TelemetryBody;
TelemetryBody.EventName = "ExampleEvent";
TelemetryBody.EventNamespace = "GameNamespace";
TelemetryBody.Payload = MakeShared < FJsonObject > (Payload);
bool bTelemetryEventSent = false;
FRegistry::GameTelemetry.Send(
TelemetryBody,
FVoidHandler::CreateLambda([ & ]() {
UE_LOG(LogTemp, Log, TEXT(" Success"));
}),_
FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
UE_LOG(LogTemp, Fatal, TEXT(" Error. Code: %d, Reason: %s"), ErrorCode, * ErrorMessage);
})
);
API を使用したイベントの送信
Protected Save Events: POST - /game-telemetry/v1/protected/events
エンドポイントを使用します。イベントメッセージのサイズは 1 MB に制限されています。
リクエスト本文に入力します。
- EventNamespace にゲームの名前空間を入力します。
- EventName にイベントの名前(たとえば、「player_killed」や「mission_accomplished」) を入力します。
- Payload にイベントの任意の JSON を入力します。
以下は、さまざまなユースケースのペイロードの例です。
プレイヤーのログインとログアウトを追跡したい場合は、リクエスト本文に次のリファレンスを使用できます。
ログイン:
{
"EventName" : "player_logged_in",
"EventNamespace" : "abshooter", // Game Namespace
"Payload": {
"GameSessionId" : "generated after the game client is executed",
"UserId" : "could be obtained from player's credential information",
"LoginSessionId" : "generated after the player has been logged in",
"LoginType" : "[USERNAME, LAUNCHER, STEAM, etc..]",
"GameVersion" : "our game release version",
"SDKVersion" : "version of AccelByte SDK in the game's project",
"DSTargetVersion" : "version of dedicated server image",
"Platform" : "[WINDOWS, LINUX, etc..]"
}
}
ログアウト:
{
"EventName" : "player_logged_out",
"EventNamespace" : "abshooter", // Game Namespace
"Payload": {
"GameSessionId" : "generated after the game client is executed",
"UserId" : "could be obtained from player's credential information",
"LoginSessionId" : "generated after the player has been logged in",
"LoginSessionDuration" : "time unit is in minutes"
}
}
マッチメイキングの開始と終了のタイミングを追跡したい場合は、リクエスト本文に次のリファレンスを使用できます。
開始:
{
"EventName" : "player_match_start",
"EventNamespace" : "abshooter", // Game Namespace
"Payload": {
"GameSessionId" : "generated after the game client is executed",
"UserId" : "could be obtained from player's credential information",
"MatchId" : "obtained from lobby matchmaking service",
"ConnectToLocal" : [true, false], // Is using local DS
"GameMode" : "chosen game mode for current match"
}_
}
終了:
{
"EventName" : "player_match_end",
"EventNamespace" : "abshooter", // Game Namespace
"Payload": {
"GameSessionId" : "generated after the game client is executed",
"UserId" : "could be obtained from player's credential information",
"MatchId" : "obtained from lobby matchmaking service",
"IsWinner" : [true, false], // Is the player win
"EndReason" : "cause of end match"
}
}
サーバー上でプレイヤーのアクティブステータスを検知したい場合は、リクエスト本文に次のリファレンスを使用できます。
{
"EventName" : "player_heartbeat",
"EventNamespace" : "abshooter", // Game Namespace
"Payload": {
"GameSessionId" : "generated after the game client is executed",
"UserId" : "could be obtained from player's credential information",
"IsServer" : [true, false] // Is it in the server
}
}
イベントのタイムスタンプは、Game Telemetry が自動的に ISO 8601 形式で生成します (例:2021-01-05T05:04:08.775Z)。
イベントID は、Game Telemetry が自動的に生成します。リクエストが成功すると、イベントは追跡のため、指定されたストリーミングパイプラインに送信されます。
Client SDK を使用したイベントの追跡
Game Telemetry サービスでは、追跡するイベントをゲームのストリーミングパイプラインに送信することで、ゲーム内でのプレイヤーのアクションを追跡して記録できます。これらのアクションを追跡するには、プレイヤーセッションが必要です。そのため、この機能を使用する前に、プレイヤーがゲーム内でアカウントを作成できるようにする必要があります。
準備
デフォルトでは、テレメトリイベントは一定時間後にバッチとしてゲームのストリーミングパイプラインに送信されます。この時間は、テレメトリイベントを送信する前に設定する必要があります。即時に送信されるイベントをすべて、即時イベントリストに追加する必要もあります。テレメトリイベントを設定する方法の例を次に示します。
TArray<FString> EventName;
EventName.Add(FString("ITEM_SOURCE"));
EventName.Add(FString("SPECIALISED_ABILITY"));
FTimespan Interval = FTimespan::FromSeconds(30.0f);
// For Game Client
FRegistry::GameTelemetry.SetImmediateEventList(EventNames);
FRegistry::GameTelemetry.SetBatchFrequency(Interval);
// For Game Server
FRegistry::ServerGameTelemetry.SetImmediateEventList(EventNames);
FRegistry::GameTelemetry.SetBatchFrequency(Interval);
イベントの送信
次の関数シグネチャを使用してイベントを送信することもできます。返されたデータはデータウェアハウスに表示されます。データウェアハウスではデータの視覚化の方法をカスタマイズできます。
TSharedPtr<FJsonObject> Payload = MakeShareable(new FJsonObject);
Payload->SetStringField(FString("SomeString"), FString("SomeValue"));
Payload->SetNumberField(FString("SomeNumber"), 50);
Payload->SetBoolField(FString("SomeBool"), true);
FAccelByteModelsTelemetryBody TelemetryBody;
TelemetryBody.EventName = FString("SomeEventName");
TelemetryBody.EventNamespace = FString("SomeEventNamespace");
TelemetryBody.Payload = Payload;
FRegistry::GameTelemetry.Send(TelemetryBody, FVoidHandler::CreateLambda([]()
{
// Do something if Send Event has been successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if Send Event has an error
UE_LOG(LogTemp, Log, TEXT("Error Send, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}));