メインコンテンツまでスキップ

Send Events

Last updated on August 9, 2023
note

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);

}));