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

イベントを送信する

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

概要

ゲームテレメトリーサービスを使用すると、イベントを送信することでゲーム内のプレイヤーのアクションを追跡および記録できます。このイベントはゲームのストリーミングパイプラインに追跡されます。これらのアクションを追跡するには、プレイヤーセッションが必要です。そのため、この機能を使用する前に、プレイヤーがゲーム内でアカウントを作成できるようにする必要があります。

イベント送信前の準備

デフォルトでは、テレメトリーイベントは設定された時間が経過した後、バッチとしてゲームのストリーミングパイプラインに送信されます。この時間は、テレメトリーイベントを送信する前に設定する必要があります。即座に送信する必要があるイベントは、即時イベントリストに追加する必要があります。以下は、テレメトリーイベントを設定する方法の例です。

TArray < FString > ImmediateEventList = {
"ITEM_SOURCE",
"ITEM_SINK",
"SPECIALISED_ABILITY"
};

FTimespan Interval = FTimespan::FromSeconds(30);

// set for game client
auto GameApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto GameTelemetryApi = ApiClient->GetGameTelemetryApi().Pin();
GameTelemetryApi->SetImmediateEventList(ImmediateEventList);
GameTelemetryApi->SetBatchFrequency(Interval);

// set for game server
auto ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
ServerApiClient->ServerGameTelemetry.SetImmediateEventList(ImmediateEventList);
ServerApiClient->ServerGameTelemetry.SetBatchFrequency(Interval);

クライアント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;

auto GameApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto GameTelemetryApi = ApiClient->GetGameTelemetryApi().Pin();
GameTelemetryApi->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);
})
);

Extend SDKを使用したイベント送信

以下の関数シグネチャを使用してイベントを送信することもできます。返されたデータはデータウェアハウスに表示され、そこで視覚化をカスタマイズできます。

sdk.Gametelemetry.GametelemetryOperations.ProtectedSaveEventsGameTelemetryV1ProtectedEventsPostOp
.Execute(new List<TelemetryBody>()
{
new TelemetryBody()
{
EventName = "SomeEventName",
EventNamespace = "SomeEventNamespace",
Payload = new Dictionary<string, object>()
{
{ "someString", "" },
{ "someInt", 20 },
{ "someBool", false }
}
}
});

APIを使用したイベント送信

Protected Save Eventsエンドポイント:POST - /game-telemetry/v1/protected/eventsを使用します。イベントメッセージのサイズは1MBに制限されています。

リクエストボディに入力します。

  • EventNamespaceにゲームネームスペースを入力します。
  • EventNameにイベントの名前を入力します。例:「player_killed」または「mission_accomplished」。
  • Payloadにイベントの任意のJSONを入力します。

以下は、さまざまなユースケースのペイロードの例です。

プレイヤーのログインとログアウトを追跡する場合は、リクエストボディの以下のリファレンスを使用できます。

Login:

{
"EventName" : "player_logged_in",
"EventNamespace" : "abshooter", // ゲームネームスペース
"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..]"
}
}

Logout:

{
"EventName" : "player_logged_out",
"EventNamespace" : "abshooter", // ゲームネームスペース
"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"
}
}

マッチメイキングの開始と終了を追跡する場合は、リクエストボディの以下のリファレンスを使用できます。

Start:

{
"EventName" : "player_match_start",
"EventNamespace" : "abshooter", // ゲームネームスペース
"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], // ローカルDSを使用しているか
"GameMode" : "chosen game mode for current match"
}
}

End:

{
"EventName" : "player_match_end",
"EventNamespace" : "abshooter", // ゲームネームスペース
"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], // プレイヤーが勝利したか
"EndReason" : "cause of end match"
}
}

サーバー上のプレイヤーのアクティブステータスを検出する場合は、リクエストボディの以下のリファレンスを使用できます。

{
"EventName" : "player_heartbeat",
"EventNamespace" : "abshooter", // ゲームネームスペース
"Payload": {
"GameSessionId" : "generated after the game client is executed",
"UserId" : "could be obtained from player's credential information",
"IsServer" : [true, false] // サーバー内にいるか
}
}

イベントタイムスタンプは、ゲームテレメトリーによってISO 8601形式(例:2021-01-05T05:04:08.775Z)で自動的に生成されます。

イベントIDは、ゲームテレメトリーによって自動的に生成されます。リクエストが成功すると、イベントは追跡のために指定されたストリーミングパイプラインに送信されます。

ゲームテレメトリーキャッシュ

デフォルトでは、SDKはゲームの終了やクラッシュに備えてイベントをファイルにキャッシュします。以下は、この動作を設定する方法の例です。

キャッシュメカニズムは自動的に実行され、デフォルトで有効になっています。これをオフにするには、開発者はEngine.iniで設定する必要があります:

[/Script/AccelByteUe4Sdk.AccelByteSettings]
GameTelemetryCacheEnabled=false

まだ送信されていないテレメトリーをキャッシュします。ゲームがクラッシュした場合、ユーザーがログインした後にキャッシュを取得して再送信します。 開発者はゲーム上で何も設定する必要はありません。