メインコンテンツに移動

セッションの管理

れています。すべてのプレイヤーにはアクティブな「Session」が必要です。ゲームはアクティブな「Session」を参照して、ゲーム内の機能が有効か無効かを判断する必要があります。

k-IDの「Session」は自動的に期限切れにはなりません。これは、プレイヤーに関連付けられたローカルストレージまたはクラウドストレージにキャッシュされるように設計されています。子供やティーンエイジャーの場合、保護者がファミリーポータルを使用して権限を追加または削除するか、プレイヤーが誕生日を迎えて、セッションが確立された管轄地域で新しい年齢カテゴリに「年齢アップ」することでセッションが変更されることがあります。「Session」はキャッシュされるように設計されているため、ゲームが起動するたびに、/session/get APIを使用して更新し、変更があれば反映する必要があります。

Getting the session with a session ID in Unreal C++
// read the session from the API into a member variable named SessionInfo
void UKidWorkflow::GetSessionPermissions(const FString& SessionId, const FString& ETag)
{
FString Url = FString::Printf(TEXT("%s/session/get?sessionId=%s&etag=%s"), *BaseUrl,
*SessionId, *ETag);


HttpRequestHelper::GetRequestWithAuth(Url, AuthToken,
[this](FHttpResponsePtr Response, bool bWasSuccessful)
{
if (bWasSuccessful && Response.IsValid())
{
if (Response->GetResponseCode() == 304)
{
UE_LOG(LogTemp, Log, TEXT("Session information is up-to-date."));
return;
}


TSharedRef<TJsonReader<>> Reader =
TJsonReaderFactory<>::Create(Response->GetContentAsString());
if (FJsonSerializer::Deserialize(Reader, SessionInfo))
{
// Save the member variable SessionInfo to local or cloud storage...
SaveSessionInfo();
}
}
else
{
UE_LOG(LogTemp, Error, TEXT("/session/get failed"));
}
});
}
example session
{
"session": {
"ageStatus": "LEGAL_ADULT",
"dateOfBirth": "2005-04-15",
"etag": "6d9d24fccd428f845b355122799948dd0a52fc5d",
"jurisdiction": "US-CA",
"permissions": [
{
"enabled": true,
"managedBy": "PLAYER",
"name": "ai-generated-avatars"
},
{
"enabled": true,
"managedBy": "PLAYER",
"name": "text-chat-private"
}
],
"sessionId": "608616da-4fd2-4742-82bf-ec1d4ffd8187",
"status": "ACTIVE"
},
"status": "PASS"
}