메인 콘텐츠로 이동

세션 관리

k-ID 세션은 현재 플레이어와 위치에 대한 권한 및 나이 상태의 컬렉션을 포함합니다. 모든 플레이어는 활성 세션이 필요합니다. 게임은 활성 세션을 참조하여 게임에서 기능이 활성화되거나 비활성화되는지 여부를 결정해야 합니다.

k-ID 세션은 자동으로 만료되지 않습니다. 플레이어와 연결된 로컬 스토리지나 클라우드 스토리지에 캐시되도록 설계되었습니다. 아이들과 청소년의 경우, 부모가 가족 포털을 사용하여 권한을 추가하거나 제거하거나, 플레이어가 생일을 맞이하여 세션이 설정된 관할권에서 새로운 나이 카테고리로 "성장"하는 경우 세션이 변경될 수 있습니다. 세션이 캐시되도록 설계되었으므로, 변경된 사항을 가져오기 위해 게임이 시작될 때마다 /session/get API를 사용하여 새로 고쳐야 합니다.

Unreal C++에서 세션 ID로 세션 가져오기
// API에서 세션을 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("세션 정보가 최신 상태입니다."));
return;
}


TSharedRef<TJsonReader<>> Reader =
TJsonReaderFactory<>::Create(Response->GetContentAsString());
if (FJsonSerializer::Deserialize(Reader, SessionInfo))
{
// 멤버 변수 SessionInfo를 로컬 또는 클라우드 스토리지에 저장...
SaveSessionInfo();
}
}
else
{
UE_LOG(LogTemp, Error, TEXT("/session/get 실패"));
}
});
}
세션 예시
{
"session": {
"ageStatus": "LEGAL_ADULT",
"dateOfBirth": "2005-04-15",
"etag": "6d9d24fccd428f845b355122799948dd0a52fc5d",
"jurisdiction": "US-CA",
"kuid": "123456",
"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"
}